diff options
Diffstat (limited to 'src/lib')
95 files changed, 3167 insertions, 2417 deletions
diff --git a/src/lib/active_text.cc b/src/lib/active_text.cc index 2a5c4d836..19c17d6a8 100644 --- a/src/lib/active_text.cc +++ b/src/lib/active_text.cc @@ -54,15 +54,15 @@ ActiveText::operator=(ActiveText&& other) * @param always_burn_captions Always burn captions even if their content is not set to burn. */ list<PlayerText> -ActiveText::get_burnt (DCPTimePeriod period, bool always_burn_captions) const +ActiveText::get_burnt(DCPTimePeriod period, bool always_burn_captions) const { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); list<PlayerText> ps; for (auto const& i: _data) { - auto caption = i.first.lock (); + auto caption = i.first.lock(); if (!caption) { continue; } @@ -73,10 +73,10 @@ ActiveText::get_burnt (DCPTimePeriod period, bool always_burn_captions) const } for (auto j: i.second) { - DCPTimePeriod test (j.from, j.to.get_value_or(DCPTime::max())); - auto overlap = period.overlap (test); + DCPTimePeriod test(j.from, j.to.get_value_or(DCPTime::max())); + auto overlap = period.overlap(test); if (overlap && overlap->duration() > DCPTime(period.duration().get() / 2)) { - ps.push_back (j.subs); + ps.push_back(j.subs); } } } @@ -89,19 +89,19 @@ ActiveText::get_burnt (DCPTimePeriod period, bool always_burn_captions) const * @param time Time to remove before. */ void -ActiveText::clear_before (DCPTime time) +ActiveText::clear_before(DCPTime time) { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); Map updated; for (auto const& i: _data) { list<Period> as; for (auto j: i.second) { if (!j.to || j.to.get() >= time) { - as.push_back (j); + as.push_back(j); } } - if (!as.empty ()) { + if (!as.empty()) { updated[i.first] = as; } } @@ -115,14 +115,14 @@ ActiveText::clear_before (DCPTime time) * @param from From time for these subtitles. */ void -ActiveText::add_from (weak_ptr<const TextContent> content, PlayerText ps, DCPTime from) +ActiveText::add_from(weak_ptr<const TextContent> content, PlayerText ps, DCPTime from) { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); if (_data.find(content) == _data.end()) { _data[content] = list<Period>(); } - _data[content].push_back (Period (ps, from)); + _data[content].push_back(Period(ps, from)); } @@ -132,19 +132,19 @@ ActiveText::add_from (weak_ptr<const TextContent> content, PlayerText ps, DCPTim * @return Return the corresponding subtitles and their from time. */ pair<PlayerText, DCPTime> -ActiveText::add_to (weak_ptr<const TextContent> content, DCPTime to) +ActiveText::add_to(weak_ptr<const TextContent> content, DCPTime to) { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); - DCPOMATIC_ASSERT (_data.find(content) != _data.end()); + DCPOMATIC_ASSERT(_data.find(content) != _data.end()); _data[content].back().to = to; for (auto& i: _data[content].back().subs.string) { - i.set_out (dcp::Time(to.seconds(), 1000)); + i.set_out(dcp::Time(to.seconds(), 1000)); } - return make_pair (_data[content].back().subs, _data[content].back().from); + return make_pair(_data[content].back().subs, _data[content].back().from); } @@ -152,9 +152,9 @@ ActiveText::add_to (weak_ptr<const TextContent> content, DCPTime to) * @return true if we have any active subtitles from this content. */ bool -ActiveText::have (weak_ptr<const TextContent> content) const +ActiveText::have(weak_ptr<const TextContent> content) const { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); auto i = _data.find(content); if (i == _data.end()) { @@ -166,8 +166,8 @@ ActiveText::have (weak_ptr<const TextContent> content) const void -ActiveText::clear () +ActiveText::clear() { - boost::mutex::scoped_lock lm (_mutex); - _data.clear (); + boost::mutex::scoped_lock lm(_mutex); + _data.clear(); } diff --git a/src/lib/active_text.h b/src/lib/active_text.h index 5430f9681..edbe23242 100644 --- a/src/lib/active_text.h +++ b/src/lib/active_text.h @@ -40,30 +40,30 @@ class TextContent; class ActiveText { public: - ActiveText () {} + ActiveText() {} - ActiveText (ActiveText const&) = delete; - ActiveText& operator= (ActiveText const&) = delete; + ActiveText(ActiveText const&) = delete; + ActiveText& operator=(ActiveText const&) = delete; ActiveText(ActiveText&& other); ActiveText& operator=(ActiveText&& other); - std::list<PlayerText> get_burnt (dcpomatic::DCPTimePeriod period, bool always_burn_captions) const; - void clear_before (dcpomatic::DCPTime time); - void clear (); - void add_from (std::weak_ptr<const TextContent> content, PlayerText ps, dcpomatic::DCPTime from); - std::pair<PlayerText, dcpomatic::DCPTime> add_to (std::weak_ptr<const TextContent> content, dcpomatic::DCPTime to); - bool have (std::weak_ptr<const TextContent> content) const; + std::list<PlayerText> get_burnt(dcpomatic::DCPTimePeriod period, bool always_burn_captions) const; + void clear_before(dcpomatic::DCPTime time); + void clear(); + void add_from(std::weak_ptr<const TextContent> content, PlayerText ps, dcpomatic::DCPTime from); + std::pair<PlayerText, dcpomatic::DCPTime> add_to(std::weak_ptr<const TextContent> content, dcpomatic::DCPTime to); + bool have(std::weak_ptr<const TextContent> content) const; private: class Period { public: - Period () {} + Period() {} - Period (PlayerText s, dcpomatic::DCPTime f) - : subs (s) - , from (f) + Period(PlayerText s, dcpomatic::DCPTime f) + : subs(s) + , from(f) {} PlayerText subs; diff --git a/src/lib/analyse_subtitles_job.cc b/src/lib/analyse_subtitles_job.cc index 66db25f04..c30ff0c30 100644 --- a/src/lib/analyse_subtitles_job.cc +++ b/src/lib/analyse_subtitles_job.cc @@ -42,10 +42,10 @@ using namespace boost::placeholders; #endif -AnalyseSubtitlesJob::AnalyseSubtitlesJob (shared_ptr<const Film> film, shared_ptr<Content> content) - : Job (film) - , _content (content) - , _path (_film->subtitle_analysis_path(content)) +AnalyseSubtitlesJob::AnalyseSubtitlesJob(shared_ptr<const Film> film, shared_ptr<Content> content) + : Job(film) + , _content(content) + , _path(_film->subtitle_analysis_path(content)) { } @@ -57,46 +57,46 @@ AnalyseSubtitlesJob::~AnalyseSubtitlesJob() string -AnalyseSubtitlesJob::name () const +AnalyseSubtitlesJob::name() const { return _("Analysing subtitles"); } string -AnalyseSubtitlesJob::json_name () const +AnalyseSubtitlesJob::json_name() const { return N_("analyse_subtitles"); } void -AnalyseSubtitlesJob::run () +AnalyseSubtitlesJob::run() { auto playlist = make_shared<Playlist>(); - auto content = _content.lock (); - DCPOMATIC_ASSERT (content); - playlist->add (_film, content); + auto content = _content.lock(); + DCPOMATIC_ASSERT(content); + playlist->add(_film, content); auto player = make_shared<Player>(_film, playlist, false); - player->set_ignore_audio (); - player->set_fast (); - player->set_play_referenced (); - player->Text.connect (bind(&AnalyseSubtitlesJob::analyse, this, _1, _2)); + player->set_ignore_audio(); + player->set_fast(); + player->set_play_referenced(); + player->Text.connect(bind(&AnalyseSubtitlesJob::analyse, this, _1, _2)); - set_progress_unknown (); + set_progress_unknown(); if (!content->text.empty()) { - while (!player->pass ()) { + while (!player->pass()) { boost::this_thread::interruption_point(); } } - SubtitleAnalysis analysis (_bounding_box, content->text.front()->x_offset(), content->text.front()->y_offset()); - analysis.write (_path); + SubtitleAnalysis analysis(_bounding_box, content->text.front()->x_offset(), content->text.front()->y_offset()); + analysis.write(_path); - set_progress (1); - set_state (FINISHED_OK); + set_progress(1); + set_state(FINISHED_OK); } @@ -111,7 +111,7 @@ AnalyseSubtitlesJob::analyse(PlayerText const& text, TextType type) if (!_bounding_box) { _bounding_box = i.rectangle; } else { - _bounding_box->extend (i.rectangle); + _bounding_box->extend(i.rectangle); } } @@ -139,14 +139,14 @@ AnalyseSubtitlesJob::analyse(PlayerText const& text, TextType type) for (auto standard: override_standard) { for (auto i: bounding_box(text.string, frame, standard)) { - dcpomatic::Rect<double> rect ( + dcpomatic::Rect<double> rect( double(i.x) / frame.width, double(i.y) / frame.height, double(i.width) / frame.width, double(i.height) / frame.height ); if (!_bounding_box) { _bounding_box = rect; } else { - _bounding_box->extend (rect); + _bounding_box->extend(rect); } } } diff --git a/src/lib/analyse_subtitles_job.h b/src/lib/analyse_subtitles_job.h index ea425763f..bb6aa3f31 100644 --- a/src/lib/analyse_subtitles_job.h +++ b/src/lib/analyse_subtitles_job.h @@ -31,14 +31,14 @@ class Content; class AnalyseSubtitlesJob : public Job { public: - AnalyseSubtitlesJob (std::shared_ptr<const Film> film, std::shared_ptr<Content> content); + AnalyseSubtitlesJob(std::shared_ptr<const Film> film, std::shared_ptr<Content> content); ~AnalyseSubtitlesJob(); - std::string name () const override; - std::string json_name () const override; - void run () override; + std::string name() const override; + std::string json_name() const override; + void run() override; - boost::filesystem::path path () const { + boost::filesystem::path path() const { return _path; } diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index 50601fc58..bd25593d0 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -212,8 +212,8 @@ AudioContent::resampled_frame_rate(shared_ptr<const Film> film) const look different in the DCP compared to the source (slower or faster). */ - if (frc.change_speed) { - t /= frc.speed_up; + if (frc.change_speed()) { + t /= frc.speed_up(); } return lrint(t); @@ -330,11 +330,11 @@ AudioContent::add_properties(shared_ptr<const Film> film, list<UserProperty>& p) } p.push_back( - UserProperty(UserProperty::LENGTH, _("Full length in video frames at content rate"), c.frames_round(frc.source)) + UserProperty(UserProperty::LENGTH, _("Full length in video frames at content rate"), c.frames_round(frc.source())) ); p.push_back(UserProperty(UserProperty::AUDIO, _("DCP sample rate"), resampled_frame_rate(film), _("Hz"))); - p.push_back(UserProperty(UserProperty::LENGTH, _("Full length in video frames at DCP rate"), c.frames_round(frc.dcp))); + p.push_back(UserProperty(UserProperty::LENGTH, _("Full length in video frames at DCP rate"), c.frames_round(frc.dcp()))); } diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc index 939a03414..c926437ea 100644 --- a/src/lib/audio_mapping.cc +++ b/src/lib/audio_mapping.cc @@ -54,26 +54,26 @@ using dcp::raw_convert; * @param input_channels Number of input channels. * @param output_channels Number of output channels. */ -AudioMapping::AudioMapping (int input_channels, int output_channels) +AudioMapping::AudioMapping(int input_channels, int output_channels) { - setup (input_channels, output_channels); + setup(input_channels, output_channels); } void -AudioMapping::setup (int input_channels, int output_channels) +AudioMapping::setup(int input_channels, int output_channels) { _gain.resize(input_channels); for (int i = 0; i < input_channels; ++i) { _gain[i].resize(output_channels); } - make_zero (); + make_zero(); } void -AudioMapping::make_zero () +AudioMapping::make_zero() { for (auto& input: _gain) { for (auto& output: input) { @@ -85,50 +85,50 @@ AudioMapping::make_zero () struct ChannelRegex { - ChannelRegex (string regex_, int channel_) - : regex (regex_) - , channel (channel_) + ChannelRegex(string regex_, dcp::Channel channel_) + : regex(regex_) + , channel(channel_) {} string regex; - int channel; + dcp::Channel channel; }; void -AudioMapping::make_default (AudioProcessor const * processor, optional<boost::filesystem::path> filename) +AudioMapping::make_default(AudioProcessor const * processor, optional<boost::filesystem::path> filename) { static ChannelRegex const regex[] = { - ChannelRegex(".*[\\._-]L[\\._-].*", 0), - ChannelRegex(".*[\\._-]R[\\._-].*", 1), - ChannelRegex(".*[\\._-]C[\\._-].*", 2), - ChannelRegex(".*[\\._-]Lfe[\\._-].*", 3), - ChannelRegex(".*[\\._-]LFE[\\._-].*", 3), - ChannelRegex(".*[\\._-]Lss[\\._-].*", 4), - ChannelRegex(".*[\\._-]Lsr[\\._-].*", 6), - ChannelRegex(".*[\\._-]Lrs[\\._-].*", 6), - ChannelRegex(".*[\\._-]Ls[\\._-].*", 4), - ChannelRegex(".*[\\._-]Rss[\\._-].*", 5), - ChannelRegex(".*[\\._-]Rsr[\\._-].*", 7), - ChannelRegex(".*[\\._-]Rrs[\\._-].*", 7), - ChannelRegex(".*[\\._-]Rs[\\._-].*", 5), + ChannelRegex(".*[\\._-]L[\\._-].*", dcp::Channel::LEFT), + ChannelRegex(".*[\\._-]R[\\._-].*", dcp::Channel::RIGHT), + ChannelRegex(".*[\\._-]C[\\._-].*", dcp::Channel::CENTRE), + ChannelRegex(".*[\\._-]Lfe[\\._-].*", dcp::Channel::LFE), + ChannelRegex(".*[\\._-]LFE[\\._-].*", dcp::Channel::LFE), + ChannelRegex(".*[\\._-]Lss[\\._-].*", dcp::Channel::LS), + ChannelRegex(".*[\\._-]Lsr[\\._-].*", dcp::Channel::BSL), + ChannelRegex(".*[\\._-]Lrs[\\._-].*", dcp::Channel::BSL), + ChannelRegex(".*[\\._-]Ls[\\._-].*", dcp::Channel::LS), + ChannelRegex(".*[\\._-]Rss[\\._-].*", dcp::Channel::RS), + ChannelRegex(".*[\\._-]Rsr[\\._-].*", dcp::Channel::BSR), + ChannelRegex(".*[\\._-]Rrs[\\._-].*", dcp::Channel::BSR), + ChannelRegex(".*[\\._-]Rs[\\._-].*", dcp::Channel::RS), }; static int const regexes = sizeof(regex) / sizeof(*regex); if (processor) { - processor->make_audio_mapping_default (*this); + processor->make_audio_mapping_default(*this); } else { - make_zero (); + make_zero(); if (input_channels() == 1) { bool guessed = false; /* See if we can guess where this stream should go */ if (filename) { for (int i = 0; i < regexes; ++i) { - boost::regex e (regex[i].regex, boost::regex::icase); - if (boost::regex_match(filename->filename().string(), e) && regex[i].channel < output_channels()) { - set (0, regex[i].channel, 1); + boost::regex e(regex[i].regex, boost::regex::icase); + if (boost::regex_match(filename->filename().string(), e) && static_cast<int>(regex[i].channel) < output_channels()) { + set(0, regex[i].channel, 1); guessed = true; } } @@ -136,41 +136,41 @@ AudioMapping::make_default (AudioProcessor const * processor, optional<boost::fi if (!guessed) { /* If we have no idea, just put it on centre */ - set (0, static_cast<int>(dcp::Channel::CENTRE), 1); + set(0, static_cast<int>(dcp::Channel::CENTRE), 1); } } else { /* 1:1 mapping */ - for (int i = 0; i < min (input_channels(), output_channels()); ++i) { - set (i, i, 1); + for (int i = 0; i < min(input_channels(), output_channels()); ++i) { + set(i, i, 1); } } } } -AudioMapping::AudioMapping (cxml::ConstNodePtr node, int state_version) +AudioMapping::AudioMapping(cxml::ConstNodePtr node, int state_version) { if (state_version < 32) { - setup (node->number_child<int>("ContentChannels"), MAX_DCP_AUDIO_CHANNELS); + setup(node->number_child<int>("ContentChannels"), MAX_DCP_AUDIO_CHANNELS); } else { - setup (node->number_child<int>("InputChannels"), node->number_child<int>("OutputChannels")); + setup(node->number_child<int>("InputChannels"), node->number_child<int>("OutputChannels")); } if (state_version <= 5) { /* Old-style: on/off mapping */ - for (auto i: node->node_children ("Map")) { - set (i->number_child<int>("ContentIndex"), i->number_child<int>("DCP"), 1); + for (auto i: node->node_children("Map")) { + set(i->number_child<int>("ContentIndex"), i->number_child<int>("DCP"), 1); } } else { for (auto i: node->node_children("Gain")) { if (state_version < 32) { - set ( + set( i->number_attribute<int>("Content"), i->number_attribute<int>("DCP"), raw_convert<float>(i->content()) ); } else { - set ( + set( number_attribute<int>(i, "Input", "input"), number_attribute<int>(i, "Output", "output"), raw_convert<float>(i->content()) @@ -182,40 +182,40 @@ AudioMapping::AudioMapping (cxml::ConstNodePtr node, int state_version) void -AudioMapping::set (dcp::Channel input_channel, int output_channel, float g) +AudioMapping::set(dcp::Channel input_channel, int output_channel, float g) { - set (static_cast<int>(input_channel), output_channel, g); + set(static_cast<int>(input_channel), output_channel, g); } void -AudioMapping::set (int input_channel, dcp::Channel output_channel, float g) +AudioMapping::set(int input_channel, dcp::Channel output_channel, float g) { - set (input_channel, static_cast<int>(output_channel), g); + set(input_channel, static_cast<int>(output_channel), g); } void -AudioMapping::set (int input_channel, int output_channel, float g) +AudioMapping::set(int input_channel, int output_channel, float g) { - DCPOMATIC_ASSERT (input_channel < int(_gain.size())); - DCPOMATIC_ASSERT (output_channel < int(_gain[0].size())); + DCPOMATIC_ASSERT(input_channel < int(_gain.size())); + DCPOMATIC_ASSERT(output_channel < int(_gain[0].size())); _gain[input_channel][output_channel] = g; } float -AudioMapping::get (int input_channel, dcp::Channel output_channel) const +AudioMapping::get(int input_channel, dcp::Channel output_channel) const { - return get (input_channel, static_cast<int>(output_channel)); + return get(input_channel, static_cast<int>(output_channel)); } float -AudioMapping::get (int input_channel, int output_channel) const +AudioMapping::get(int input_channel, int output_channel) const { - DCPOMATIC_ASSERT (input_channel < int (_gain.size())); - DCPOMATIC_ASSERT (output_channel < int (_gain[0].size())); + DCPOMATIC_ASSERT(input_channel < int(_gain.size())); + DCPOMATIC_ASSERT(output_channel < int(_gain[0].size())); return _gain[input_channel][output_channel]; } @@ -244,7 +244,7 @@ AudioMapping::as_xml(xmlpp::Element* element) const * differentiation between different AudioMappings. */ string -AudioMapping::digest () const +AudioMapping::digest() const { Digester digester; digester.add(input_channels()); @@ -255,12 +255,12 @@ AudioMapping::digest () const } } - return digester.get (); + return digester.get(); } list<int> -AudioMapping::mapped_output_channels () const +AudioMapping::mapped_output_channels() const { static float const minus_96_db = 0.000015849; @@ -269,20 +269,20 @@ AudioMapping::mapped_output_channels () const for (auto const& i: _gain) { for (auto j: dcp::used_audio_channels()) { if (abs(i[static_cast<int>(j)]) > minus_96_db) { - mapped.push_back (static_cast<int>(j)); + mapped.push_back(static_cast<int>(j)); } } } - mapped.sort (); - mapped.unique (); + mapped.sort(); + mapped.unique(); return mapped; } void -AudioMapping::unmap_all () +AudioMapping::unmap_all() { for (auto& i: _gain) { for (auto& j: i) { diff --git a/src/lib/audio_mapping.h b/src/lib/audio_mapping.h index 68487d908..0dc80193b 100644 --- a/src/lib/audio_mapping.h +++ b/src/lib/audio_mapping.h @@ -46,40 +46,40 @@ class AudioProcessor; class AudioMapping { public: - AudioMapping () {} - AudioMapping (int input_channels, int output_channels); - AudioMapping (cxml::ConstNodePtr, int); + AudioMapping() {} + AudioMapping(int input_channels, int output_channels); + AudioMapping(cxml::ConstNodePtr, int); /* Default copy constructor is fine */ 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>()); + void make_zero(); + void make_default(AudioProcessor const * processor, boost::optional<boost::filesystem::path> filename = boost::optional<boost::filesystem::path>()); - void set (dcp::Channel input_channel, int output_channel, float); - void set (int input_channel, int output_channel, float); - void set (int input_channel, dcp::Channel output_channel, float); - float get (int input_channel, int output_channel) const; - float get (int input_channel, dcp::Channel output_channel) const; + void set(dcp::Channel input_channel, int output_channel, float); + void set(int input_channel, int output_channel, float); + void set(int input_channel, dcp::Channel output_channel, float); + float get(int input_channel, int output_channel) const; + float get(int input_channel, dcp::Channel output_channel) const; - int input_channels () const { + int input_channels() const { return _gain.size(); } - int output_channels () const { + int output_channels() const { return _gain.empty() ? 0 : _gain[0].size(); } - std::string digest () const; + std::string digest() const; - std::list<int> mapped_output_channels () const; - void unmap_all (); + std::list<int> mapped_output_channels() const; + void unmap_all(); void take_from(AudioMapping const& other); private: - void setup (int input_channels, int output_channels); + void setup(int input_channels, int output_channels); /** Linear gains */ std::vector<std::vector<float>> _gain; diff --git a/src/lib/cinema_sound_processor.cc b/src/lib/cinema_sound_processor.cc index 434fdd1cf..2ddbb9086 100644 --- a/src/lib/cinema_sound_processor.cc +++ b/src/lib/cinema_sound_processor.cc @@ -42,12 +42,12 @@ vector<unique_ptr<const CinemaSoundProcessor>> CinemaSoundProcessor::_cinema_sou /** @param i Our id. * @param n User-visible name. */ -CinemaSoundProcessor::CinemaSoundProcessor (string i, string n, float knee, float below, float above) - : _id (i) - , _name (n) - , _knee (knee) - , _below (below) - , _above (above) +CinemaSoundProcessor::CinemaSoundProcessor(string i, string n, float knee, float below, float above) + : _id(i) + , _name(n) + , _knee(knee) + , _below(below) + , _above(above) { } @@ -55,11 +55,11 @@ CinemaSoundProcessor::CinemaSoundProcessor (string i, string n, float knee, floa /** @return All available sound processors */ vector<CinemaSoundProcessor const *> -CinemaSoundProcessor::all () +CinemaSoundProcessor::all() { vector<CinemaSoundProcessor const *> raw; for (auto& processor: _cinema_sound_processors) { - raw.push_back (processor.get()); + raw.push_back(processor.get()); } return raw; } @@ -69,11 +69,11 @@ CinemaSoundProcessor::all () * methods are used. */ void -CinemaSoundProcessor::setup_cinema_sound_processors () +CinemaSoundProcessor::setup_cinema_sound_processors() { - _cinema_sound_processors.push_back (unique_ptr<CinemaSoundProcessor>(new DolbyCP750)); - _cinema_sound_processors.push_back (unique_ptr<CinemaSoundProcessor>(new USL)); - _cinema_sound_processors.push_back (unique_ptr<CinemaSoundProcessor>(new DatasatAP2x)); + _cinema_sound_processors.push_back(unique_ptr<CinemaSoundProcessor>(new DolbyCP750)); + _cinema_sound_processors.push_back(unique_ptr<CinemaSoundProcessor>(new USL)); + _cinema_sound_processors.push_back(unique_ptr<CinemaSoundProcessor>(new DatasatAP2x)); } @@ -81,14 +81,14 @@ CinemaSoundProcessor::setup_cinema_sound_processors () * @return Corresponding sound processor, or 0. */ CinemaSoundProcessor const * -CinemaSoundProcessor::from_id (string id) +CinemaSoundProcessor::from_id(string id) { - auto i = _cinema_sound_processors.begin (); + auto i = _cinema_sound_processors.begin(); while (i != _cinema_sound_processors.end() && (*i)->id() != id) { ++i; } - if (i == _cinema_sound_processors.end ()) { + if (i == _cinema_sound_processors.end()) { return nullptr; } @@ -100,36 +100,36 @@ CinemaSoundProcessor::from_id (string id) * @return Corresponding sound processor. */ CinemaSoundProcessor const * -CinemaSoundProcessor::from_index (int i) +CinemaSoundProcessor::from_index(int i) { - DCPOMATIC_ASSERT (i >= 0 && i < int(_cinema_sound_processors.size())); + DCPOMATIC_ASSERT(i >= 0 && i < int(_cinema_sound_processors.size())); return _cinema_sound_processors[i].get(); } float -CinemaSoundProcessor::db_for_fader_change (float from, float to) const +CinemaSoundProcessor::db_for_fader_change(float from, float to) const { float db = 0; if (from < to) { if (from <= _knee) { - float const t = min (to, _knee); + float const t = min(to, _knee); db += (t - from) * _below; } if (to > 4) { - float const t = max (from, _knee); + float const t = max(from, _knee); db += (to - t) * _above; } } else { if (from >= _knee) { - float const t = max (to, _knee); + float const t = max(to, _knee); db -= (from - t) * _above; } if (to < _knee) { - float const t = min (from, _knee); + float const t = min(from, _knee); db -= (t - to) * _below; } } diff --git a/src/lib/cinema_sound_processor.h b/src/lib/cinema_sound_processor.h index 3ccaa5c9b..411a70366 100644 --- a/src/lib/cinema_sound_processor.h +++ b/src/lib/cinema_sound_processor.h @@ -43,28 +43,28 @@ class CinemaSoundProcessor { public: - CinemaSoundProcessor (std::string i, std::string n, float knee, float below, float above); - virtual ~CinemaSoundProcessor () {} + CinemaSoundProcessor(std::string i, std::string n, float knee, float below, float above); + virtual ~CinemaSoundProcessor() {} - CinemaSoundProcessor (CinemaSoundProcessor const&) = delete; + CinemaSoundProcessor(CinemaSoundProcessor const&) = delete; CinemaSoundProcessor& operator=(CinemaSoundProcessor const&) = delete; - float db_for_fader_change (float from, float to) const; + float db_for_fader_change(float from, float to) const; /** @return id for our use */ - std::string id () const { + std::string id() const { return _id; } /** @return user-visible name for this sound processor */ - std::string name () const { + std::string name() const { return _name; } - static std::vector<CinemaSoundProcessor const *> all (); - static void setup_cinema_sound_processors (); - static CinemaSoundProcessor const * from_id (std::string id); - static CinemaSoundProcessor const * from_index (int); + static std::vector<CinemaSoundProcessor const *> all(); + static void setup_cinema_sound_processors(); + static CinemaSoundProcessor const * from_id(std::string id); + static CinemaSoundProcessor const * from_index(int); private: /** id for our use */ diff --git a/src/lib/content.cc b/src/lib/content.cc index 8f486380a..067086509 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -431,7 +431,7 @@ Content::active_video_frame_rate(shared_ptr<const Film> film) const prepared for any concurrent video content or perhaps just the DCP rate. */ - return film->active_frame_rate_change(position()).source; + return film->active_frame_rate_change(position()).source(); } diff --git a/src/lib/create_cli.cc b/src/lib/create_cli.cc index 32834be23..3ef61fe11 100644 --- a/src/lib/create_cli.cc +++ b/src/lib/create_cli.cc @@ -85,6 +85,8 @@ help() " --left-eye next piece of content is for the left eye\n" " --right-eye next piece of content is for the right eye\n" " --auto-crop next piece of content should be auto-cropped\n" + " --fill-crop next piece of content should be cropped to fit the container\n" + " (e.g. to crop the letterboxing from a scope-in-flat image)\n" " --colourspace next piece of content is in the given colourspace: " + colour_conversions + "\n" " --colorspace same as --colourspace\n" " --channel <channel> next piece of content should be mapped to audio channel L, R, C, Lfe, Ls, Rs, BsL, BsR, HI, VI\n" @@ -184,6 +186,7 @@ CreateCLI::CreateCLI(int argc, char* argv[]) optional<string> next_colour_conversion; auto next_frame_type = VideoFrameType::TWO_D; auto next_auto_crop = false; + auto next_fill_crop = false; optional<dcp::Channel> channel; optional<float> gain; optional<float> fade_in; @@ -225,6 +228,9 @@ CreateCLI::CreateCLI(int argc, char* argv[]) } else if (a == "--auto-crop") { next_auto_crop = true; claimed = true; + } else if (a == "--fill-crop") { + next_fill_crop = true; + claimed = true; } else if (a == "--twok") { _twok = true; claimed = true; @@ -331,6 +337,7 @@ CreateCLI::CreateCLI(int argc, char* argv[]) c.path = a; c.frame_type = next_frame_type; c.auto_crop = next_auto_crop; + c.fill_crop = next_fill_crop; c.colour_conversion = next_colour_conversion; c.channel = channel; c.gain = gain; @@ -341,6 +348,7 @@ CreateCLI::CreateCLI(int argc, char* argv[]) content.push_back(c); next_frame_type = VideoFrameType::TWO_D; next_auto_crop = false; + next_fill_crop = false; next_colour_conversion = {}; channel = {}; gain = {}; @@ -555,6 +563,30 @@ CreateCLI::make_film(function<void (string)> error) const video->set_crop(crop); } + if (cli_content.fill_crop && video->size()) { + auto const source_ratio = video->size()->ratio(); + Crop crop; + if (source_ratio < film->container().ratio()) { + /* Part to extract is wider than the source */ + auto const height = video->size()->width / film->container().ratio(); + crop.top = crop.bottom = (video->size()->height - height) / 2; + } else { + /* Container is wider than the source */ + auto const width = video->size()->height * film->container().ratio(); + crop.left = crop.right = (video->size()->width - width) / 2; + } + + error(fmt::format( + "Cropped {} to {} left, {} right, {} top and {} bottom", + film_content->path(0).string(), + crop.left, + crop.right, + crop.top, + crop.bottom + )); + + video->set_crop(crop); + } if (cli_content.colour_conversion) { video->set_colour_conversion(PresetColourConversion::from_id(*cli_content.colour_conversion).conversion); } diff --git a/src/lib/create_cli.h b/src/lib/create_cli.h index 00abf85e5..cde8598cd 100644 --- a/src/lib/create_cli.h +++ b/src/lib/create_cli.h @@ -42,6 +42,7 @@ public: boost::filesystem::path path; VideoFrameType frame_type = VideoFrameType::TWO_D; bool auto_crop = false; + bool fill_crop = false; boost::optional<std::string> colour_conversion; boost::optional<dcp::Channel> channel; boost::optional<float> gain; diff --git a/src/lib/dcp_subtitle_content.cc b/src/lib/dcp_subtitle_content.cc index 21159fcac..ac8c4245b 100644 --- a/src/lib/dcp_subtitle_content.cc +++ b/src/lib/dcp_subtitle_content.cc @@ -38,22 +38,25 @@ using std::list; using std::make_shared; using std::shared_ptr; using std::string; +using std::vector; using boost::optional; using namespace dcpomatic; -DCPSubtitleContent::DCPSubtitleContent (boost::filesystem::path path) - : Content (path) +DCPSubtitleContent::DCPSubtitleContent(boost::filesystem::path path) + : Content(path) { - text.push_back (make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE)); + text = vector<shared_ptr<TextContent>>{make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE)}; + /* Default to turning these subtitles on */ + only_text()->set_use(true); } 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")) + : Content(node, film_directory) + , _length(node->number_child<ContentTime::Type>("Length")) { list<string> notes; - text = TextContent::from_xml (this, node, version, notes); + text = TextContent::from_xml(this, node, version, notes); } void @@ -63,20 +66,16 @@ DCPSubtitleContent::examine(shared_ptr<const Film> film, shared_ptr<Job> job, bo auto subtitle_asset = load(path(0)); - auto iop = dynamic_pointer_cast<dcp::InteropTextAsset>(subtitle_asset); - auto smpte = dynamic_pointer_cast<dcp::SMPTETextAsset>(subtitle_asset); - if (smpte) { + if (auto smpte = dynamic_pointer_cast<dcp::SMPTETextAsset>(subtitle_asset)) { set_video_frame_rate(film, smpte->edit_rate().numerator); } - boost::mutex::scoped_lock lm (_mutex); - - /* Default to turning these subtitles on */ - only_text()->set_use (true); + boost::mutex::scoped_lock lm(_mutex); _length = ContentTime::from_seconds(subtitle_asset->latest_text_out().as_seconds()); subtitle_asset->fix_empty_font_ids(); + only_text()->clear_fonts(); add_fonts(only_text(), subtitle_asset); } @@ -115,26 +114,26 @@ DCPSubtitleContent::add_fonts(shared_ptr<TextContent> content, shared_ptr<dcp::T DCPTime -DCPSubtitleContent::full_length (shared_ptr<const Film> film) const +DCPSubtitleContent::full_length(shared_ptr<const Film> film) const { - FrameRateChange const frc (film, shared_from_this()); - return DCPTime (_length, frc); + FrameRateChange const frc(film, shared_from_this()); + return DCPTime(_length, frc); } DCPTime -DCPSubtitleContent::approximate_length () const +DCPSubtitleContent::approximate_length() const { - return DCPTime (_length, FrameRateChange()); + return DCPTime(_length, FrameRateChange()); } string -DCPSubtitleContent::summary () const +DCPSubtitleContent::summary() const { return path_summary() + " " + _("[subtitles]"); } string -DCPSubtitleContent::technical_summary () const +DCPSubtitleContent::technical_summary() const { return Content::technical_summary() + " - " + _("DCP XML subtitles"); } diff --git a/src/lib/dcp_subtitle_content.h b/src/lib/dcp_subtitle_content.h index dde3139a8..5b1c8426d 100644 --- a/src/lib/dcp_subtitle_content.h +++ b/src/lib/dcp_subtitle_content.h @@ -24,12 +24,12 @@ class DCPSubtitleContent : public DCPSubtitle, public Content { public: - DCPSubtitleContent (boost::filesystem::path); - DCPSubtitleContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int); + DCPSubtitleContent(boost::filesystem::path); + DCPSubtitleContent(cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int); - void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>, bool tolerant) override; - std::string summary () const override; - std::string technical_summary () const override; + void examine(std::shared_ptr<const Film> film, std::shared_ptr<Job>, bool tolerant) override; + std::string summary() const override; + std::string technical_summary() const override; void as_xml( xmlpp::Element* element, @@ -38,8 +38,8 @@ public: 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; + 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::TextAsset> subtitle_asset); diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc index 775298091..66f4a3c4c 100644 --- a/src/lib/dcp_video.cc +++ b/src/lib/dcp_video.cc @@ -135,16 +135,32 @@ DCPVideo::get_size() const void DCPVideo::convert_to_xyz(uint16_t* dst) const { - DCPOMATIC_ASSERT(_frame->colour_conversion()); + auto conversion = [](AVPixelFormat fmt) { + return fmt == AV_PIX_FMT_XYZ12LE ? AV_PIX_FMT_XYZ12LE : AV_PIX_FMT_RGB48LE; + }; - auto image = _frame->image(force(AV_PIX_FMT_RGB48LE), VideoRange::FULL, false); - dcp::rgb_to_xyz( - image->data()[0], - dst, - image->size(), - image->stride()[0], - _frame->colour_conversion().get() - ); + auto image = _frame->image(conversion, VideoRange::FULL, false); + + if (_frame->colour_conversion()) { + dcp::rgb_to_xyz( + image->data()[0], + dst, + image->size(), + image->stride()[0], + _frame->colour_conversion().get() + ); + } else { + auto const size = image->size(); + auto const row_bytes = static_cast<size_t>(size.width) * 3 * sizeof(uint16_t); + auto src = image->data()[0]; + auto const src_stride = image->stride()[0]; + auto out = reinterpret_cast<uint8_t*>(dst); + for (int y = 0; y < size.height; ++y) { + memcpy(out, src, row_bytes); + src += src_stride; + out += row_bytes; + } + } } diff --git a/src/lib/dcpomatic_socket.cc b/src/lib/dcpomatic_socket.cc index d3bfbc309..876fa47d3 100644 --- a/src/lib/dcpomatic_socket.cc +++ b/src/lib/dcpomatic_socket.cc @@ -50,7 +50,11 @@ Socket::Socket (int timeout) void Socket::check () { +#if BOOST_VERSION >= 108700 if (_deadline.expiry() <= std::chrono::system_clock::now()) { +#else + if (_deadline.expires_at() <= std::chrono::system_clock::now()) { +#endif _socket.close(); _deadline.expires_at(std::chrono::time_point<std::chrono::system_clock>::max()); } @@ -321,7 +325,11 @@ Socket::set_send_buffer_size (int size) void Socket::set_deadline_from_now(int seconds) { +#if BOOST_VERSION >= 108700 _deadline.expires_after(std::chrono::seconds(seconds)); +#else + _deadline.expires_from_now(std::chrono::seconds(seconds)); +#endif } void diff --git a/src/lib/dcpomatic_time.cc b/src/lib/dcpomatic_time.cc index 60fc5342a..2b1400ccf 100644 --- a/src/lib/dcpomatic_time.cc +++ b/src/lib/dcpomatic_time.cc @@ -48,7 +48,7 @@ dcpomatic::operator<=(HMSF const& a, HMSF const& b) template <> Time<ContentTimeDifferentiator, DCPTimeDifferentiator>::Time (DCPTime d, FrameRateChange f) - : _t (llrint(d.get() * f.speed_up)) + : _t (llrint(d.get() * f.speed_up())) { } @@ -56,7 +56,7 @@ Time<ContentTimeDifferentiator, DCPTimeDifferentiator>::Time (DCPTime d, FrameRa template <> Time<DCPTimeDifferentiator, ContentTimeDifferentiator>::Time (ContentTime d, FrameRateChange f) - : _t (llrint(d.get() / f.speed_up)) + : _t (llrint(d.get() / f.speed_up())) { } diff --git a/src/lib/digester.cc b/src/lib/digester.cc index 67a3e2398..bbcad5478 100644 --- a/src/lib/digester.cc +++ b/src/lib/digester.cc @@ -22,6 +22,7 @@ #include "digester.h" #include "dcpomatic_assert.h" #include <nettle/md5.h> +#include <nettle/version.h> #include <iomanip> #include <cstdio> @@ -32,38 +33,42 @@ using std::setfill; using std::setw; -Digester::Digester () +Digester::Digester() { - md5_init (&_context); + md5_init(&_context); } -Digester::~Digester () +Digester::~Digester() { - get (); + get(); } void -Digester::add (void const * data, size_t size) +Digester::add(void const * data, size_t size) { - md5_update (&_context, size, reinterpret_cast<uint8_t const *>(data)); + md5_update(&_context, size, reinterpret_cast<uint8_t const *>(data)); } void -Digester::add (string const & s) +Digester::add(string const & s) { - add (s.c_str(), s.length()); + add(s.c_str(), s.length()); } string -Digester::get () const +Digester::get() const { if (!_digest) { unsigned char digest[MD5_DIGEST_SIZE]; - md5_digest (&_context, MD5_DIGEST_SIZE, digest); +#if NETTLE_VERSION_MAJOR >= 4 + md5_digest(&_context, digest); +#else + md5_digest(&_context, MD5_DIGEST_SIZE, digest); +#endif char hex[MD5_DIGEST_SIZE * 2 + 1]; for (int i = 0; i < MD5_DIGEST_SIZE; ++i) { @@ -73,19 +78,23 @@ Digester::get () const _digest = hex; } - return _digest.get (); + return _digest.get(); } void -Digester::get (uint8_t* buffer) const +Digester::get(uint8_t* buffer) const { - md5_digest (&_context, MD5_DIGEST_SIZE, buffer); +#if NETTLE_VERSION_MAJOR >= 4 + md5_digest(&_context, buffer); +#else + md5_digest(&_context, MD5_DIGEST_SIZE, buffer); +#endif } int -Digester::size () const +Digester::size() const { return MD5_DIGEST_SIZE; } diff --git a/src/lib/digester.h b/src/lib/digester.h index e4daabd68..5ff50f363 100644 --- a/src/lib/digester.h +++ b/src/lib/digester.h @@ -27,26 +27,26 @@ class Digester { public: - Digester (); - ~Digester (); + Digester(); + ~Digester(); - Digester (Digester const&) = delete; - Digester& operator= (Digester const&) = delete; + Digester(Digester const&) = delete; + Digester& operator=(Digester const&) = delete; - void add (void const * data, size_t size); + void add(void const * data, size_t size); template <class T> - void add (T data) { - add (&data, sizeof (T)); + void add(T data) { + add(&data, sizeof(T)); } - void add (std::string const & s); + void add(std::string const & s); - std::string get () const; + std::string get() const; - void get (uint8_t* buffer) const; + void get(uint8_t* buffer) const; - int size () const; + int size() const; private: mutable md5_ctx _context; diff --git a/src/lib/encode_server.h b/src/lib/encode_server.h index 276212583..ea769d4fe 100644 --- a/src/lib/encode_server.h +++ b/src/lib/encode_server.h @@ -32,9 +32,9 @@ #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 <atomic> #include <string> @@ -72,7 +72,7 @@ private: bool _verbose; int _num_threads; Waker _waker; - boost::atomic<int> _frames_encoded; + std::atomic<int> _frames_encoded; struct Broadcast { diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc index d2ecd03b7..a873b258a 100644 --- a/src/lib/encode_server_finder.cc +++ b/src/lib/encode_server_finder.cc @@ -54,69 +54,69 @@ using namespace boost::placeholders; EncodeServerFinder* EncodeServerFinder::_instance = 0; -EncodeServerFinder::EncodeServerFinder () - : _stop (false) +EncodeServerFinder::EncodeServerFinder() + : _stop(false) { - Config::instance()->Changed.connect (boost::bind (&EncodeServerFinder::config_changed, this, _1)); + Config::instance()->Changed.connect(boost::bind(&EncodeServerFinder::config_changed, this, _1)); } void -EncodeServerFinder::start () +EncodeServerFinder::start() { - _search_thread = boost::thread (boost::bind(&EncodeServerFinder::search_thread, this)); - _listen_thread = boost::thread (boost::bind(&EncodeServerFinder::listen_thread, this)); + _search_thread = boost::thread(boost::bind(&EncodeServerFinder::search_thread, this)); + _listen_thread = boost::thread(boost::bind(&EncodeServerFinder::listen_thread, this)); #ifdef DCPOMATIC_LINUX - pthread_setname_np (_search_thread.native_handle(), "encode-server-search"); - pthread_setname_np (_listen_thread.native_handle(), "encode-server-listen"); + pthread_setname_np(_search_thread.native_handle(), "encode-server-search"); + pthread_setname_np(_listen_thread.native_handle(), "encode-server-listen"); #endif } -EncodeServerFinder::~EncodeServerFinder () +EncodeServerFinder::~EncodeServerFinder() { - stop (); + stop(); } void -EncodeServerFinder::stop () +EncodeServerFinder::stop() { boost::this_thread::disable_interruption dis; _stop = true; - _search_condition.notify_all (); + _search_condition.notify_all(); try { _search_thread.join(); } catch (...) {} _listen_io_context.stop(); try { - _listen_thread.join (); + _listen_thread.join(); } catch (...) {} - boost::mutex::scoped_lock lm (_servers_mutex); - _servers.clear (); + boost::mutex::scoped_lock lm(_servers_mutex); + _servers.clear(); } void -EncodeServerFinder::search_thread () +EncodeServerFinder::search_thread() try { - start_of_thread ("EncodeServerFinder-search"); + start_of_thread("EncodeServerFinder-search"); boost::system::error_code error; dcpomatic::io_context io_context; boost::asio::ip::udp::socket socket(io_context); - socket.open (boost::asio::ip::udp::v4(), error); + socket.open(boost::asio::ip::udp::v4(), error); if (error) { - throw NetworkError ("failed to set up broadcast socket"); + throw NetworkError("failed to set up broadcast socket"); } - socket.set_option (boost::asio::ip::udp::socket::reuse_address(true)); - socket.set_option (boost::asio::socket_base::broadcast(true)); + socket.set_option(boost::asio::ip::udp::socket::reuse_address(true)); + socket.set_option(boost::asio::socket_base::broadcast(true)); string const data = DCPOMATIC_HELLO; int const interval = 10; @@ -125,8 +125,8 @@ try if (Config::instance()->use_any_servers()) { /* Broadcast to look for servers */ try { - boost::asio::ip::udp::endpoint end_point (boost::asio::ip::address_v4::broadcast(), HELLO_PORT); - socket.send_to (boost::asio::buffer(data.c_str(), data.size() + 1), end_point); + boost::asio::ip::udp::endpoint end_point(boost::asio::ip::address_v4::broadcast(), HELLO_PORT); + socket.send_to(boost::asio::buffer(data.c_str(), data.size() + 1), end_point); } catch (...) { } @@ -152,14 +152,14 @@ try /* Discard servers that we haven't seen for a while */ bool removed = false; { - boost::mutex::scoped_lock lm (_servers_mutex); + boost::mutex::scoped_lock lm(_servers_mutex); auto i = _servers.begin(); while (i != _servers.end()) { if (i->last_seen_seconds() > 2 * interval) { auto j = i; ++j; - _servers.erase (i); + _servers.erase(i); i = j; removed = true; } else { @@ -169,49 +169,49 @@ try } if (removed) { - emit (boost::bind(boost::ref(ServersListChanged))); + emit(boost::bind(boost::ref(ServersListChanged))); } - boost::mutex::scoped_lock lm (_search_condition_mutex); - _search_condition.timed_wait (lm, boost::get_system_time() + boost::posix_time::seconds(interval)); + boost::mutex::scoped_lock lm(_search_condition_mutex); + _search_condition.timed_wait(lm, boost::get_system_time() + boost::posix_time::seconds(interval)); } } catch (...) { - store_current (); + store_current(); } void -EncodeServerFinder::listen_thread () +EncodeServerFinder::listen_thread() try { - start_of_thread ("EncodeServerFinder-listen"); + start_of_thread("EncodeServerFinder-listen"); using namespace boost::asio::ip; try { - _listen_acceptor.reset ( + _listen_acceptor.reset( new tcp::acceptor(_listen_io_context, tcp::endpoint(tcp::v4(), is_batch_converter ? BATCH_SERVER_PRESENCE_PORT : MAIN_SERVER_PRESENCE_PORT)) ); } catch (...) { boost::throw_exception(NetworkError(variant::insert_dcpomatic(_("Could not listen for remote encode servers. Perhaps another instance of {} is running.")))); } - start_accept (); + start_accept(); _listen_io_context.run(); } catch (...) { - store_current (); + store_current(); } void -EncodeServerFinder::start_accept () +EncodeServerFinder::start_accept() { _accept_socket = make_shared<Socket>(); - _listen_acceptor->async_accept ( + _listen_acceptor->async_accept( _accept_socket->socket(), boost::bind(&EncodeServerFinder::handle_accept, this, boost::asio::placeholders::error) ); @@ -219,10 +219,10 @@ EncodeServerFinder::start_accept () void -EncodeServerFinder::handle_accept (boost::system::error_code ec) +EncodeServerFinder::handle_accept(boost::system::error_code ec) { if (ec) { - start_accept (); + start_accept(); return; } @@ -230,8 +230,8 @@ EncodeServerFinder::handle_accept (boost::system::error_code ec) try { uint32_t length; - _accept_socket->read (reinterpret_cast<uint8_t*>(&length), sizeof(uint32_t)); - length = ntohl (length); + _accept_socket->read(reinterpret_cast<uint8_t*>(&length), sizeof(uint32_t)); + length = ntohl(length); if (length > 65536) { start_accept(); @@ -239,7 +239,7 @@ EncodeServerFinder::handle_accept (boost::system::error_code ec) } scoped_array<char> buffer(new char[length]); - _accept_socket->read (reinterpret_cast<uint8_t*>(buffer.get()), length); + _accept_socket->read(reinterpret_cast<uint8_t*>(buffer.get()), length); server_available = buffer.get(); } catch (NetworkError&) { /* Maybe the server went away; let's just try again */ @@ -253,7 +253,7 @@ EncodeServerFinder::handle_accept (boost::system::error_code ec) auto const ip = _accept_socket->socket().remote_endpoint().address().to_string(); bool changed = false; { - boost::mutex::scoped_lock lm (_servers_mutex); + boost::mutex::scoped_lock lm(_servers_mutex); auto i = _servers.begin(); while (i != _servers.end() && i->host_name() != ip) { ++i; @@ -262,26 +262,26 @@ EncodeServerFinder::handle_accept (boost::system::error_code ec) if (i != _servers.end()) { i->set_seen(); } else { - EncodeServerDescription sd (ip, xml->number_child<int>("Threads"), xml->optional_number_child<int>("Version").get_value_or(0)); - _servers.push_back (sd); + EncodeServerDescription sd(ip, xml->number_child<int>("Threads"), xml->optional_number_child<int>("Version").get_value_or(0)); + _servers.push_back(sd); changed = true; } } if (changed) { - emit (boost::bind(boost::ref (ServersListChanged))); + emit(boost::bind(boost::ref(ServersListChanged))); } - start_accept (); + start_accept(); } EncodeServerFinder* -EncodeServerFinder::instance () +EncodeServerFinder::instance() { if (!_instance) { - _instance = new EncodeServerFinder (); - _instance->start (); + _instance = new EncodeServerFinder(); + _instance->start(); } return _instance; @@ -289,7 +289,7 @@ EncodeServerFinder::instance () void -EncodeServerFinder::drop () +EncodeServerFinder::drop() { delete _instance; _instance = nullptr; @@ -297,22 +297,22 @@ EncodeServerFinder::drop () list<EncodeServerDescription> -EncodeServerFinder::servers () const +EncodeServerFinder::servers() const { - boost::mutex::scoped_lock lm (_servers_mutex); + boost::mutex::scoped_lock lm(_servers_mutex); return _servers; } void -EncodeServerFinder::config_changed (Config::Property what) +EncodeServerFinder::config_changed(Config::Property what) { if (what == Config::USE_ANY_SERVERS || what == Config::SERVERS) { { - boost::mutex::scoped_lock lm (_servers_mutex); - _servers.clear (); + boost::mutex::scoped_lock lm(_servers_mutex); + _servers.clear(); } - ServersListChanged (); - _search_condition.notify_all (); + ServersListChanged(); + _search_condition.notify_all(); } } diff --git a/src/lib/encode_server_finder.h b/src/lib/encode_server_finder.h index 722786b77..ae83b9609 100644 --- a/src/lib/encode_server_finder.h +++ b/src/lib/encode_server_finder.h @@ -47,28 +47,28 @@ class Socket; class EncodeServerFinder : public Signaller, public ExceptionStore { public: - static EncodeServerFinder* instance (); - static void drop (); + static EncodeServerFinder* instance(); + static void drop(); - std::list<EncodeServerDescription> servers () const; + std::list<EncodeServerDescription> servers() const; /** Emitted whenever the list of servers changes */ boost::signals2::signal<void ()> ServersListChanged; private: - EncodeServerFinder (); - ~EncodeServerFinder (); + EncodeServerFinder(); + ~EncodeServerFinder(); - void start (); - void stop (); + void start(); + void stop(); - void search_thread (); - void listen_thread (); + void search_thread(); + void listen_thread(); - void start_accept (); - void handle_accept (boost::system::error_code ec); + void start_accept(); + void handle_accept(boost::system::error_code ec); - void config_changed (Config::Property what); + void config_changed(Config::Property what); /** Thread to periodically issue broadcasts and requests to find encoding servers */ boost::thread _search_thread; diff --git a/src/lib/ffmpeg.cc b/src/lib/ffmpeg.cc index d7c741d09..50e4cf41d 100644 --- a/src/lib/ffmpeg.cc +++ b/src/lib/ffmpeg.cc @@ -54,68 +54,68 @@ using namespace dcpomatic; boost::mutex FFmpeg::_mutex; -FFmpeg::FFmpeg (std::shared_ptr<const FFmpegContent> c) - : _ffmpeg_content (c) +FFmpeg::FFmpeg(std::shared_ptr<const FFmpegContent> c) + : _ffmpeg_content(c) { - setup_general (); - setup_decoders (); + setup_general(); + setup_decoders(); } -FFmpeg::~FFmpeg () +FFmpeg::~FFmpeg() { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); for (auto& i: _codec_context) { - avcodec_free_context (&i); + avcodec_free_context(&i); } - av_frame_free (&_video_frame); + av_frame_free(&_video_frame); for (auto& audio_frame: _audio_frame) { - av_frame_free (&audio_frame.second); + av_frame_free(&audio_frame.second); } - avformat_close_input (&_format_context); + avformat_close_input(&_format_context); } static int -avio_read_wrapper (void* data, uint8_t* buffer, int amount) +avio_read_wrapper(void* data, uint8_t* buffer, int amount) { - return reinterpret_cast<FFmpeg*>(data)->avio_read (buffer, amount); + return reinterpret_cast<FFmpeg*>(data)->avio_read(buffer, amount); } static int64_t -avio_seek_wrapper (void* data, int64_t offset, int whence) +avio_seek_wrapper(void* data, int64_t offset, int whence) { - return reinterpret_cast<FFmpeg*>(data)->avio_seek (offset, whence); + return reinterpret_cast<FFmpeg*>(data)->avio_seek(offset, whence); } void -FFmpeg::setup_general () +FFmpeg::setup_general() { - _file_group.set_paths (_ffmpeg_content->paths ()); - _avio_buffer = static_cast<uint8_t*> (wrapped_av_malloc(_avio_buffer_size)); - _avio_context = avio_alloc_context (_avio_buffer, _avio_buffer_size, 0, this, avio_read_wrapper, 0, avio_seek_wrapper); + _file_group.set_paths(_ffmpeg_content->paths()); + _avio_buffer = static_cast<uint8_t*>(wrapped_av_malloc(_avio_buffer_size)); + _avio_context = avio_alloc_context(_avio_buffer, _avio_buffer_size, 0, this, avio_read_wrapper, 0, avio_seek_wrapper); if (!_avio_context) { - throw std::bad_alloc (); + throw std::bad_alloc(); } - _format_context = avformat_alloc_context (); + _format_context = avformat_alloc_context(); if (!_format_context) { - throw std::bad_alloc (); + throw std::bad_alloc(); } _format_context->pb = _avio_context; AVDictionary* options = nullptr; - int e = avformat_open_input (&_format_context, 0, 0, &options); + int e = avformat_open_input(&_format_context, 0, 0, &options); if (e < 0) { - throw OpenFileError (_ffmpeg_content->path(0).string(), e, OpenFileError::READ); + throw OpenFileError(_ffmpeg_content->path(0).string(), e, OpenFileError::READ); } - if (avformat_find_stream_info (_format_context, 0) < 0) { - throw DecodeError (_("could not find stream information")); + if (avformat_find_stream_info(_format_context, 0) < 0) { + throw DecodeError(_("could not find stream information")); } /* Find video stream */ @@ -147,15 +147,15 @@ FFmpeg::setup_general () _video_stream = video_stream_undefined_frame_rate.get(); } - _video_frame = av_frame_alloc (); + _video_frame = av_frame_alloc(); if (_video_frame == nullptr) { - throw std::bad_alloc (); + throw std::bad_alloc(); } } void -FFmpeg::setup_decoders () +FFmpeg::setup_decoders() { for (uint32_t i = 0; i < _format_context->nb_streams; ++i) { setup_decoder(i); @@ -166,7 +166,7 @@ FFmpeg::setup_decoders () void FFmpeg::setup_decoder(int stream_index) { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); if (stream_index >= static_cast<int>(_codec_context.size())) { _codec_context.resize(stream_index + 1); @@ -211,7 +211,7 @@ FFmpeg::setup_decoder(int stream_index) AVCodecContext * -FFmpeg::video_codec_context () const +FFmpeg::video_codec_context() const { if (!_video_stream) { return nullptr; @@ -222,7 +222,7 @@ FFmpeg::video_codec_context () const AVCodecContext * -FFmpeg::subtitle_codec_context () const +FFmpeg::subtitle_codec_context() const { auto str = _ffmpeg_content->subtitle_stream(); if (!str) { @@ -234,7 +234,7 @@ FFmpeg::subtitle_codec_context () const int -FFmpeg::avio_read (uint8_t* buffer, int const amount) +FFmpeg::avio_read(uint8_t* buffer, int const amount) { auto result = _file_group.read(buffer, amount); if (result.eof && result.bytes_read == 0) { @@ -245,20 +245,20 @@ FFmpeg::avio_read (uint8_t* buffer, int const amount) int64_t -FFmpeg::avio_seek (int64_t const pos, int whence) +FFmpeg::avio_seek(int64_t const pos, int whence) { if (whence == AVSEEK_SIZE) { - return _file_group.length (); + return _file_group.length(); } - return _file_group.seek (pos, whence); + return _file_group.seek(pos, whence); } FFmpegSubtitlePeriod -FFmpeg::subtitle_period (AVPacket const* packet, AVStream const* stream, AVSubtitle const & sub) +FFmpeg::subtitle_period(AVPacket const* packet, AVStream const* stream, AVSubtitle const & sub) { - auto const packet_time = ContentTime::from_seconds (packet->pts * av_q2d(stream->time_base)); + auto const packet_time = ContentTime::from_seconds(packet->pts * av_q2d(stream->time_base)); auto const start = packet_time + ContentTime::from_seconds(sub.start_display_time / 1e3); if (sub.end_display_time == 0 || sub.end_display_time == static_cast<uint32_t>(-1)) { @@ -270,7 +270,7 @@ FFmpeg::subtitle_period (AVPacket const* packet, AVStream const* stream, AVSubti } } - return FFmpegSubtitlePeriod (start, packet_time + ContentTime::from_seconds(sub.end_display_time / 1e3)); + return FFmpegSubtitlePeriod(start, packet_time + ContentTime::from_seconds(sub.end_display_time / 1e3)); } @@ -280,7 +280,7 @@ FFmpeg::subtitle_period (AVPacket const* packet, AVStream const* stream, AVSubti * in FFmpeg. */ ContentTime -FFmpeg::pts_offset (vector<shared_ptr<FFmpegAudioStream>> audio_streams, optional<ContentTime> first_video, double video_frame_rate) const +FFmpeg::pts_offset(vector<shared_ptr<FFmpegAudioStream>> audio_streams, optional<ContentTime> first_video, double video_frame_rate) const { /* Audio and video frame PTS values may not start with 0. We want to fiddle them so that: @@ -298,15 +298,15 @@ FFmpeg::pts_offset (vector<shared_ptr<FFmpegAudioStream>> audio_streams, optiona /* First, make one of them start at 0 */ - auto po = ContentTime::min (); + auto po = ContentTime::min(); if (first_video) { - po = - first_video.get (); + po = - first_video.get(); } for (auto i: audio_streams) { if (i->first_audio) { - po = max (po, - i->first_audio.get ()); + po = max(po, - i->first_audio.get()); } } @@ -316,14 +316,14 @@ FFmpeg::pts_offset (vector<shared_ptr<FFmpegAudioStream>> audio_streams, optiona I don't think we ever want to do that, as it seems things at -ve PTS are not meant to be seen (use for alignment bars etc.); see mantis #418. */ - if (po > ContentTime ()) { - po = ContentTime (); + if (po > ContentTime()) { + po = ContentTime(); } /* Now adjust so that the video pts starts on a frame */ if (first_video) { auto const fvc = first_video.get() + po; - po += fvc.ceil (video_frame_rate) - fvc; + po += fvc.ceil(video_frame_rate) - fvc; } return po; @@ -331,14 +331,14 @@ FFmpeg::pts_offset (vector<shared_ptr<FFmpegAudioStream>> audio_streams, optiona AVFrame * -FFmpeg::audio_frame (shared_ptr<const FFmpegAudioStream> stream) +FFmpeg::audio_frame(shared_ptr<const FFmpegAudioStream> stream) { auto iter = _audio_frame.find(stream); if (iter != _audio_frame.end()) { return iter->second; } - auto frame = av_frame_alloc (); + auto frame = av_frame_alloc(); if (frame == nullptr) { throw std::bad_alloc(); } diff --git a/src/lib/ffmpeg.h b/src/lib/ffmpeg.h index 63446e5cd..f64f7c7bc 100644 --- a/src/lib/ffmpeg.h +++ b/src/lib/ffmpeg.h @@ -47,25 +47,25 @@ class Log; class FFmpeg { public: - explicit FFmpeg (std::shared_ptr<const FFmpegContent>); - virtual ~FFmpeg (); + explicit FFmpeg(std::shared_ptr<const FFmpegContent>); + virtual ~FFmpeg(); - std::shared_ptr<const FFmpegContent> ffmpeg_content () const { + std::shared_ptr<const FFmpegContent> ffmpeg_content() const { return _ffmpeg_content; } - int avio_read (uint8_t *, int); - int64_t avio_seek (int64_t, int); + int avio_read(uint8_t *, int); + int64_t avio_seek(int64_t, int); protected: - AVCodecContext* video_codec_context () const; - AVCodecContext* subtitle_codec_context () const; - dcpomatic::ContentTime pts_offset ( + AVCodecContext* video_codec_context() const; + AVCodecContext* subtitle_codec_context() const; + dcpomatic::ContentTime pts_offset( std::vector<std::shared_ptr<FFmpegAudioStream>> audio_streams, boost::optional<dcpomatic::ContentTime> first_video, double video_frame_rate ) const; void setup_decoder(int stream_index); - static FFmpegSubtitlePeriod subtitle_period (AVPacket const* packet, AVStream const* stream, AVSubtitle const & sub); + static FFmpegSubtitlePeriod subtitle_period(AVPacket const* packet, AVStream const* stream, AVSubtitle const & sub); std::shared_ptr<const FFmpegContent> _ffmpeg_content; @@ -82,7 +82,7 @@ protected: /** Index of video stream within AVFormatContext */ boost::optional<int> _video_stream; - AVFrame* audio_frame (std::shared_ptr<const FFmpegAudioStream> stream); + AVFrame* audio_frame(std::shared_ptr<const FFmpegAudioStream> stream); /* It would appear (though not completely verified) that one must have a mutex around calls to avcodec_open* and avcodec_close... and here @@ -91,8 +91,8 @@ protected: static boost::mutex _mutex; private: - void setup_general (); - void setup_decoders (); + void setup_general(); + void setup_decoders(); /** AVFrames used for decoding audio streams; accessed with audio_frame() */ std::map<std::shared_ptr<const FFmpegAudioStream>, AVFrame*> _audio_frame; diff --git a/src/lib/ffmpeg_audio_stream.cc b/src/lib/ffmpeg_audio_stream.cc index e0da3a22d..f56e04753 100644 --- a/src/lib/ffmpeg_audio_stream.cc +++ b/src/lib/ffmpeg_audio_stream.cc @@ -42,8 +42,7 @@ FFmpegAudioStream::FFmpegAudioStream (cxml::ConstNodePtr node, int version) node->optional_number_child<int>("BitDepth") ) { - optional<ContentTime::Type> const f = node->optional_number_child<ContentTime::Type>("FirstAudio"); - if (f) { + if (auto f = node->optional_number_child<ContentTime::Type>("FirstAudio")) { first_audio = ContentTime(f.get()); } codec_name = node->optional_string_child("CodecName"); diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc index 322553586..3ab9bfb0c 100644 --- a/src/lib/ffmpeg_content.cc +++ b/src/lib/ffmpeg_content.cc @@ -421,7 +421,7 @@ FFmpegContent::full_length(shared_ptr<const Film> film) const if (audio) { DCPTime longest; for (auto i: audio->streams()) { - longest = max(longest, DCPTime::from_frames(llrint(i->length() / frc.speed_up), i->frame_rate())); + longest = max(longest, DCPTime::from_frames(llrint(i->length() / frc.speed_up()), i->frame_rate())); } return longest; } diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 0f38b3247..d37b59fa9 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -38,7 +38,9 @@ #include "frame_interval_checker.h" #include "image.h" #include "log.h" +#include "passthrough_packet_queue.h" #include "raw_image_proxy.h" +#include "subtitle_sync_packet_queue.h" #include "text_content.h" #include "text_decoder.h" #include "util.h" @@ -73,17 +75,17 @@ using dcp::Size; using namespace dcpomatic; -FFmpegDecoder::FFmpegDecoder (shared_ptr<const Film> film, shared_ptr<const FFmpegContent> c, bool fast) - : FFmpeg (c) - , Decoder (film) +FFmpegDecoder::FFmpegDecoder(shared_ptr<const Film> film, shared_ptr<const FFmpegContent> c, bool fast) + : FFmpeg(c) + , Decoder(film) , _filter_graphs(c->filters(), dcp::Fraction(lrint(_ffmpeg_content->video_frame_rate().get_value_or(24) * 1000), 1000)) { if (c->video && c->video->use()) { video = make_shared<VideoDecoder>(this, c); - _pts_offset = pts_offset (c->ffmpeg_audio_streams(), c->first_video(), c->active_video_frame_rate(film)); + _pts_offset = pts_offset(c->ffmpeg_audio_streams(), c->first_video(), c->active_video_frame_rate(film)); /* It doesn't matter what size or pixel format this is, it just needs to be black */ - _black_image = make_shared<Image>(AV_PIX_FMT_RGB24, dcp::Size (128, 128), Image::Alignment::PADDED); - _black_image->make_black (); + _black_image = make_shared<Image>(AV_PIX_FMT_RGB24, dcp::Size(128, 128), Image::Alignment::PADDED); + _black_image->make_black(); } else { _pts_offset = {}; } @@ -93,7 +95,7 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr<const Film> film, shared_ptr<const FFmp } if (c->only_text()) { - text.push_back (make_shared<TextDecoder>(this, c->only_text())); + text.push_back(make_shared<TextDecoder>(this, c->only_text())); /* XXX: we should be calling maybe_set_position() on this TextDecoder, but we can't easily find * the time of the first subtitle at this point. */ @@ -104,15 +106,27 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr<const Film> film, shared_ptr<const FFmp } _dropped_time.resize(_format_context->nb_streams); + + if (video && !text.empty()) { + _packet_queue.reset(new SubtitleSyncPacketQueue()); + } else { + _packet_queue.reset(new PassthroughPacketQueue()); + } } FFmpegDecoder::FlushResult -FFmpegDecoder::flush () +FFmpegDecoder::flush() { LOG_DEBUG_PLAYER("DEC: Flush FFmpeg decoder: current state {}", static_cast<int>(_flush_state)); switch (_flush_state) { + case FlushState::PACKET_QUEUE: + if (!process_from_packet_queue(true)) { + LOG_DEBUG_PLAYER("DEC: Finished flushing packets"); + _flush_state = FlushState::CODECS; + } + break; case FlushState::CODECS: if (flush_codecs() == FlushResult::DONE) { LOG_DEBUG_PLAYER("DEC: Finished flushing codecs"); @@ -151,14 +165,14 @@ FFmpegDecoder::flush_codecs() for (auto i: ffmpeg_content()->ffmpeg_audio_streams()) { auto context = _codec_context[i->index(_format_context)]; - int r = avcodec_send_packet (context, nullptr); + int r = avcodec_send_packet(context, nullptr); if (r < 0 && r != AVERROR_EOF) { /* EOF can happen if we've already sent a flush packet */ - throw DecodeError (N_("avcodec_send_packet"), N_("FFmpegDecoder::flush"), r); + throw DecodeError(N_("avcodec_send_packet"), N_("FFmpegDecoder::flush"), r); } - r = avcodec_receive_frame (context, audio_frame(i)); + r = avcodec_receive_frame(context, audio_frame(i)); if (r >= 0) { - process_audio_frame (i); + process_audio_frame(i); did_something = true; } } @@ -175,8 +189,8 @@ FFmpegDecoder::flush_fill() bool did_something = false; auto const frc = film()->active_frame_rate_change(_ffmpeg_content->position()); - ContentTime full_length (_ffmpeg_content->full_length(film()), frc); - full_length = full_length.ceil (frc.source); + ContentTime full_length(_ffmpeg_content->full_length(film()), frc); + full_length = full_length.ceil(frc.source()); if (video && !video->ignore()) { double const vfr = _ffmpeg_content->video_frame_rate().get(); auto const v = video->position(film()).get_value_or(ContentTime()) + ContentTime::from_frames(1, vfr); @@ -187,7 +201,7 @@ FFmpegDecoder::flush_fill() } if (audio && !audio->ignore()) { - for (auto i: _ffmpeg_content->ffmpeg_audio_streams ()) { + for (auto i: _ffmpeg_content->ffmpeg_audio_streams()) { auto const a = audio->stream_position(film(), i); /* Unfortunately if a is 0 that really means that we don't know the stream position since there has been no data on it since the last seek. In this case we'll just do nothing @@ -195,10 +209,10 @@ FFmpegDecoder::flush_fill() */ if (a > ContentTime() && a < full_length) { LOG_DEBUG_PLAYER("DEC: Flush inserts silence at {}", to_string(a)); - auto to_do = min (full_length - a, ContentTime::from_seconds (0.1)); - auto silence = make_shared<AudioBuffers>(i->channels(), to_do.frames_ceil (i->frame_rate())); - silence->make_silent (); - audio->emit (film(), i, silence, a, true); + auto to_do = min(full_length - a, ContentTime::from_seconds(0.1)); + auto silence = make_shared<AudioBuffers>(i->channels(), to_do.frames_ceil(i->frame_rate())); + silence->make_silent(); + audio->emit(film(), i, silence, a, true); did_something = true; } } @@ -209,12 +223,47 @@ FFmpegDecoder::flush_fill() bool -FFmpegDecoder::pass () +FFmpegDecoder::process_from_packet_queue(bool flushing) +{ + auto process = _packet_queue->get(flushing); + if (!process) { + return false; + } + + auto packet = boost::get<AVPacket*>(&process->first); + + switch (process->second) { + case PacketQueue::Type::VIDEO: + decode_and_process_video_packet(*packet); + break; + case PacketQueue::Type::SUBTITLE: + decode_and_process_subtitle_packet(*packet); + break; + case PacketQueue::Type::AUDIO: + decode_and_process_audio_packet(*packet); + break; + case PacketQueue::Type::DROP: + { + auto info = boost::get<PacketQueue::PacketInfo>(process->first); + DCPOMATIC_ASSERT(static_cast<int>(_dropped_time.size()) > info.stream_index); + _dropped_time[info.stream_index] = dcpomatic::ContentTime::from_seconds(info.dts * av_q2d(_format_context->streams[info.stream_index]->time_base) + _pts_offset.seconds()); + break; + } + } + + av_packet_free(packet); + + return true; +} + + +bool +FFmpegDecoder::pass() { auto packet = av_packet_alloc(); - DCPOMATIC_ASSERT (packet); + DCPOMATIC_ASSERT(packet); - int r = av_read_frame (_format_context, packet); + int r = av_read_frame(_format_context, packet); /* AVERROR_INVALIDDATA can apparently be returned sometimes even when av_read_frame has pretty-much succeeded (and hence generated data which should be processed). @@ -225,11 +274,11 @@ FFmpegDecoder::pass () if (r != AVERROR_EOF) { /* Maybe we should fail here, but for now we'll just finish off instead */ char buf[256]; - av_strerror (r, buf, sizeof(buf)); - LOG_ERROR (N_("error on av_read_frame ({}) ({})"), &buf[0], r); + av_strerror(r, buf, sizeof(buf)); + LOG_ERROR(N_("error on av_read_frame ({}) ({})"), &buf[0], r); } - av_packet_free (&packet); + av_packet_free(&packet); return flush() == FlushResult::DONE; } else if (r == AVERROR_INVALIDDATA) { LOG_DEBUG_PLAYER("DEC: av_read_frame gave INVALIDDATA but we carry on"); @@ -238,15 +287,21 @@ FFmpegDecoder::pass () int const si = packet->stream_index; auto fc = _ffmpeg_content; + optional<PacketQueue::Type> type; + if (_video_stream && si == _video_stream.get() && video && !video->ignore()) { - decode_and_process_video_packet (packet); + type = PacketQueue::Type::VIDEO; } else if (fc->subtitle_stream() && fc->subtitle_stream()->uses_index(_format_context, si) && !only_text()->ignore()) { - decode_and_process_subtitle_packet (packet); + type = PacketQueue::Type::SUBTITLE; } else if (audio) { - decode_and_process_audio_packet (packet); + type = PacketQueue::Type::AUDIO; } else { - DCPOMATIC_ASSERT(static_cast<int>(_dropped_time.size()) > si); - _dropped_time[si] = dcpomatic::ContentTime::from_seconds(packet->dts * av_q2d(_format_context->streams[si]->time_base) + _pts_offset.seconds()); + type = PacketQueue::Type::DROP; + } + + if (type) { + _packet_queue->add(packet, *type); + process_from_packet_queue(false); } if (_have_current_subtitle && _current_subtitle_to && position() > *_current_subtitle_to) { @@ -254,7 +309,6 @@ FFmpegDecoder::pass () _have_current_subtitle = false; } - av_packet_free (&packet); return false; } @@ -283,7 +337,7 @@ deinterleave_audio(AVFrame* frame) switch (format) { case AV_SAMPLE_FMT_U8: { - auto p = reinterpret_cast<uint8_t *> (frame->data[0]); + auto p = reinterpret_cast<uint8_t *>(frame->data[0]); int sample = 0; int channel = 0; for (int i = 0; i < total_samples; ++i) { @@ -300,7 +354,7 @@ deinterleave_audio(AVFrame* frame) case AV_SAMPLE_FMT_S16: { - auto p = reinterpret_cast<int16_t *> (frame->data[0]); + auto p = reinterpret_cast<int16_t *>(frame->data[0]); int sample = 0; int channel = 0; for (int i = 0; i < total_samples; ++i) { @@ -317,7 +371,7 @@ deinterleave_audio(AVFrame* frame) case AV_SAMPLE_FMT_S16P: { - auto p = reinterpret_cast<int16_t **> (frame->data); + auto p = reinterpret_cast<int16_t **>(frame->data); for (int i = 0; i < channels; ++i) { for (int j = 0; j < frames; ++j) { data[i][j] = static_cast<float>(p[i][j]) / (1 << 15); @@ -328,7 +382,7 @@ deinterleave_audio(AVFrame* frame) case AV_SAMPLE_FMT_S32: { - auto p = reinterpret_cast<int32_t *> (frame->data[0]); + auto p = reinterpret_cast<int32_t *>(frame->data[0]); int sample = 0; int channel = 0; for (int i = 0; i < total_samples; ++i) { @@ -345,7 +399,7 @@ deinterleave_audio(AVFrame* frame) case AV_SAMPLE_FMT_S32P: { - auto p = reinterpret_cast<int32_t **> (frame->data); + auto p = reinterpret_cast<int32_t **>(frame->data); for (int i = 0; i < channels; ++i) { for (int j = 0; j < frames; ++j) { data[i][j] = static_cast<float>(p[i][j]) / 2147483648; @@ -356,7 +410,7 @@ deinterleave_audio(AVFrame* frame) case AV_SAMPLE_FMT_FLT: { - auto p = reinterpret_cast<float*> (frame->data[0]); + auto p = reinterpret_cast<float*>(frame->data[0]); int sample = 0; int channel = 0; for (int i = 0; i < total_samples; ++i) { @@ -373,15 +427,15 @@ deinterleave_audio(AVFrame* frame) case AV_SAMPLE_FMT_FLTP: { - auto p = reinterpret_cast<float**> (frame->data); + auto p = reinterpret_cast<float**>(frame->data); for (int i = 0; i < channels; ++i) { - memcpy (data[i], p[i], frames * sizeof(float)); + memcpy(data[i], p[i], frames * sizeof(float)); } } break; default: - throw DecodeError (fmt::format(_("Unrecognised audio sample format ({})"), static_cast<int>(format))); + throw DecodeError(fmt::format(_("Unrecognised audio sample format ({})"), static_cast<int>(format))); } return audio; @@ -389,31 +443,32 @@ deinterleave_audio(AVFrame* frame) AVSampleFormat -FFmpegDecoder::audio_sample_format (shared_ptr<FFmpegAudioStream> stream) const +FFmpegDecoder::audio_sample_format(shared_ptr<FFmpegAudioStream> stream) const { return static_cast<AVSampleFormat>(stream->stream(_format_context)->codecpar->format); } int -FFmpegDecoder::bytes_per_audio_sample (shared_ptr<FFmpegAudioStream> stream) const +FFmpegDecoder::bytes_per_audio_sample(shared_ptr<FFmpegAudioStream> stream) const { - return av_get_bytes_per_sample (audio_sample_format (stream)); + return av_get_bytes_per_sample(audio_sample_format(stream)); } void -FFmpegDecoder::seek (ContentTime time, bool accurate) +FFmpegDecoder::seek(ContentTime time, bool accurate) { - Decoder::seek (time, accurate); + Decoder::seek(time, accurate); - _flush_state = FlushState::CODECS; + _flush_state = FlushState::PACKET_QUEUE; + _packet_queue->clear(); /* If we are doing an `accurate' seek, we need to use pre-roll, as we don't really know what the seek will give us. */ - auto pre_roll = accurate ? ContentTime::from_seconds (2) : ContentTime (0); + auto pre_roll = accurate ? ContentTime::from_seconds(2) : ContentTime(0); time -= pre_roll; /* XXX: it seems debatable whether PTS should be used here... @@ -431,18 +486,18 @@ FFmpegDecoder::seek (ContentTime time, bool accurate) stream = streams[0]->index(_format_context); } - DCPOMATIC_ASSERT (stream); + DCPOMATIC_ASSERT(stream); auto u = time - _pts_offset; - if (u < ContentTime ()) { - u = ContentTime (); + if (u < ContentTime()) { + u = ContentTime(); } auto seek = [&](int flag) { return av_seek_frame( _format_context, stream.get(), - u.seconds() / av_q2d (_format_context->streams[stream.get()]->time_base), + u.seconds() / av_q2d(_format_context->streams[stream.get()]->time_base), flag ); }; @@ -456,16 +511,16 @@ FFmpegDecoder::seek (ContentTime time, bool accurate) */ _filter_graphs.clear(); - if (video_codec_context ()) { - avcodec_flush_buffers (video_codec_context()); + if (video_codec_context()) { + avcodec_flush_buffers(video_codec_context()); } for (auto i: ffmpeg_content()->ffmpeg_audio_streams()) { - avcodec_flush_buffers (_codec_context[i->index(_format_context)]); + avcodec_flush_buffers(_codec_context[i->index(_format_context)]); } - if (subtitle_codec_context ()) { - avcodec_flush_buffers (subtitle_codec_context ()); + if (subtitle_codec_context()) { + avcodec_flush_buffers(subtitle_codec_context()); } _have_current_subtitle = false; @@ -481,7 +536,7 @@ FFmpegDecoder::seek (ContentTime time, bool accurate) shared_ptr<FFmpegAudioStream> -FFmpegDecoder::audio_stream_from_index (int index) const +FFmpegDecoder::audio_stream_from_index(int index) const { /* XXX: inefficient */ auto streams = ffmpeg_content()->ffmpeg_audio_streams(); @@ -490,7 +545,7 @@ FFmpegDecoder::audio_stream_from_index (int index) const ++stream; } - if (stream == streams.end ()) { + if (stream == streams.end()) { return {}; } @@ -499,9 +554,9 @@ FFmpegDecoder::audio_stream_from_index (int index) const void -FFmpegDecoder::process_audio_frame (shared_ptr<FFmpegAudioStream> stream) +FFmpegDecoder::process_audio_frame(shared_ptr<FFmpegAudioStream> stream) { - auto frame = audio_frame (stream); + auto frame = audio_frame(stream); auto data = deinterleave_audio(frame); auto const time_base = stream->stream(_format_context)->time_base; @@ -516,7 +571,7 @@ FFmpegDecoder::process_audio_frame (shared_ptr<FFmpegAudioStream> stream) ct = *_next_time[stream]; } } else { - ct = ContentTime::from_seconds ( + ct = ContentTime::from_seconds( frame->best_effort_timestamp * av_q2d(time_base)) + _pts_offset; @@ -534,14 +589,14 @@ FFmpegDecoder::process_audio_frame (shared_ptr<FFmpegAudioStream> stream) if (ct < ContentTime()) { /* Discard audio data that comes before time 0 */ - auto const remove = min (int64_t(data->frames()), (-ct).frames_ceil(double(stream->frame_rate()))); - data->move (data->frames() - remove, remove, 0); - data->set_frames (data->frames() - remove); - ct += ContentTime::from_frames (remove, stream->frame_rate()); + auto const remove = min(int64_t(data->frames()), (-ct).frames_ceil(double(stream->frame_rate()))); + data->move(data->frames() - remove, remove, 0); + data->set_frames(data->frames() - remove); + ct += ContentTime::from_frames(remove, stream->frame_rate()); } if (ct < ContentTime()) { - LOG_WARNING ( + LOG_WARNING( "Crazy timestamp {} for {} samples in stream {} (ts={} tb={}, off={})", to_string(ct), data->frames(), @@ -554,29 +609,29 @@ FFmpegDecoder::process_audio_frame (shared_ptr<FFmpegAudioStream> stream) /* Give this data provided there is some, and its time is sane */ if (ct >= ContentTime() && data->frames() > 0) { - audio->emit (film(), stream, data, ct); + audio->emit(film(), stream, data, ct); } } void -FFmpegDecoder::decode_and_process_audio_packet (AVPacket* packet) +FFmpegDecoder::decode_and_process_audio_packet(AVPacket* packet) { - auto stream = audio_stream_from_index (packet->stream_index); + auto stream = audio_stream_from_index(packet->stream_index); if (!stream) { return; } auto context = _codec_context[stream->index(_format_context)]; - auto frame = audio_frame (stream); + auto frame = audio_frame(stream); LOG_DEBUG_PLAYER("DEC: Send audio packet on stream {}", stream->index(_format_context)); - int r = avcodec_send_packet (context, packet); + int r = avcodec_send_packet(context, packet); if (r < 0) { LOG_WARNING("avcodec_send_packet returned {} for an audio packet", r); } while (r >= 0) { - r = avcodec_receive_frame (context, frame); + r = avcodec_receive_frame(context, frame); if (r == AVERROR(EAGAIN)) { /* More input is required */ LOG_DEBUG_PLAYER("DEC: EAGAIN after trying to receive audio frame"); @@ -587,22 +642,22 @@ FFmpegDecoder::decode_and_process_audio_packet (AVPacket* packet) * data to decode even if an error occurred. #352 may be related (though this was * when we were using an old version of the FFmpeg API). */ - process_audio_frame (stream); + process_audio_frame(stream); } } bool -FFmpegDecoder::decode_and_process_video_packet (AVPacket* packet) +FFmpegDecoder::decode_and_process_video_packet(AVPacket* packet) { - DCPOMATIC_ASSERT (_video_stream); + DCPOMATIC_ASSERT(_video_stream); auto context = video_codec_context(); bool pending = false; do { LOG_DEBUG_PLAYER("DEC: Send video packet"); - int r = avcodec_send_packet (context, packet); + int r = avcodec_send_packet(context, packet); if (r < 0) { LOG_WARNING("avcodec_send_packet returned {} for a video packet", r); } @@ -611,17 +666,17 @@ FFmpegDecoder::decode_and_process_video_packet (AVPacket* packet) pending = r == AVERROR(EAGAIN); while (true) { - r = avcodec_receive_frame (context, _video_frame); + r = avcodec_receive_frame(context, _video_frame); if (r == AVERROR(EAGAIN) || r == AVERROR_EOF || (r < 0 && !packet)) { /* More input is required, no more frames are coming, or we are flushing and there was * some error which we just want to ignore. */ return false; } else if (r < 0) { - throw DecodeError (N_("avcodec_receive_frame"), N_("FFmpeg::decode_and_process_video_packet"), r); + throw DecodeError(N_("avcodec_receive_frame"), N_("FFmpeg::decode_and_process_video_packet"), r); } - process_video_frame (); + process_video_frame(); } } while (pending); @@ -630,10 +685,10 @@ FFmpegDecoder::decode_and_process_video_packet (AVPacket* packet) void -FFmpegDecoder::process_video_frame () +FFmpegDecoder::process_video_frame() { auto graph = _filter_graphs.get(dcp::Size(_video_frame->width, _video_frame->height), static_cast<AVPixelFormat>(_video_frame->format)); - auto images = graph->process (_video_frame); + auto images = graph->process(_video_frame); for (auto const& i: images) { @@ -643,20 +698,20 @@ FFmpegDecoder::process_video_frame () double const pts = i.second * av_q2d(_format_context->streams[_video_stream.get()]->time_base) + _pts_offset.seconds(); LOG_DEBUG_PLAYER("DEC: Process video with timestamp {}", to_string(ContentTime::from_seconds(pts))) - video->emit ( + video->emit( film(), make_shared<RawImageProxy>(image), ContentTime::from_seconds(pts) ); } else { - LOG_WARNING ("Dropping frame without PTS"); + LOG_WARNING("Dropping frame without PTS"); } } } void -FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet) +FFmpegDecoder::decode_and_process_subtitle_packet(AVPacket* packet) { auto context = subtitle_codec_context(); if (!context) { @@ -669,21 +724,21 @@ FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet) return; } - auto sub_period = subtitle_period (packet, ffmpeg_content()->subtitle_stream()->stream(_format_context), sub); + auto sub_period = subtitle_period(packet, ffmpeg_content()->subtitle_stream()->stream(_format_context), sub); /* Stop any current subtitle, either at the time it was supposed to stop, or now if now is sooner */ if (_have_current_subtitle) { if (_current_subtitle_to) { - only_text()->emit_stop (min(*_current_subtitle_to, sub_period.from + _pts_offset)); + only_text()->emit_stop(min(*_current_subtitle_to, sub_period.from + _pts_offset)); } else { - only_text()->emit_stop (sub_period.from + _pts_offset); + only_text()->emit_stop(sub_period.from + _pts_offset); } _have_current_subtitle = false; } if (sub.num_rects <= 0) { /* Nothing new in this subtitle */ - avsubtitle_free (&sub); + avsubtitle_free(&sub); return; } @@ -713,7 +768,7 @@ FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet) cout << "XXX: SUBTITLE_TEXT " << rect->text << "\n"; break; case SUBTITLE_ASS: - process_ass_subtitle (rect->ass, from); + process_ass_subtitle(rect->ass, from); break; } } @@ -722,17 +777,17 @@ FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet) only_text()->emit_bitmap_start(bitmap_text); } - avsubtitle_free (&sub); + avsubtitle_free(&sub); } BitmapText -FFmpegDecoder::process_bitmap_subtitle (AVSubtitleRect const * rect) +FFmpegDecoder::process_bitmap_subtitle(AVSubtitleRect const * rect) { /* Note BGRA is expressed little-endian, so the first byte in the word is B, second G, third R, fourth A. */ - auto image = make_shared<Image>(AV_PIX_FMT_BGRA, dcp::Size (rect->w, rect->h), Image::Alignment::PADDED); + auto image = make_shared<Image>(AV_PIX_FMT_BGRA, dcp::Size(rect->w, rect->h), Image::Alignment::PADDED); #ifdef DCPOMATIC_HAVE_AVSUBTITLERECT_PICT /* Start of the first line in the subtitle */ @@ -753,11 +808,11 @@ FFmpegDecoder::process_bitmap_subtitle (AVSubtitleRect const * rect) chosen by the user; created a `mapped' palette from those settings. */ auto colour_map = ffmpeg_content()->subtitle_stream()->colours(); - vector<RGBA> mapped_palette (rect->nb_colors); + vector<RGBA> mapped_palette(rect->nb_colors); for (int i = 0; i < rect->nb_colors; ++i) { - RGBA c (palette[2], palette[1], palette[0], palette[3]); - auto j = colour_map.find (c); - if (j != colour_map.end ()) { + RGBA c(palette[2], palette[1], palette[0], palette[3]); + auto j = colour_map.find(c); + if (j != colour_map.end()) { mapped_palette[i] = j->second; } else { /* This colour was not found in the FFmpegSubtitleStream's colour map; probably because @@ -815,7 +870,7 @@ FFmpegDecoder::process_bitmap_subtitle (AVSubtitleRect const * rect) DCPOMATIC_ASSERT(target_width > 0); DCPOMATIC_ASSERT(target_height > 0); - dcpomatic::Rect<double> const scaled_rect ( + dcpomatic::Rect<double> const scaled_rect( static_cast<double>(rect->x + x_offset) / target_width, static_cast<double>(rect->y + y_offset) / target_height, static_cast<double>(rect->w) / target_width, @@ -827,7 +882,7 @@ FFmpegDecoder::process_bitmap_subtitle (AVSubtitleRect const * rect) void -FFmpegDecoder::process_ass_subtitle (string ass, ContentTime from) +FFmpegDecoder::process_ass_subtitle(string ass, ContentTime from) { /* We have no styles and no Format: line, so I'm assuming that FFmpeg produces a single format of Dialogue: lines... @@ -843,7 +898,7 @@ FFmpegDecoder::process_ass_subtitle (string ass, ContentTime from) } } - if (text.empty ()) { + if (text.empty()) { return; } @@ -854,7 +909,7 @@ FFmpegDecoder::process_ass_subtitle (string ass, ContentTime from) auto const raw = sub::SSAReader::parse_line({}, text, context); for (auto const& i: sub::collect<vector<sub::Subtitle>>(raw)) { - only_text()->emit_plain_start (from, i); + only_text()->emit_plain_start(from, i); } } diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h index 022c5625b..795320280 100644 --- a/src/lib/ffmpeg_decoder.h +++ b/src/lib/ffmpeg_decoder.h @@ -27,6 +27,7 @@ #include "bitmap_text.h" #include "decoder.h" #include "ffmpeg.h" +#include "packet_queue.h" #include "video_filter_graph_set.h" extern "C" { #include <libavcodec/avcodec.h> @@ -39,6 +40,7 @@ class AudioBuffers; class FFmpegAudioStream; class Image; class Log; +class PacketQueue; class VideoFilterGraph; struct ffmpeg_pts_offset_test; @@ -49,10 +51,10 @@ struct ffmpeg_pts_offset_test; class FFmpegDecoder : public FFmpeg, public Decoder { public: - FFmpegDecoder (std::shared_ptr<const Film> film, std::shared_ptr<const FFmpegContent>, bool fast); + FFmpegDecoder(std::shared_ptr<const Film> film, std::shared_ptr<const FFmpegContent>, bool fast); - bool pass () override; - void seek (dcpomatic::ContentTime time, bool) override; + bool pass() override; + void seek(dcpomatic::ContentTime time, bool) override; dcpomatic::ContentTime position() const override; private: @@ -64,23 +66,24 @@ private: }; FlushResult flush(); + bool process_from_packet_queue(bool flushing); - AVSampleFormat audio_sample_format (std::shared_ptr<FFmpegAudioStream> stream) const; - int bytes_per_audio_sample (std::shared_ptr<FFmpegAudioStream> stream) const; + AVSampleFormat audio_sample_format(std::shared_ptr<FFmpegAudioStream> stream) const; + int bytes_per_audio_sample(std::shared_ptr<FFmpegAudioStream> stream) const; - std::shared_ptr<FFmpegAudioStream> audio_stream_from_index (int index) const; - void process_audio_frame (std::shared_ptr<FFmpegAudioStream> stream); + std::shared_ptr<FFmpegAudioStream> audio_stream_from_index(int index) const; + void process_audio_frame(std::shared_ptr<FFmpegAudioStream> stream); - void process_video_frame (); + void process_video_frame(); - bool decode_and_process_video_packet (AVPacket* packet); - void decode_and_process_audio_packet (AVPacket* packet); - void decode_and_process_subtitle_packet (AVPacket* packet); + bool decode_and_process_video_packet(AVPacket* packet); + void decode_and_process_audio_packet(AVPacket* packet); + void decode_and_process_subtitle_packet(AVPacket* packet); - BitmapText process_bitmap_subtitle (AVSubtitleRect const * rect); - void process_ass_subtitle (std::string ass, dcpomatic::ContentTime from); + BitmapText process_bitmap_subtitle(AVSubtitleRect const * rect); + void process_ass_subtitle(std::string ass, dcpomatic::ContentTime from); - void maybe_add_subtitle (); + void maybe_add_subtitle(); FlushResult flush_codecs(); FlushResult flush_fill(); @@ -97,12 +100,14 @@ private: std::map<std::shared_ptr<FFmpegAudioStream>, boost::optional<dcpomatic::ContentTime>> _next_time; enum class FlushState { + PACKET_QUEUE, CODECS, AUDIO_DECODER, FILL, }; - FlushState _flush_state = FlushState::CODECS; + FlushState _flush_state = FlushState::PACKET_QUEUE; std::vector<boost::optional<dcpomatic::ContentTime>> _dropped_time; + std::unique_ptr<PacketQueue> _packet_queue; }; diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc index 6b60f6de3..48b354394 100644 --- a/src/lib/ffmpeg_examiner.cc +++ b/src/lib/ffmpeg_examiner.cc @@ -221,7 +221,7 @@ FFmpegExaminer::check_for_duplicate_ids() std::set<int> stream_ids; if (_video_stream) { - stream_ids.insert(*_video_stream); + stream_ids.insert(_format_context->streams[*_video_stream]->id); } for (auto stream: _audio_streams) { diff --git a/src/lib/file_group.cc b/src/lib/file_group.cc index 8ff684ed3..44ebe5075 100644 --- a/src/lib/file_group.cc +++ b/src/lib/file_group.cc @@ -37,42 +37,42 @@ using std::vector; /** Construct a FileGroup with no files */ -FileGroup::FileGroup () +FileGroup::FileGroup() { } /** Construct a FileGroup with a single file */ -FileGroup::FileGroup (boost::filesystem::path p) +FileGroup::FileGroup(boost::filesystem::path p) { - _paths.push_back (p); - ensure_open_path (0); - seek (0, SEEK_SET); + _paths.push_back(p); + ensure_open_path(0); + seek(0, SEEK_SET); } /** Construct a FileGroup with multiple files */ -FileGroup::FileGroup (vector<boost::filesystem::path> const & p) - : _paths (p) +FileGroup::FileGroup(vector<boost::filesystem::path> const & p) + : _paths(p) { - ensure_open_path (0); - seek (0, SEEK_SET); + ensure_open_path(0); + seek(0, SEEK_SET); } void -FileGroup::set_paths (vector<boost::filesystem::path> const & p) +FileGroup::set_paths(vector<boost::filesystem::path> const & p) { _paths = p; - ensure_open_path (0); - seek (0, SEEK_SET); + ensure_open_path(0); + seek(0, SEEK_SET); } /** Ensure that the given path index in the content is the _current_file */ void -FileGroup::ensure_open_path (size_t p) const +FileGroup::ensure_open_path(size_t p) const { if (_current_file && _current_path == p) { /* Already open */ @@ -95,7 +95,7 @@ FileGroup::ensure_open_path (size_t p) const int64_t -FileGroup::seek (int64_t pos, int whence) const +FileGroup::seek(int64_t pos, int whence) const { switch (whence) { case SEEK_SET: @@ -122,10 +122,10 @@ FileGroup::seek (int64_t pos, int whence) const } if (i < _paths.size()) { - ensure_open_path (i); + ensure_open_path(i); _current_file->seek(sub_pos, SEEK_SET); } else { - ensure_open_path (_paths.size() - 1); + ensure_open_path(_paths.size() - 1); _current_file->seek(_current_size, SEEK_SET); } @@ -138,9 +138,9 @@ FileGroup::seek (int64_t pos, int whence) const * @param amount Number of bytes to read. */ FileGroup::Result -FileGroup::read (uint8_t* buffer, int amount) const +FileGroup::read(uint8_t* buffer, int amount) const { - DCPOMATIC_ASSERT (_current_file); + DCPOMATIC_ASSERT(_current_file); int read = 0; while (true) { @@ -148,7 +148,7 @@ FileGroup::read (uint8_t* buffer, int amount) const bool eof = false; size_t to_read = amount - read; - DCPOMATIC_ASSERT (_current_file); + DCPOMATIC_ASSERT(_current_file); auto const current_position = _current_file->tell(); if (current_position == -1) { @@ -168,7 +168,7 @@ FileGroup::read (uint8_t* buffer, int amount) const } if (_current_file->error()) { - throw FileError (fmt::format("fread error {}", errno), _paths[_current_path]); + throw FileError(fmt::format("fread error {}", errno), _paths[_current_path]); } if (eof) { @@ -176,7 +176,7 @@ FileGroup::read (uint8_t* buffer, int amount) const if ((_current_path + 1) >= _paths.size()) { return { read, true }; } - ensure_open_path (_current_path + 1); + ensure_open_path(_current_path + 1); } } @@ -186,7 +186,7 @@ FileGroup::read (uint8_t* buffer, int amount) const /** @return Combined length of all the files */ int64_t -FileGroup::length () const +FileGroup::length() const { int64_t len = 0; for (size_t i = 0; i < _paths.size(); ++i) { diff --git a/src/lib/file_group.h b/src/lib/file_group.h index aac72c228..c16b50f89 100644 --- a/src/lib/file_group.h +++ b/src/lib/file_group.h @@ -40,14 +40,14 @@ class FileGroup { public: - FileGroup (); - explicit FileGroup (boost::filesystem::path); - explicit FileGroup (std::vector<boost::filesystem::path> const &); + FileGroup(); + explicit FileGroup(boost::filesystem::path); + explicit FileGroup(std::vector<boost::filesystem::path> const &); - FileGroup (FileGroup const&) = delete; - FileGroup& operator= (FileGroup const&) = delete; + FileGroup(FileGroup const&) = delete; + FileGroup& operator=(FileGroup const&) = delete; - void set_paths (std::vector<boost::filesystem::path> const &); + void set_paths(std::vector<boost::filesystem::path> const &); struct Result { Result(int bytes_read_, bool eof_) @@ -59,12 +59,12 @@ public: bool eof = false; }; - int64_t seek (int64_t, int) const; - Result read (uint8_t*, int) const; - int64_t length () const; + int64_t seek(int64_t, int) const; + Result read(uint8_t*, int) const; + int64_t length() const; private: - void ensure_open_path (size_t) const; + void ensure_open_path(size_t) const; std::vector<boost::filesystem::path> _paths; /** Index of path that we are currently reading from */ diff --git a/src/lib/film.cc b/src/lib/film.cc index b0276086a..de6343b9c 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -113,6 +113,7 @@ 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"; +static constexpr char info_dir[] = "info"; /* 5 -> 6 @@ -289,7 +290,7 @@ boost::filesystem::path Film::info_file(DCPTimePeriod period) const { boost::filesystem::path p; - p /= "info"; + p /= info_dir; p /= video_identifier() + "_" + fmt::to_string(period.from.get()) + "_" + fmt::to_string(period.to.get()); return file(p); } @@ -1440,7 +1441,7 @@ Film::cpls() const for (auto const& item: dcp::filesystem::directory_iterator(dir)) { if ( dcp::filesystem::is_directory(item) && - item.path().filename() != "j2c" && item.path().filename() != "video" && item.path().filename() != "info" && item.path().filename() != "analysis" + item.path().filename() != "j2c" && item.path().filename() != "video" && item.path().filename() != info_dir && item.path().filename() != "analysis" ) { try { @@ -2204,12 +2205,35 @@ Film::speed_up_range(int dcp_frame_rate) const return _playlist->speed_up_range(dcp_frame_rate); } + void -Film::copy_from(shared_ptr<const Film> film) +Film::copy_from(shared_ptr<const Film> film, std::function<void (float)> set_progress) { read_metadata(film->file(metadata_file)); + + auto old_assets = film->read_remembered_assets(); + auto new_assets = std::vector<RememberedAsset>{}; + + /* Find source film's remembered assets that still exist and copy them to our new film */ + for (auto path: dcp::filesystem::recursive_directory_iterator(*film->directory())) { + auto iter = std::find_if(old_assets.begin(), old_assets.end(), [path](RememberedAsset const& asset) { + return asset.filename() == path.path().filename(); + }); + if (iter != old_assets.end()) { + copy_in_bits(path, assets_path() / path.path().filename(), set_progress); + new_assets.push_back({path.path().filename(), iter->period(), iter->identifier()}); + } + } + + write_remembered_assets(new_assets); + + /* To use the assets we also need the info files */ + for (auto path: dcp::filesystem::directory_iterator(film->dir(info_dir))) { + dcp::filesystem::copy_file(path.path(), dir(info_dir) / path.path().filename()); + } } + bool Film::references_dcp_video() const { diff --git a/src/lib/film.h b/src/lib/film.h index 3aef1e27e..09b51202c 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -19,7 +19,7 @@ */ -/** @file src/film.h +/** @file src/lib/film.h * @brief A representation of some audio and video content, and details of * how they should be presented in a DCP. */ @@ -122,7 +122,7 @@ public: void write_template(boost::filesystem::path path) const; std::shared_ptr<xmlpp::Document> metadata(bool with_content_paths = true) const; - void copy_from(std::shared_ptr<const Film> film); + void copy_from(std::shared_ptr<const Film> film, std::function<void (float)> set_progress); std::string isdcf_name(bool if_created_now) const; std::string dcp_name(bool if_created_now = false) const; diff --git a/src/lib/frame_rate_change.cc b/src/lib/frame_rate_change.cc index 69296c970..6057f9ca3 100644 --- a/src/lib/frame_rate_change.cc +++ b/src/lib/frame_rate_change.cc @@ -31,74 +31,76 @@ using std::shared_ptr; using std::string; -FrameRateChange::FrameRateChange () +FrameRateChange::FrameRateChange() { } -FrameRateChange::FrameRateChange (double source_, int dcp_) +FrameRateChange::FrameRateChange(double source, int dcp) { - source = source_; - dcp = dcp_; + _source = source; + _dcp = dcp; - if (fabs(source / 2.0 - dcp) < fabs(source - dcp)) { + if (fabs(_source / 2.0 - _dcp) < fabs(_source - _dcp)) { /* The difference between source and DCP frame rate will be lower (i.e. better) if we skip. */ - skip = true; - } else if (fabs(source * 2 - dcp) < fabs(source - dcp)) { + _skip = round(source / dcp) - 1; + } else if (fabs(_source * 2 - _dcp) < fabs(_source - _dcp)) { /* The difference between source and DCP frame rate would be better if we repeated each frame once; it may be better still if we repeated more than once. Work out the required repeat. */ - repeat = round (dcp / source); + _repeat = round(_dcp / _source); } - speed_up = dcp / (source * factor()); + _speed_up = _dcp / (_source * factor()); auto about_equal = [](double a, double b) { - return (fabs (a - b) < VIDEO_FRAME_RATE_EPSILON); + return fabs(a - b) < VIDEO_FRAME_RATE_EPSILON; }; - change_speed = !about_equal (speed_up, 1.0); + _change_speed = !about_equal(_speed_up, 1.0); } -FrameRateChange::FrameRateChange (shared_ptr<const Film> film, shared_ptr<const Content> content) - : FrameRateChange (content->active_video_frame_rate(film), film->video_frame_rate()) +FrameRateChange::FrameRateChange(shared_ptr<const Film> film, shared_ptr<const Content> content) + : FrameRateChange(content->active_video_frame_rate(film), film->video_frame_rate()) { } -FrameRateChange::FrameRateChange (shared_ptr<const Film> film, Content const * content) - : FrameRateChange (content->active_video_frame_rate(film), film->video_frame_rate()) +FrameRateChange::FrameRateChange(shared_ptr<const Film> film, Content const * content) + : FrameRateChange(content->active_video_frame_rate(film), film->video_frame_rate()) { } string -FrameRateChange::description () const +FrameRateChange::description() const { string description; - if (!skip && repeat == 1 && !change_speed) { + if (_skip == 0 && _repeat == 1 && !_change_speed) { description = _("Content and DCP have the same rate.\n"); } else { - if (skip) { + if (_skip == 1) { description = _("DCP will use every other frame of the content.\n"); - } else if (repeat == 2) { + } else if (_skip >= 2) { + description = fmt::format(_("DCP will contain 1 out of every {} frames of the content.\n"), _skip + 1); + } else if (_repeat == 2) { description = _("Each content frame will be doubled in the DCP.\n"); - } else if (repeat > 2) { - description = fmt::format(_("Each content frame will be repeated {} more times in the DCP.\n"), repeat - 1); + } else if (_repeat > 2) { + description = fmt::format(_("Each content frame will be repeated {} more times in the DCP.\n"), _repeat - 1); } - if (change_speed) { - double const pc = dcp * 100 / (source * factor()); + if (_change_speed) { + double const pc = _dcp * 100 / (_source * factor()); char buffer[256]; - snprintf (buffer, sizeof(buffer), _("DCP will run at %.1f%% of the content speed.\n"), pc); + snprintf(buffer, sizeof(buffer), _("DCP will run at %.1f%% of the content speed.\n"), pc); description += buffer; } } diff --git a/src/lib/frame_rate_change.h b/src/lib/frame_rate_change.h index c28342e92..b58e499d8 100644 --- a/src/lib/frame_rate_change.h +++ b/src/lib/frame_rate_change.h @@ -27,36 +27,65 @@ #include <string> -class Film; class Content; +class Film; class FrameRateChange { public: - FrameRateChange (); - FrameRateChange (double, int); - FrameRateChange (std::shared_ptr<const Film> film, std::shared_ptr<const Content> content); - FrameRateChange (std::shared_ptr<const Film> film, Content const * content); + FrameRateChange(); + FrameRateChange(double, int); + FrameRateChange(std::shared_ptr<const Film> film, std::shared_ptr<const Content> content); + FrameRateChange(std::shared_ptr<const Film> film, Content const * content); /** @return factor by which to multiply a source frame rate to get the effective rate after any skip or repeat has happened. */ - double factor () const { - if (skip) { - return 0.5; + double factor() const { + if (_skip > 0) { + return 1.0 / (_skip + 1); } - return repeat; + return _repeat; } - double source = 24; - int dcp = 24; + std::string description() const; - /** true to skip every other frame */ - bool skip = false; + int skip() const { + return _skip; + } + + int repeat() const { + return _repeat; + } + + double speed_up() const { + return _speed_up; + } + + bool change_speed() const { + return _change_speed; + } + + double source() const { + return _source; + } + + int dcp() const { + return _dcp; + } + +private: + double _source = 24; + int _dcp = 24; + + /** Frames to skip between each one to use, e.g. + * 0 to skip no frames, 1 to skip every other one, 2 to skip 2 out of 3, etc. + */ + int _skip = 0; /** number of times to use each frame (e.g. 1 is normal, 2 means repeat each frame once, and so on) */ - int repeat = 1; + int _repeat = 1; /** true if this DCP will run its video faster or slower than the source * without taking into account `repeat' nor `skip'. * (e.g. change_speed will be true if @@ -66,14 +95,12 @@ public: * source is 15.00fps, DCP is 30fps * source is 12.50fps, DCP is 25fps) */ - bool change_speed = false; + bool _change_speed = false; /** Amount by which the video is being sped-up in the DCP; e.g. for a * 24fps source in a 25fps DCP this would be 25/24. */ - double speed_up = 1.0; - - std::string description () const; + double _speed_up = 1.0; }; diff --git a/src/lib/hints.cc b/src/lib/hints.cc index 99882ec0e..071e63761 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -44,16 +44,19 @@ #include <fmt/format.h> #include <boost/algorithm/string.hpp> #include <iostream> +#include <numeric> #include "i18n.h" using std::cout; using std::make_shared; +using std::map; using std::max; using std::shared_ptr; using std::string; using std::weak_ptr; +using std::vector; using boost::optional; using namespace dcpomatic; #if BOOST_VERSION >= 106100 @@ -227,7 +230,7 @@ Hints::check_speed_up() optional<double> lowest_speed_up; optional<double> highest_speed_up; for (auto i: film()->content()) { - double spu = film()->active_frame_rate_change(i->position()).speed_up; + double spu = film()->active_frame_rate_change(i->position()).speed_up(); if (!lowest_speed_up || spu < *lowest_speed_up) { lowest_speed_up = spu; } @@ -367,14 +370,6 @@ Hints::check_loudness() } -static -bool -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); -} - - void Hints::check_out_of_range_markers() { @@ -497,10 +492,6 @@ try hint(_("At least one of your subtitle lines has more than 79 characters. You should make each line 79 characters at most in length.")); } - bool ccap_xml_too_big = false; - bool ccap_mxf_too_big = false; - bool subs_mxf_too_big = false; - auto dcp_dir = film->dir("hints") / dcpomatic::get_process_id(); dcp::filesystem::remove_all(dcp_dir); @@ -509,31 +500,39 @@ try dcp::DCP dcp(dcp_dir); dcp.read(); DCPOMATIC_ASSERT(dcp.cpls().size() == 1); + optional<size_t> largest_ccap_xml; + optional<size_t> largest_ccap_mxf; + optional<size_t> largest_sub_mxf; for (auto reel: dcp.cpls()[0]->reels()) { for (auto ccap: reel->closed_captions()) { - if (ccap->asset() && ccap->asset()->xml_as_string().length() > static_cast<size_t>(MAX_CLOSED_CAPTION_XML_SIZE - SIZE_SLACK) && !ccap_xml_too_big) { - hint(_( - "At least one of your closed caption files' XML part is larger than " MAX_CLOSED_CAPTION_XML_SIZE_TEXT - ". You should divide the DCP into shorter reels." - )); - ccap_xml_too_big = true; - } - if (subtitle_mxf_too_big(ccap->asset()) && !ccap_mxf_too_big) { - hint(_( - "At least one of your closed caption files is larger than " MAX_TEXT_MXF_SIZE_TEXT - " in total. You should divide the DCP into shorter reels." - )); - ccap_mxf_too_big = true; + largest_ccap_xml = std::max(ccap->asset()->xml_as_string().length(), largest_ccap_xml.get_value_or(0)); + if (ccap->asset() && ccap->asset()->file()) { + largest_ccap_mxf = std::max(dcp::filesystem::file_size(*ccap->asset()->file()), static_cast<uintmax_t>(largest_ccap_mxf.get_value_or(0))); } } - if (reel->main_subtitle() && subtitle_mxf_too_big(reel->main_subtitle()->asset()) && !subs_mxf_too_big) { - hint(_( - "At least one of your subtitle files is larger than " MAX_TEXT_MXF_SIZE_TEXT " in total. " - "You should divide the DCP into shorter reels." - )); - subs_mxf_too_big = true; + if (reel->main_subtitle() && reel->main_subtitle()->asset() && reel->main_subtitle()->asset()->file()) { + largest_sub_mxf = std::max(dcp::filesystem::file_size(*reel->main_subtitle()->asset()->file()), static_cast<uintmax_t>(largest_sub_mxf.get_value_or(0))); } } + + if (largest_ccap_xml && *largest_ccap_xml > static_cast<size_t>(MAX_CLOSED_CAPTION_XML_SIZE - SIZE_SLACK)) { + hint(fmt::format(_( + "At least one of your closed caption files' XML part is larger than " MAX_CLOSED_CAPTION_XML_SIZE_TEXT + ". The largest XML part is {}KB. You should divide the DCP into shorter reels." + ), *largest_ccap_xml / 1000)); + } + if (largest_ccap_mxf && *largest_ccap_mxf >= (MAX_TEXT_MXF_SIZE - SIZE_SLACK)) { + hint(fmt::format(_( + "At least one of your closed caption files is larger than " MAX_TEXT_MXF_SIZE_TEXT + " in total. The largest file is {}MB. You should divide the DCP into shorter reels." + ), *largest_ccap_mxf / 1000000)); + } + if (largest_sub_mxf && *largest_sub_mxf >= (MAX_TEXT_MXF_SIZE - SIZE_SLACK)) { + hint(fmt::format(_( + "At least one of your subtitle files is larger than " MAX_TEXT_MXF_SIZE_TEXT " in total. " + "The largest file is {}MB. You should divide the DCP into shorter reels." + ), *largest_sub_mxf / 1000000)); + } dcp::filesystem::remove_all(dcp_dir); emit(boost::bind(boost::ref(Finished))); @@ -584,24 +583,42 @@ Hints::text(PlayerText text, TextType type, optional<DCPTextTrack> track, DCPTim void Hints::closed_caption(PlayerText text, DCPTimePeriod period) { - int lines = text.string.size(); - for (auto i: text.string) { - if (utf8_strlen(i.text()) > MAX_CLOSED_CAPTION_LENGTH) { - ++lines; - if (!_long_ccap) { - _long_ccap = true; - hint( - fmt::format( - "At least one of your closed caption lines has more than {} characters. " - "It is advisable to make each line {} characters at most in length.", - MAX_CLOSED_CAPTION_LENGTH, - MAX_CLOSED_CAPTION_LENGTH) - ); + map<float, vector<StringText>> lines; + for (auto const& line: text.string) { + bool added = false; + for (auto& existing: lines) { + if (std::abs(existing.first - line.v_position()) < dcp::ALIGN_EPSILON) { + existing.second.push_back(line); + added = true; } } + if (!added) { + lines[line.v_position()] = { line }; + } + } + + for (auto const& line: lines) { + int const length = std::accumulate( + line.second.begin(), + line.second.end(), + 0, + [](int acc, StringText const& text) { + return acc + dcp::utf8_strlen(text.text()); + }); + + if (length > MAX_CLOSED_CAPTION_LENGTH && !_long_ccap) { + _long_ccap = true; + hint( + fmt::format( + "At least one of your closed caption lines has more than {} characters. " + "It is advisable to make each line {} characters at most in length.", + MAX_CLOSED_CAPTION_LENGTH, + MAX_CLOSED_CAPTION_LENGTH) + ); + } } - if (!_too_many_ccap_lines && lines > MAX_CLOSED_CAPTION_LINES) { + if (!_too_many_ccap_lines && lines.size() > MAX_CLOSED_CAPTION_LINES) { hint(fmt::format(_("Some of your closed captions span more than {} lines, so they will be truncated."), MAX_CLOSED_CAPTION_LINES)); _too_many_ccap_lines = true; } diff --git a/src/lib/hints.h b/src/lib/hints.h index b17da2c99..78cc615d3 100644 --- a/src/lib/hints.h +++ b/src/lib/hints.h @@ -26,8 +26,8 @@ #include "signaller.h" #include "text_type.h" #include "weak_film.h" -#include <boost/atomic.hpp> #include <boost/signals2.hpp> +#include <atomic> #include <string> #include <vector> @@ -111,7 +111,7 @@ private: bool _very_long_subtitle = false; boost::optional<dcpomatic::DCPTimePeriod> _last_subtitle; - boost::atomic<bool> _stop; + std::atomic<bool> _stop; bool _disable_audio_analysis = false; }; diff --git a/src/lib/image.cc b/src/lib/image.cc index 51e894900..3a2e99c23 100644 --- a/src/lib/image.cc +++ b/src/lib/image.cc @@ -190,7 +190,8 @@ Image::crop_source_pointers(Crop crop) const corrected_crop.bottom = size().height - 4; } - std::vector<uint8_t*> pointers(planes()); + /* FFmpeg memcpy()s this array and assumes it has 4 entries */ + std::vector<uint8_t*> pointers(4); for (int c = 0; c < planes(); ++c) { int const x = lrintf(bytes_per_pixel(c) * corrected_crop.left); pointers[c] = data()[c] + x + stride()[c] * (corrected_crop.top / vertical_factor(c)); @@ -286,7 +287,8 @@ Image::crop_scale_window( round_height_for_subsampling((out_size.height - inter_size.height) / 2, out_desc) ); - std::vector<uint8_t*> scale_out_data(out->planes()); + /* FFmpeg memcpy()s this array and assumes it has 4 entries */ + std::vector<uint8_t*> scale_out_data(4); for (int c = 0; c < out->planes(); ++c) { int const x = lrintf(out->bytes_per_pixel(c) * corner.x); scale_out_data[c] = out->data()[c] + x + out->stride()[c] * (corner.y / out->vertical_factor(c)); @@ -610,17 +612,15 @@ Image::make_black() case AV_PIX_FMT_UYVY422: { - int const Y = sample_size(0).height; - int const X = line_size()[0]; - uint8_t* p = data()[0]; - for (int y = 0; y < Y; ++y) { - for (int x = 0; x < X / 4; ++x) { - *p++ = eight_bit_uv; // Cb - *p++ = 0; // Y0 - *p++ = eight_bit_uv; // Cr - *p++ = 0; // Y1 - } - } + fill_memory( + data()[0], + sample_size(0).height * line_size()[0], + /* Cb/Cr is eight_bit_uv, Y0/Y1 is 0 */ + static_cast<uint64_t>(eight_bit_uv) | + (static_cast<uint64_t>(eight_bit_uv) << 16) | + (static_cast<uint64_t>(eight_bit_uv) << 32) | + (static_cast<uint64_t>(eight_bit_uv) << 48) + ); break; } @@ -1219,6 +1219,17 @@ Image::bytes_per_pixel(int component) const } #endif + if ( + _pixel_format == AV_PIX_FMT_0RGB || + _pixel_format == AV_PIX_FMT_RGB0 || + _pixel_format == AV_PIX_FMT_0BGR || + _pixel_format == AV_PIX_FMT_BGR0) { + /* Each pixel has an empty byte which we need to account for when allocating, + * otherwise we'll corrupt the image. + */ + bpp[3] = bpp[0]; + } + if ((d->flags & AV_PIX_FMT_FLAG_PLANAR) == 0) { /* Not planar; sum them up */ return bpp[0] + bpp[1] + bpp[2] + bpp[3]; @@ -1573,17 +1584,18 @@ Image::fade(float f) case AV_PIX_FMT_RGB48LE: /* 16-bit little-endian */ for (int c = 0; c < 3; ++c) { - int const stride_pixels = stride()[c] / 2; - int const line_size_pixels = line_size()[c] / 2; + /* Number of R, G, B values */ + int const stride_values = stride()[c] / 2; + int const line_size_values = line_size()[c] / 2; uint16_t* p = reinterpret_cast<uint16_t*>(data()[c]); int const lines = sample_size(c).height; for (int y = 0; y < lines; ++y) { uint16_t* q = p; - for (int x = 0; x < line_size_pixels; ++x) { - *q = int(float(*q) * f); + for (int x = 0; x < line_size_values; ++x) { + *q = int(*q * f); ++q; } - p += stride_pixels; + p += stride_values; } } break; diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc index 8d3092196..4e9eff237 100644 --- a/src/lib/image_content.cc +++ b/src/lib/image_content.cc @@ -46,33 +46,33 @@ using boost::optional; using namespace dcpomatic; -ImageContent::ImageContent (boost::filesystem::path p) +ImageContent::ImageContent(boost::filesystem::path p) { video = make_shared<VideoContent>(this); if (dcp::filesystem::is_regular_file(p) && valid_image_file(p)) { - add_path (p); + add_path(p); } else { _path_to_scan = p; } - set_default_colour_conversion (); + set_default_colour_conversion(); } 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); + video = VideoContent::from_xml(this, node, version, VideoRange::FULL); } string -ImageContent::summary () const +ImageContent::summary() const { - string s = path_summary () + " "; + string s = path_summary() + " "; /* Get the string() here so that the name does not have quotes around it */ - if (still ()) { + if (still()) { s += _("[still]"); } else { s += _("[moving images]"); @@ -83,12 +83,12 @@ ImageContent::summary () const string -ImageContent::technical_summary () const +ImageContent::technical_summary() const { string s = Content::technical_summary() + " - " + video->technical_summary() + " - "; - if (still ()) { + if (still()) { s += _("still"); } else { s += _("moving"); @@ -114,92 +114,92 @@ void ImageContent::examine(shared_ptr<const Film> film, shared_ptr<Job> job, bool tolerant) { if (_path_to_scan) { - job->sub (_("Scanning image files")); + job->sub(_("Scanning image files")); vector<boost::filesystem::path> paths; int n = 0; for (auto i: dcp::filesystem::directory_iterator(*_path_to_scan)) { if (dcp::filesystem::is_regular_file(i.path()) && valid_image_file(i.path())) { - paths.push_back (i.path()); + paths.push_back(i.path()); } ++n; if ((n % 1000) == 0) { - job->set_progress_unknown (); + job->set_progress_unknown(); } } if (paths.empty()) { - throw FileError (_("No valid image files were found in the folder."), *_path_to_scan); + throw FileError(_("No valid image files were found in the folder."), *_path_to_scan); } - sort (paths.begin(), paths.end(), ImageFilenameSorter()); - set_paths (paths); + sort(paths.begin(), paths.end(), ImageFilenameSorter()); + set_paths(paths); } Content::examine(film, job, tolerant); auto examiner = make_shared<ImageExaminer>(film, shared_from_this(), job); video->take_from_examiner(film, examiner); - set_default_colour_conversion (); + set_default_colour_conversion(); } DCPTime -ImageContent::full_length (shared_ptr<const Film> film) const +ImageContent::full_length(shared_ptr<const Film> film) const { - FrameRateChange const frc (film, shared_from_this()); - return DCPTime::from_frames (llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate()); + FrameRateChange const frc(film, shared_from_this()); + return DCPTime::from_frames(llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate()); } DCPTime -ImageContent::approximate_length () const +ImageContent::approximate_length() const { - return DCPTime::from_frames (video->length_after_3d_combine(), 24); + return DCPTime::from_frames(video->length_after_3d_combine(), 24); } string -ImageContent::identifier () const +ImageContent::identifier() const { char buffer[256]; - snprintf (buffer, sizeof(buffer), "%s_%s_%" PRId64, Content::identifier().c_str(), video->identifier().c_str(), video->length()); + snprintf(buffer, sizeof(buffer), "%s_%s_%" PRId64, Content::identifier().c_str(), video->identifier().c_str(), video->length()); return buffer; } bool -ImageContent::still () const +ImageContent::still() const { return number_of_paths() == 1; } void -ImageContent::set_default_colour_conversion () +ImageContent::set_default_colour_conversion() { for (auto i: paths()) { if (valid_j2k_file (i)) { /* We default to no colour conversion if we have JPEG2000 files */ - video->unset_colour_conversion (); + video->unset_colour_conversion(); return; } } - bool const s = still (); + bool const s = still(); - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); if (s) { - video->set_colour_conversion (PresetColourConversion::from_id ("srgb").conversion); + video->set_colour_conversion(PresetColourConversion::from_id("srgb").conversion); } else { - video->set_colour_conversion (PresetColourConversion::from_id ("rec709").conversion); + video->set_colour_conversion(PresetColourConversion::from_id("rec709").conversion); } } void -ImageContent::add_properties (shared_ptr<const Film> film, list<UserProperty>& p) const +ImageContent::add_properties(shared_ptr<const Film> film, list<UserProperty>& p) const { - Content::add_properties (film, p); - video->add_properties (p); + Content::add_properties(film, p); + video->add_properties(p); } diff --git a/src/lib/image_content.h b/src/lib/image_content.h index 4b3b13380..04318ae0d 100644 --- a/src/lib/image_content.h +++ b/src/lib/image_content.h @@ -26,20 +26,20 @@ class ImageContent : public Content { public: - ImageContent (boost::filesystem::path); - ImageContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int); + ImageContent(boost::filesystem::path); + 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 ()); + std::shared_ptr<ImageContent> shared_from_this() { + return std::dynamic_pointer_cast<ImageContent>(Content::shared_from_this()); }; - std::shared_ptr<const ImageContent> shared_from_this () const { - return std::dynamic_pointer_cast<const ImageContent> (Content::shared_from_this ()); + std::shared_ptr<const ImageContent> shared_from_this() const { + return std::dynamic_pointer_cast<const ImageContent>(Content::shared_from_this()); }; void examine(std::shared_ptr<const Film> film, std::shared_ptr<Job>, bool tolerant) override; - std::string summary () const override; - std::string technical_summary () const override; + std::string summary() const override; + std::string technical_summary() const override; void as_xml( xmlpp::Element* element, @@ -48,17 +48,17 @@ public: 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; + dcpomatic::DCPTime full_length(std::shared_ptr<const Film> film) const override; + dcpomatic::DCPTime approximate_length() const override; - std::string identifier () const override; + std::string identifier() const override; - void set_default_colour_conversion (); + void set_default_colour_conversion(); - bool still () const; + bool still() const; private: - void add_properties (std::shared_ptr<const Film> film, std::list<UserProperty>& p) const override; + void add_properties(std::shared_ptr<const Film> film, std::list<UserProperty>& p) const override; boost::optional<boost::filesystem::path> _path_to_scan; }; diff --git a/src/lib/image_decoder.cc b/src/lib/image_decoder.cc index 527a98c7d..29e4a2f07 100644 --- a/src/lib/image_decoder.cc +++ b/src/lib/image_decoder.cc @@ -43,16 +43,16 @@ using dcp::Size; using namespace dcpomatic; -ImageDecoder::ImageDecoder (shared_ptr<const Film> film, shared_ptr<const ImageContent> c) - : Decoder (film) - , _image_content (c) +ImageDecoder::ImageDecoder(shared_ptr<const Film> film, shared_ptr<const ImageContent> c) + : Decoder(film) + , _image_content(c) { video = make_shared<VideoDecoder>(this, c); } bool -ImageDecoder::pass () +ImageDecoder::pass() { if (_frame_video_position >= _image_content->video->length()) { return true; @@ -60,8 +60,8 @@ ImageDecoder::pass () if (!_image_content->still() || !_image) { /* Either we need an image or we are using moving images, so load one */ - auto path = _image_content->path (_image_content->still() ? 0 : _frame_video_position); - if (valid_j2k_file (path)) { + auto path = _image_content->path(_image_content->still() ? 0 : _frame_video_position); + if (valid_j2k_file(path)) { AVPixelFormat pf; if (_image_content->video->colour_conversion()) { /* We have a specified colour conversion: assume the image is RGB */ @@ -88,8 +88,8 @@ ImageDecoder::pass () void -ImageDecoder::seek (ContentTime time, bool accurate) +ImageDecoder::seek(ContentTime time, bool accurate) { - Decoder::seek (time, accurate); - _frame_video_position = time.frames_round (_image_content->active_video_frame_rate(film())); + Decoder::seek(time, accurate); + _frame_video_position = time.frames_round(_image_content->active_video_frame_rate(film())); } diff --git a/src/lib/image_decoder.h b/src/lib/image_decoder.h index 41924735c..2b07e6b28 100644 --- a/src/lib/image_decoder.h +++ b/src/lib/image_decoder.h @@ -31,14 +31,14 @@ class ImageProxy; class ImageDecoder : public Decoder { public: - ImageDecoder (std::shared_ptr<const Film> film, std::shared_ptr<const ImageContent> c); + ImageDecoder(std::shared_ptr<const Film> film, std::shared_ptr<const ImageContent> c); - std::shared_ptr<const ImageContent> content () { + std::shared_ptr<const ImageContent> content() { return _image_content; } - bool pass () override; - void seek (dcpomatic::ContentTime, bool) override; + bool pass() override; + void seek(dcpomatic::ContentTime, bool) override; private: diff --git a/src/lib/image_examiner.cc b/src/lib/image_examiner.cc index 4a91a103f..f39500781 100644 --- a/src/lib/image_examiner.cc +++ b/src/lib/image_examiner.cc @@ -44,16 +44,16 @@ using std::sort; using boost::optional; -ImageExaminer::ImageExaminer (shared_ptr<const Film> film, shared_ptr<const ImageContent> content, shared_ptr<Job>) - : _film (film) - , _image_content (content) +ImageExaminer::ImageExaminer(shared_ptr<const Film> film, shared_ptr<const ImageContent> content, shared_ptr<Job>) + : _film(film) + , _image_content(content) { auto path = content->path(0); - if (valid_j2k_file (path)) { + if (valid_j2k_file(path)) { auto size = dcp::filesystem::file_size(path); dcp::File f(path, "rb"); if (!f) { - throw FileError ("Could not open file for reading", path); + throw FileError("Could not open file for reading", path); } std::vector<uint8_t> buffer(size); f.checked_read(buffer.data(), size); @@ -70,23 +70,23 @@ ImageExaminer::ImageExaminer (shared_ptr<const Film> film, shared_ptr<const Imag _has_alpha = image.image->has_alpha(); } - if (content->still ()) { - _video_length = Config::instance()->default_still_length() * video_frame_rate().get_value_or (film->video_frame_rate ()); + if (content->still()) { + _video_length = Config::instance()->default_still_length() * video_frame_rate().get_value_or(film->video_frame_rate()); } else { - _video_length = _image_content->number_of_paths (); + _video_length = _image_content->number_of_paths(); } } optional<dcp::Size> -ImageExaminer::video_size () const +ImageExaminer::video_size() const { return _video_size; } optional<double> -ImageExaminer::video_frame_rate () const +ImageExaminer::video_frame_rate() const { if (_image_content->video_frame_rate()) { /* The content already knows what frame rate it should be */ @@ -99,7 +99,7 @@ ImageExaminer::video_frame_rate () const bool -ImageExaminer::yuv () const +ImageExaminer::yuv() const { /* We never convert ImageSource from YUV to RGB (though maybe sometimes we should) so it makes sense to just say they are never YUV so the option of a conversion diff --git a/src/lib/image_examiner.h b/src/lib/image_examiner.h index d6cdfac53..dddb6544f 100644 --- a/src/lib/image_examiner.h +++ b/src/lib/image_examiner.h @@ -25,21 +25,21 @@ class ImageContent; class ImageExaminer : public VideoExaminer { public: - ImageExaminer (std::shared_ptr<const Film>, std::shared_ptr<const ImageContent>, std::shared_ptr<Job>); + ImageExaminer(std::shared_ptr<const Film>, std::shared_ptr<const ImageContent>, std::shared_ptr<Job>); - bool has_video () const override { + bool has_video() const override { return true; } - boost::optional<double> video_frame_rate () const override; + boost::optional<double> video_frame_rate() const override; boost::optional<dcp::Size> video_size() const override; - Frame video_length () const override { + Frame video_length() const override { return _video_length; } - bool yuv () const override; - VideoRange range () const override { + bool yuv() const override; + VideoRange range() const override { return VideoRange::FULL; } - PixelQuanta pixel_quanta () const override { + PixelQuanta pixel_quanta() const override { /* See ::yuv - we're assuming the image is not YUV and so not subsampled */ return {}; } diff --git a/src/lib/j2k_image_proxy.cc b/src/lib/j2k_image_proxy.cc index 8fb387158..c2058794e 100644 --- a/src/lib/j2k_image_proxy.cc +++ b/src/lib/j2k_image_proxy.cc @@ -51,57 +51,57 @@ using dcp::ArrayData; /** Construct a J2KImageProxy from a JPEG2000 file */ -J2KImageProxy::J2KImageProxy (boost::filesystem::path path, dcp::Size size, AVPixelFormat pixel_format) - : _data (new dcp::ArrayData(path)) - , _size (size) - , _pixel_format (pixel_format) - , _error (false) +J2KImageProxy::J2KImageProxy(boost::filesystem::path path, dcp::Size size, AVPixelFormat pixel_format) + : _data(new dcp::ArrayData(path)) + , _size(size) + , _pixel_format(pixel_format) + , _error(false) { /* ::image assumes 16bpp */ - DCPOMATIC_ASSERT (_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); + DCPOMATIC_ASSERT(_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); } -J2KImageProxy::J2KImageProxy ( +J2KImageProxy::J2KImageProxy( shared_ptr<const dcp::MonoJ2KPictureFrame> frame, dcp::Size size, AVPixelFormat pixel_format, optional<int> forced_reduction ) - : _data (frame) - , _size (size) - , _pixel_format (pixel_format) - , _forced_reduction (forced_reduction) - , _error (false) + : _data(frame) + , _size(size) + , _pixel_format(pixel_format) + , _forced_reduction(forced_reduction) + , _error(false) { /* ::image assumes 16bpp */ - DCPOMATIC_ASSERT (_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); + DCPOMATIC_ASSERT(_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); } -J2KImageProxy::J2KImageProxy ( +J2KImageProxy::J2KImageProxy( shared_ptr<const dcp::StereoJ2KPictureFrame> frame, dcp::Size size, dcp::Eye eye, AVPixelFormat pixel_format, optional<int> forced_reduction ) - : _data (eye == dcp::Eye::LEFT ? frame->left() : frame->right()) - , _size (size) - , _eye (eye) - , _pixel_format (pixel_format) - , _forced_reduction (forced_reduction) - , _error (false) + : _data(eye == dcp::Eye::LEFT ? frame->left() : frame->right()) + , _size(size) + , _eye(eye) + , _pixel_format(pixel_format) + , _forced_reduction(forced_reduction) + , _error(false) { /* ::image assumes 16bpp */ - DCPOMATIC_ASSERT (_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); + DCPOMATIC_ASSERT(_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); } -J2KImageProxy::J2KImageProxy (shared_ptr<cxml::Node> xml, shared_ptr<Socket> socket) - : _error (false) +J2KImageProxy::J2KImageProxy(shared_ptr<cxml::Node> xml, shared_ptr<Socket> socket) + : _error(false) { - _size = dcp::Size (xml->number_child<int>("Width"), xml->number_child<int>("Height")); + _size = dcp::Size(xml->number_child<int>("Width"), xml->number_child<int>("Height")); if (xml->optional_number_child<int>("Eye")) { _eye = static_cast<dcp::Eye>(xml->number_child<int>("Eye")); } @@ -111,18 +111,18 @@ J2KImageProxy::J2KImageProxy (shared_ptr<cxml::Node> xml, shared_ptr<Socket> soc encode servers). So we can put anything in here. It's a bit of a hack. */ _pixel_format = AV_PIX_FMT_XYZ12LE; - socket->read (data->data(), data->size()); + socket->read(data->data(), data->size()); _data = data; } int -J2KImageProxy::prepare (Image::Alignment alignment, optional<dcp::Size> target_size) const +J2KImageProxy::prepare(Image::Alignment alignment, optional<dcp::Size> target_size) const { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); if (_image && target_size == _target_size) { - DCPOMATIC_ASSERT (_reduce); + DCPOMATIC_ASSERT(_reduce); return *_reduce; } @@ -136,15 +136,15 @@ J2KImageProxy::prepare (Image::Alignment alignment, optional<dcp::Size> target_s } --reduce; - reduce = max (0, reduce); + reduce = max(0, reduce); } try { /* XXX: should check that potentially trashing _data here doesn't matter */ - auto decompressed = dcp::decompress_j2k (const_cast<uint8_t*>(_data->data()), _data->size(), reduce); + auto decompressed = dcp::decompress_j2k(const_cast<uint8_t*>(_data->data()), _data->size(), reduce); _image = make_shared<Image>(_pixel_format, decompressed->size(), alignment); - int const shift = 16 - decompressed->precision (0); + int const shift = 16 - decompressed->precision(0); /* Copy data in whatever format (sRGB or XYZ) into our Image; I'm assuming the data is 12-bit either way. @@ -153,9 +153,9 @@ J2KImageProxy::prepare (Image::Alignment alignment, optional<dcp::Size> target_s int const width = decompressed->size().width; int p = 0; - int* decomp_0 = decompressed->data (0); - int* decomp_1 = decompressed->data (1); - int* decomp_2 = decompressed->data (2); + int* decomp_0 = decompressed->data(0); + int* decomp_1 = decompressed->data(1); + int* decomp_2 = decompressed->data(2); for (int y = 0; y < decompressed->size().height; ++y) { auto q = reinterpret_cast<uint16_t *>(_image->data()[0] + y * _image->stride()[0]); for (int x = 0; x < width; ++x) { @@ -167,7 +167,7 @@ J2KImageProxy::prepare (Image::Alignment alignment, optional<dcp::Size> target_s } } catch (dcp::J2KDecompressionError& e) { _image = make_shared<Image>(_pixel_format, _size, alignment); - _image->make_black (); + _image->make_black(); _error = true; } @@ -179,14 +179,14 @@ J2KImageProxy::prepare (Image::Alignment alignment, optional<dcp::Size> target_s ImageProxy::Result -J2KImageProxy::image (Image::Alignment alignment, optional<dcp::Size> target_size) const +J2KImageProxy::image(Image::Alignment alignment, optional<dcp::Size> target_size) const { - int const r = prepare (alignment, target_size); + int const r = prepare(alignment, target_size); /* I think this is safe without a lock on mutex. _image is guaranteed to be set up when prepare() has happened. */ - return Result (_image, r, _error); + return Result(_image, r, _error); } @@ -204,14 +204,14 @@ J2KImageProxy::add_metadata(xmlpp::Element* element) const void -J2KImageProxy::write_to_socket (shared_ptr<Socket> socket) const +J2KImageProxy::write_to_socket(shared_ptr<Socket> socket) const { - socket->write (_data->data(), _data->size()); + socket->write(_data->data(), _data->size()); } bool -J2KImageProxy::same (shared_ptr<const ImageProxy> other) const +J2KImageProxy::same(shared_ptr<const ImageProxy> other) const { auto jp = dynamic_pointer_cast<const J2KImageProxy>(other); if (!jp) { @@ -222,19 +222,19 @@ J2KImageProxy::same (shared_ptr<const ImageProxy> other) const } -J2KImageProxy::J2KImageProxy (ArrayData data, dcp::Size size, AVPixelFormat pixel_format) - : _data (new ArrayData(data)) - , _size (size) - , _pixel_format (pixel_format) - , _error (false) +J2KImageProxy::J2KImageProxy(ArrayData data, dcp::Size size, AVPixelFormat pixel_format) + : _data(new ArrayData(data)) + , _size(size) + , _pixel_format(pixel_format) + , _error(false) { /* ::image assumes 16bpp */ - DCPOMATIC_ASSERT (_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); + DCPOMATIC_ASSERT(_pixel_format == AV_PIX_FMT_RGB48 || _pixel_format == AV_PIX_FMT_XYZ12LE); } size_t -J2KImageProxy::memory_used () const +J2KImageProxy::memory_used() const { size_t m = _data->size(); if (_image) { diff --git a/src/lib/j2k_image_proxy.h b/src/lib/j2k_image_proxy.h index 1d2d5cc21..40504ddd5 100644 --- a/src/lib/j2k_image_proxy.h +++ b/src/lib/j2k_image_proxy.h @@ -34,16 +34,16 @@ namespace dcp { class J2KImageProxy : public ImageProxy { public: - J2KImageProxy (boost::filesystem::path path, dcp::Size, AVPixelFormat pixel_format); + J2KImageProxy(boost::filesystem::path path, dcp::Size, AVPixelFormat pixel_format); - J2KImageProxy ( + J2KImageProxy( std::shared_ptr<const dcp::MonoJ2KPictureFrame> frame, dcp::Size, AVPixelFormat pixel_format, boost::optional<int> forced_reduction ); - J2KImageProxy ( + J2KImageProxy( std::shared_ptr<const dcp::StereoJ2KPictureFrame> frame, dcp::Size, dcp::Eye, @@ -51,35 +51,35 @@ public: boost::optional<int> forced_reduction ); - J2KImageProxy (std::shared_ptr<cxml::Node> xml, std::shared_ptr<Socket> socket); + J2KImageProxy(std::shared_ptr<cxml::Node> xml, std::shared_ptr<Socket> socket); /* For tests */ - J2KImageProxy (dcp::ArrayData data, dcp::Size size, AVPixelFormat pixel_format); + J2KImageProxy(dcp::ArrayData data, dcp::Size size, AVPixelFormat pixel_format); - Result image ( + Result image( Image::Alignment alignment, - boost::optional<dcp::Size> size = boost::optional<dcp::Size> () + boost::optional<dcp::Size> size = boost::optional<dcp::Size>() ) const override; void add_metadata(xmlpp::Element*) const override; - void write_to_socket (std::shared_ptr<Socket> override) 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; - int prepare (Image::Alignment alignment, boost::optional<dcp::Size> = boost::optional<dcp::Size>()) const override; + bool same(std::shared_ptr<const ImageProxy>) const override; + int prepare(Image::Alignment alignment, boost::optional<dcp::Size> = boost::optional<dcp::Size>()) const override; - std::shared_ptr<const dcp::Data> j2k () const { + std::shared_ptr<const dcp::Data> j2k() const { return _data; } - dcp::Size size () const { + dcp::Size size() const { return _size; } - boost::optional<dcp::Eye> eye () const { + boost::optional<dcp::Eye> eye() const { return _eye; } - size_t memory_used () const override; + size_t memory_used() const override; private: std::shared_ptr<const dcp::Data> _data; diff --git a/src/lib/job.h b/src/lib/job.h index f435d815a..34f7b0526 100644 --- a/src/lib/job.h +++ b/src/lib/job.h @@ -30,12 +30,12 @@ #include "signaller.h" #include <dcp/warnings.h> -#include <boost/atomic.hpp> LIBDCP_DISABLE_WARNINGS #include <boost/signals2.hpp> LIBDCP_ENABLE_WARNINGS #include <boost/thread.hpp> #include <boost/thread/mutex.hpp> +#include <atomic> #include <string> @@ -174,7 +174,7 @@ private: /** true to limit emissions of the progress signal so that they don't * come too often. */ - boost::atomic<bool> _rate_limit_progress; + std::atomic<bool> _rate_limit_progress; /** condition to signal changes to pause/resume so that we know when to wake; this could be a general _state_change if it made more sense. diff --git a/src/lib/kdm_cli.cc b/src/lib/kdm_cli.cc index b115412a7..bd400b458 100644 --- a/src/lib/kdm_cli.cc +++ b/src/lib/kdm_cli.cc @@ -96,6 +96,7 @@ help(std::function<void (string)> out) out(" -S, --screen <name> screen name (when using -C) or screen name (to filter screens when using -c)"); out(" -C, --projector-certificate <file> file containing projector certificate"); out(" -T, --trusted-device-certificate <file> file containing a trusted device's certificate"); + out(" --trusted-device-chain <file> file containing a trusted device's chain; the leaf certificate will be used"); out(" --decryption-key <file> file containing the private key which can decrypt the given DKDM"); out(variant::insert_dcpomatic(" ({}'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"); @@ -525,12 +526,13 @@ try { "screen", required_argument, 0, 'S' }, { "projector-certificate", required_argument, 0, 'C' }, { "trusted-device-certificate", required_argument, 0, 'T' }, + { "trusted-device-chain", required_argument, 0, 'H' }, { "decryption-key", required_argument, 0, 'G' }, { "cinemas-file", required_argument, 0, 'E' }, { 0, 0, 0, 0 } }; - int c = getopt_long(argc, argv, "ho:K:Z:f:t:d:F:pae::zvc:S:C:T:E: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:H", long_options, &option_index); if (c == -1) { break; @@ -603,6 +605,12 @@ try case 'T': trusted_devices.push_back(TrustedDevice(dcp::Certificate(dcp::file_to_string(optarg)))); break; + case 'H': + { + auto chain = dcp::CertificateChain(dcp::file_to_string(optarg)); + trusted_devices.push_back(TrustedDevice(chain.leaf())); + break; + } case 'G': decryption_key = optarg; break; @@ -718,6 +726,11 @@ try valid_to = valid_from.get() + duration_from_string(*duration_string); } + if (!trusted_devices.empty() && (formulation != dcp::Formulation::MULTIPLE_MODIFIED_TRANSITIONAL_1 && formulation != dcp::Formulation::DCI_SPECIFIC)) { + out("You have given one or more trusted devices but the KDM formulation you specified will not write them to the KDM. " + "Consider using --formulation multiple-modified-transitional-1"); + } + if (verbose) { out(fmt::format("Making KDMs valid from {} to {}", boost::posix_time::to_simple_string(valid_from.get()), boost::posix_time::to_simple_string(valid_to.get()))); } diff --git a/src/lib/log.cc b/src/lib/log.cc index aae492faf..e5d1a8206 100644 --- a/src/lib/log.cc +++ b/src/lib/log.cc @@ -40,30 +40,30 @@ using std::shared_ptr; using std::string; -Log::Log () +Log::Log() { } void -Log::log (shared_ptr<const LogEntry> e) +Log::log(shared_ptr<const LogEntry> e) { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); if ((_types & e->type()) == 0) { return; } - do_log (e); + do_log(e); } /** @param n String to log */ void -Log::log (string message, int type) +Log::log(string message, int type) { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); if ((_types & type) == 0) { return; @@ -71,30 +71,30 @@ Log::log (string message, int type) auto e = make_shared<StringLogEntry>(type, message); - do_log (e); + do_log(e); } void -Log::dcp_log (dcp::NoteType type, string m) +Log::dcp_log(dcp::NoteType type, string m) { switch (type) { case dcp::NoteType::PROGRESS: - do_log (make_shared<StringLogEntry>(LogEntry::TYPE_GENERAL, m)); + do_log(make_shared<StringLogEntry>(LogEntry::TYPE_GENERAL, m)); break; case dcp::NoteType::ERROR: - do_log (make_shared<StringLogEntry>(LogEntry::TYPE_ERROR, m)); + do_log(make_shared<StringLogEntry>(LogEntry::TYPE_ERROR, m)); break; case dcp::NoteType::NOTE: - do_log (make_shared<StringLogEntry>(LogEntry::TYPE_WARNING, m)); + do_log(make_shared<StringLogEntry>(LogEntry::TYPE_WARNING, m)); break; } } void -Log::set_types (int t) +Log::set_types(int t) { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); _types = t; } diff --git a/src/lib/log.h b/src/lib/log.h index c6685bda1..e372e618f 100644 --- a/src/lib/log.h +++ b/src/lib/log.h @@ -45,25 +45,25 @@ LIBDCP_ENABLE_WARNINGS class Log { public: - Log (); - virtual ~Log () {} + Log(); + virtual ~Log() {} - Log (Log const&) = delete; - Log& operator= (Log const&) = delete; + Log(Log const&) = delete; + Log& operator=(Log const&) = delete; - void log (std::shared_ptr<const LogEntry> entry); - void log (std::string message, int type); - void dcp_log (dcp::NoteType type, std::string message); + void log(std::shared_ptr<const LogEntry> entry); + void log(std::string message, int type); + void dcp_log(dcp::NoteType type, std::string message); - void set_types (int types); - int types () const { + void set_types(int types); + int types() const { return _types; } /** @param amount Approximate number of bytes to return; the returned value * may be shorter or longer than this. */ - virtual std::string head_and_tail (int amount = 1024) const { + virtual std::string head_and_tail(int amount = 1024) const { (void) amount; return ""; } @@ -74,7 +74,7 @@ protected: mutable boost::mutex _mutex; private: - virtual void do_log (std::shared_ptr<const LogEntry> entry) = 0; + virtual void do_log(std::shared_ptr<const LogEntry> entry) = 0; /** bit-field of log types which should be put into the log (others are ignored) */ int _types = 0; diff --git a/src/lib/memory_util.cc b/src/lib/memory_util.cc index 00117855d..e32756276 100644 --- a/src/lib/memory_util.cc +++ b/src/lib/memory_util.cc @@ -25,17 +25,58 @@ extern "C" { #include <libavutil/avutil.h> } LIBDCP_ENABLE_WARNINGS +#include <algorithm> #include <new> #include <stdexcept> void * -wrapped_av_malloc (size_t s) +wrapped_av_malloc(size_t s) { - auto p = av_malloc (s); + auto p = av_malloc(s); if (!p) { - throw std::bad_alloc (); + throw std::bad_alloc(); } return p; } + +void +fill_memory(void* ptr, size_t bytes, uint64_t value) +{ + if (bytes == 0) { + return; + } + + auto const start = std::min(bytes, sizeof(value) - reinterpret_cast<uintptr_t>(ptr) % sizeof(value)); + auto start_ptr = reinterpret_cast<uint8_t*>(ptr); + if (start < 8) { + for (auto i = 0UL; i < start; ++i) { + *start_ptr++ = value & 0xff; + value = (value >> 8) | ((value & 0xff) << 56); + } + + bytes -= start; + if (bytes == 0) { + return; + } + } + + auto const main = (bytes - (bytes % sizeof(value))) / 8; + auto main_ptr = reinterpret_cast<uint64_t*>(start_ptr); + for (auto i = 0UL; i < main; ++i) { + *main_ptr++ = value; + } + + bytes -= main * 8; + if (bytes == 0) { + return; + } + + auto end_ptr = reinterpret_cast<uint8_t*>(main_ptr); + for (auto i = 0UL; i < bytes; ++i) { + *end_ptr++ = value & 0xff; + value = (value >> 8) | ((value & 0xff) << 56); + } +} + diff --git a/src/lib/memory_util.h b/src/lib/memory_util.h index eccc4a857..f6bbe0621 100644 --- a/src/lib/memory_util.h +++ b/src/lib/memory_util.h @@ -19,4 +19,9 @@ */ -extern void* wrapped_av_malloc (size_t); +#include <cstddef> +#include <cstdint> + + +extern void* wrapped_av_malloc(size_t); +extern void fill_memory(void* ptr, size_t bytes, uint64_t value); diff --git a/src/lib/nanomsg.cc b/src/lib/nanomsg.cc index fe3827247..4ec37635e 100644 --- a/src/lib/nanomsg.cc +++ b/src/lib/nanomsg.cc @@ -36,9 +36,9 @@ using boost::optional; #define NANOMSG_URL "ipc:///tmp/dcpomatic.ipc" -Nanomsg::Nanomsg (bool server) +Nanomsg::Nanomsg(bool server) { - _socket = nn_socket (AF_SP, NN_PAIR); + _socket = nn_socket(AF_SP, NN_PAIR); if (_socket < 0) { throw runtime_error("Could not set up nanomsg socket"); } @@ -54,21 +54,21 @@ Nanomsg::Nanomsg (bool server) } -Nanomsg::~Nanomsg () +Nanomsg::~Nanomsg() { - nn_shutdown (_socket, _endpoint); - nn_close (_socket); + nn_shutdown(_socket, _endpoint); + nn_close(_socket); } bool -Nanomsg::send (string s, int timeout) +Nanomsg::send(string s, int timeout) { if (timeout != 0) { - nn_setsockopt (_socket, NN_SOL_SOCKET, NN_SNDTIMEO, &timeout, sizeof(int)); + nn_setsockopt(_socket, NN_SOL_SOCKET, NN_SNDTIMEO, &timeout, sizeof(int)); } - int const r = nn_send (_socket, s.c_str(), s.length(), timeout ? 0 : NN_DONTWAIT); + int const r = nn_send(_socket, s.c_str(), s.length(), timeout ? 0 : NN_DONTWAIT); if (r < 0) { if (errno == ETIMEDOUT || errno == EAGAIN) { return false; @@ -83,7 +83,7 @@ Nanomsg::send (string s, int timeout) optional<string> -Nanomsg::get_from_pending () +Nanomsg::get_from_pending() { if (_pending.empty()) { return {}; @@ -96,10 +96,10 @@ Nanomsg::get_from_pending () void -Nanomsg::recv_and_parse (int flags) +Nanomsg::recv_and_parse(int flags) { char* buf = 0; - int const received = nn_recv (_socket, &buf, NN_MSG, flags); + int const received = nn_recv(_socket, &buf, NN_MSG, flags); if (received < 0) { if (errno == ETIMEDOUT || errno == EAGAIN) { @@ -107,36 +107,35 @@ Nanomsg::recv_and_parse (int flags) } LOG_DISK("nn_recv failed"); - throw CommunicationFailedError (); + throw CommunicationFailedError(); } char* p = buf; for (int i = 0; i < received; ++i) { if (*p == '\n') { - _pending.push_front (_current); + _pending.push_front(_current); _current = ""; } else { _current += *p; } ++p; } - nn_freemsg (buf); + nn_freemsg(buf); } optional<string> -Nanomsg::receive (int timeout) +Nanomsg::receive(int timeout) { if (timeout != 0) { - nn_setsockopt (_socket, NN_SOL_SOCKET, NN_RCVTIMEO, &timeout, sizeof(int)); + nn_setsockopt(_socket, NN_SOL_SOCKET, NN_RCVTIMEO, &timeout, sizeof(int)); } - auto l = get_from_pending (); - if (l) { + if (auto l = get_from_pending()) { return *l; } - recv_and_parse (timeout ? 0 : NN_DONTWAIT); + recv_and_parse(timeout ? 0 : NN_DONTWAIT); - return get_from_pending (); + return get_from_pending(); } diff --git a/src/lib/nanomsg.h b/src/lib/nanomsg.h index 8d89d6d99..bd15a670f 100644 --- a/src/lib/nanomsg.h +++ b/src/lib/nanomsg.h @@ -27,27 +27,27 @@ class Nanomsg { public: - explicit Nanomsg (bool server); - ~Nanomsg (); + explicit Nanomsg(bool server); + ~Nanomsg(); - Nanomsg (Nanomsg const&) = delete; - Nanomsg& operator= (Nanomsg const&) = delete; + Nanomsg(Nanomsg const&) = delete; + Nanomsg& operator=(Nanomsg const&) = delete; /** Try to send a message, waiting for some timeout before giving up. * @param timeout Timeout in milliseconds, or -1 for infinite timeout. * @return true if the send happened, false if there was a timeout. */ - bool send (std::string s, int timeout); + bool send(std::string s, int timeout); /** Try to receive a message, waiting for some timeout before giving up. * @param timeout Timeout in milliseconds, or -1 for infinite timeout. * @return Empty if the timeout was reached, otherwise the received string. */ - boost::optional<std::string> receive (int timeout); + boost::optional<std::string> receive(int timeout); private: - boost::optional<std::string> get_from_pending (); - void recv_and_parse (int flags); + boost::optional<std::string> get_from_pending(); + void recv_and_parse(int flags); int _socket; int _endpoint; diff --git a/src/lib/packet_queue.cc b/src/lib/packet_queue.cc new file mode 100644 index 000000000..9cdc7bc53 --- /dev/null +++ b/src/lib/packet_queue.cc @@ -0,0 +1,35 @@ +/* + Copyright (C) 2026 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 "packet_queue.h" +extern "C" { +#include <libavcodec/packet.h> +} + + +PacketQueue::PacketInfo::PacketInfo(AVPacket* packet) + : stream_index(packet->stream_index) + , dts(packet->dts) +{ + +} + + diff --git a/src/lib/packet_queue.h b/src/lib/packet_queue.h new file mode 100644 index 000000000..60bd4e8af --- /dev/null +++ b/src/lib/packet_queue.h @@ -0,0 +1,83 @@ +/* + Copyright (C) 2026 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_PACKET_QUEUE_H +#define DCPOMATIC_PACKET_QUEUE_H + + +/** @file src/lib/packet_queue.h + * @brief PacketQueue parent class. + */ + + +#include <boost/optional.hpp> +#include <boost/variant.hpp> +#include <cstdint> +#include <deque> + +struct AVPacket; + + +/** @class PacketQueue + * @brief Parent class for things which take and then return AVPackets, possibly + * re-ordering them. + */ +class PacketQueue +{ +public: + virtual ~PacketQueue() = default; + + enum class Type { + VIDEO, + AUDIO, + SUBTITLE, + DROP, + }; + + /** Container for the only information we need to keep from a DROP packet */ + struct PacketInfo { + PacketInfo(AVPacket* packet); + + int stream_index; + int64_t dts; + }; + + typedef boost::variant<AVPacket*, PacketInfo> Packet; + + /** Add a packet to the queue. Does not ref the packet; we expect + * the packet to be freed when it comes out of get() (or by clear()). + */ + virtual void add(AVPacket* packet, Type type) = 0; + + /** Get the next packet to process. + * @param flushing should be true if we are flushing at the end of a decode. + * When this is true the queue will be emptied without trying to re-order it. + * Returns boost::none when there are no more packets to get. + */ + virtual boost::optional<std::pair<Packet, Type>> get(bool flushing) = 0; + + /** Clear the queue. Packets will be freed. */ + virtual void clear() = 0; +}; + + +#endif + diff --git a/src/lib/passthrough_packet_queue.cc b/src/lib/passthrough_packet_queue.cc new file mode 100644 index 000000000..03038ff5f --- /dev/null +++ b/src/lib/passthrough_packet_queue.cc @@ -0,0 +1,56 @@ +/* + Copyright (C) 2026 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 "passthrough_packet_queue.h" +#include <boost/core/exchange.hpp> +#include <boost/optional.hpp> +#include <utility> + + +using boost::optional; + + +void +PassthroughPacketQueue::add(AVPacket* packet, Type type) +{ + DCPOMATIC_ASSERT(!_store); + if (type == PacketQueue::Type::DROP) { + _store = std::make_pair(PacketInfo(packet), type); + } else { + _store = std::make_pair(Packet(packet), type); + } +} + + +optional<std::pair<PacketQueue::Packet, PacketQueue::Type>> +PassthroughPacketQueue::get(bool) +{ + return boost::exchange(_store, boost::none); +} + + +void +PassthroughPacketQueue::clear() +{ + _store = boost::none; +} + diff --git a/src/lib/passthrough_packet_queue.h b/src/lib/passthrough_packet_queue.h new file mode 100644 index 000000000..56ebf3867 --- /dev/null +++ b/src/lib/passthrough_packet_queue.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2026 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 "packet_queue.h" +#include <boost/optional.hpp> + + +class PassthroughPacketQueue : public PacketQueue +{ +public: + void add(AVPacket* packet, Type type) override; + + /** Get the next packet to process. + * @param flushing should be true if we are flushing at the end of a decode. + * When this is true the queue will be emptied without trying to re-order it. + * Returns { nullptr, VIDEO } when there are no more packets to get. + */ + boost::optional<std::pair<Packet, Type>> get(bool flushing) override; + + /** Clear the queue. Packets will be freed. */ + void clear() override; + +private: + boost::optional<std::pair<Packet, Type>> _store; +}; + + diff --git a/src/lib/player.cc b/src/lib/player.cc index 7498ca4e7..cf5429fd5 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -86,6 +86,7 @@ using namespace dcpomatic; Player::Player(shared_ptr<const Film> film, Image::Alignment subtitle_alignment, bool tolerant) : _film(film) , _suspended(0) + , _video_container_size(dcp::Size{}) , _ignore_video(false) , _ignore_audio(false) , _ignore_text(false) @@ -94,6 +95,7 @@ Player::Player(shared_ptr<const Film> film, Image::Alignment subtitle_alignment, , _tolerant(tolerant) , _play_referenced(false) , _audio_merger(film->audio_frame_rate()) + , _playback_length(dcpomatic::DCPTime{}) , _subtitle_alignment(subtitle_alignment) { construct(); @@ -104,6 +106,7 @@ Player::Player(shared_ptr<const Film> film, shared_ptr<const Playlist> playlist_ : _film(film) , _playlist(playlist_) , _suspended(0) + , _video_container_size(dcp::Size{}) , _ignore_video(false) , _ignore_audio(false) , _ignore_text(false) @@ -112,6 +115,7 @@ Player::Player(shared_ptr<const Film> film, shared_ptr<const Playlist> playlist_ , _tolerant(tolerant) , _play_referenced(false) , _audio_merger(film->audio_frame_rate()) + , _playback_length(dcpomatic::DCPTime{}) { construct(); } @@ -164,7 +168,7 @@ Player::Player(Player&& other) , _play_referenced(other._play_referenced.load()) , _next_video_time(other._next_video_time) , _next_audio_time(other._next_audio_time) - , _dcp_decode_reduction(other._dcp_decode_reduction.load()) + , _dcp_decode_reduction(other._dcp_decode_reduction) , _last_video(std::move(other._last_video)) , _audio_merger(std::move(other._audio_merger)) , _shuffler(std::move(other._shuffler)) @@ -204,7 +208,7 @@ Player::operator=(Player&& other) _play_referenced = other._play_referenced.load(); _next_video_time = other._next_video_time; _next_audio_time = other._next_audio_time; - _dcp_decode_reduction = other._dcp_decode_reduction.load(); + _dcp_decode_reduction = other._dcp_decode_reduction; _last_video = std::move(other._last_video); _audio_merger = std::move(other._audio_merger); _shuffler = std::move(other._shuffler); @@ -542,7 +546,7 @@ Player::dcp_to_content_video(shared_ptr<const Piece> piece, DCPTime t) const Instead we convert the DCPTime using the DCP video rate then account for any skip/repeat. */ - return s.frames_floor(piece->frc.dcp) / piece->frc.factor(); + return s.frames_floor(piece->frc.dcp()) / piece->frc.factor(); } @@ -550,7 +554,7 @@ DCPTime Player::content_video_to_dcp(shared_ptr<const Piece> piece, Frame f) const { /* See comment in dcp_to_content_video */ - auto const d = DCPTime::from_frames(f * piece->frc.factor(), piece->frc.dcp) - DCPTime(piece->content->trim_start(), piece->frc); + auto const d = DCPTime::from_frames(f * piece->frc.factor(), piece->frc.dcp()) - DCPTime(piece->content->trim_start(), piece->frc); return d + piece->content->position(); } @@ -1554,12 +1558,17 @@ Player::set_dcp_decode_reduction(optional<int> reduction) { ChangeSignaller<Player, int> cc(this, PlayerProperty::DCP_DECODE_REDUCTION); - if (reduction == _dcp_decode_reduction.load()) { - cc.abort(); - return; + { + boost::mutex::scoped_lock lm(_mutex); + + if (reduction == _dcp_decode_reduction) { + cc.abort(); + return; + } + + _dcp_decode_reduction = reduction; } - _dcp_decode_reduction = reduction; setup_pieces(); } diff --git a/src/lib/player.h b/src/lib/player.h index 4a1cf5f55..2ae60c287 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -39,7 +39,7 @@ #include "player_text.h" #include "position_image.h" #include "shuffler.h" -#include <boost/atomic.hpp> +#include <atomic> #include <list> @@ -181,9 +181,10 @@ private: std::weak_ptr<Piece> weak_piece, std::weak_ptr<const TextContent> weak_content, dcpomatic::ContentTime subtitle_from ) const; - /** Mutex to protect the most of the Player state. When it's used for the preview we have - seek() and pass() called from the Butler thread and lots of other stuff called - from the GUI thread. + /** Mutex to protect the player state that is not using std::atomic. + * When the player is used for the preview we have seek() and pass() + * called from the Butler thread and lots of other stuff called + * from the GUI thread. */ mutable boost::mutex _mutex; @@ -192,36 +193,36 @@ private: std::shared_ptr<const Playlist> _playlist; /** > 0 if we are suspended (i.e. pass() and seek() do nothing) */ - boost::atomic<int> _suspended; + std::atomic<int> _suspended; std::vector<std::shared_ptr<Piece>> _pieces; /** Size of the image we are rendering to; this may be the DCP frame size, or * the size of preview in a window. */ - boost::atomic<dcp::Size> _video_container_size; + std::atomic<dcp::Size> _video_container_size; mutable boost::mutex _black_image_mutex; std::shared_ptr<Image> _black_image; /** true if the player should ignore all video; i.e. never produce any */ - boost::atomic<bool> _ignore_video; - boost::atomic<bool> _ignore_audio; + std::atomic<bool> _ignore_video; + std::atomic<bool> _ignore_audio; /** true if the player should ignore all text; i.e. never produce any */ - boost::atomic<bool> _ignore_text; - boost::atomic<bool> _always_burn_open_subtitles; + std::atomic<bool> _ignore_text; + std::atomic<bool> _always_burn_open_subtitles; /** true if we should try to be fast rather than high quality */ - boost::atomic<bool> _fast; + std::atomic<bool> _fast; /** true if we should keep going in the face of `survivable' errors */ bool _tolerant; /** true if we should `play' (i.e output) referenced DCP data (e.g. for preview) */ - boost::atomic<bool> _play_referenced; + std::atomic<bool> _play_referenced; /** Time of the next video that we will emit, or the time of the last accurate seek */ boost::optional<dcpomatic::DCPTime> _next_video_time; /** 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; + boost::optional<int> _dcp_decode_reduction; EnumIndexedVector<std::pair<std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime>, Eyes> _last_video; @@ -250,7 +251,7 @@ private: std::shared_ptr<AudioProcessor> _audio_processor; bool _disable_audio_processor = false; - boost::atomic<dcpomatic::DCPTime> _playback_length; + std::atomic<dcpomatic::DCPTime> _playback_length; /** Alignment for subtitle images that we create */ Image::Alignment _subtitle_alignment = Image::Alignment::PADDED; diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index d3315a722..05c2a7e9e 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -730,12 +730,12 @@ Playlist::speed_up_range(int dcp_video_frame_rate) const } if (i->video_frame_rate()) { FrameRateChange const frc(i->video_frame_rate().get(), dcp_video_frame_rate); - range.first = min(range.first, frc.speed_up); - range.second = max(range.second, frc.speed_up); + range.first = min(range.first, frc.speed_up()); + range.second = max(range.second, frc.speed_up()); } else { FrameRateChange const frc(dcp_video_frame_rate, dcp_video_frame_rate); - range.first = min(range.first, frc.speed_up); - range.second = max(range.second, frc.speed_up); + range.first = min(range.first, frc.speed_up()); + range.second = max(range.second, frc.speed_up()); } } diff --git a/src/lib/po/cs_CZ.po b/src/lib/po/cs_CZ.po index 5bb0feaac..406b0d1fd 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+0200\n" "PO-Revision-Date: 2025-06-10 15:13+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.6\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "Snímková frekvence obsahu %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "Oříznout na {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "Poměr stran displeje %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "Vyplněné černou, aby se zmenšil do kontejneru {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -63,7 +63,7 @@ msgstr "" "\n" "Měřítko {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -103,7 +103,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", poměr stran obrazových bodů %.2f:1" @@ -176,7 +176,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "3D denoiser" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -228,7 +228,7 @@ msgstr "" "a><li><a href=\"https://dcpomatic.com/donate_amount?amount=10\">Přejít na " "Paypal a darovat€10</a></ul><p>Mockrát děkuji!</font>" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -256,7 +256,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "Reklama" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -267,7 +267,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:157 +#: src/lib/hints.cc:160 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 " @@ -290,24 +290,24 @@ msgstr "Analýza zvuku" msgid "Analysing subtitles" msgstr "Analýza titulků" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 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:495 +#: src/lib/hints.cc:490 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." @@ -315,7 +315,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:497 +#: src/lib/hints.cc:492 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -323,7 +323,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -331,7 +331,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:631 +#: src/lib/hints.cc:648 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -339,7 +339,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:636 +#: src/lib/hints.cc:653 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." @@ -347,7 +347,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:707 +#: src/lib/hints.cc:724 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 " @@ -680,7 +680,7 @@ 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Video je {}x{}" @@ -821,7 +821,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML titulky" @@ -829,7 +829,12 @@ msgstr "DCP XML titulky" msgid "DCP sample rate" msgstr "Snímková frekvence DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP bude používat každý druhý frame obsahu \n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP bude běžet na %.1f%% obsahu videa.\n" @@ -924,11 +929,11 @@ msgstr "Stahování selhalo ({} error {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Každý frame bude zdvojený v DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Každý frame bude opakovaný {} krát v DCP.\n" @@ -977,11 +982,11 @@ msgstr "Chyba: {}" msgid "Event" msgstr "Událost" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "Zkoumání zvuku" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Zkoumání zvuku, titulků a skrytých titulků" @@ -993,7 +998,7 @@ msgstr "Zkoumání obsahu" msgid "Examining subtitles" msgstr "Zkoumání titulků" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Zkoumání titulků a skrytých titulků" @@ -1147,11 +1152,11 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 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 " @@ -1161,7 +1166,7 @@ msgstr "" "používat Interop. Je vhodné nastavit váš DCP tak, aby používal standard " "SMPTE v záložce „DCP“." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1207,7 +1212,7 @@ msgstr "Left rear surround (Levý zadní surround)" msgid "Left surround" msgstr "Left surround (Levý surround)" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Délka" @@ -1395,7 +1400,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1514,7 +1519,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1580,7 +1585,7 @@ msgstr "Short (Krátky film)" msgid "Sign" msgstr "Podepsat" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Velikost" @@ -1627,7 +1632,7 @@ msgstr "" "Tyto soubory budou nyní znovu přezkoumány, takže bude pravděpodobně nutné " "zkontrolovat jejich nastavení." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1636,7 +1641,7 @@ msgstr "" "Některé ze skrytých titulků jsou rozloženy na více než {} řádcích, takže " "budou zkráceny." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1646,7 +1651,7 @@ msgstr "" "nastavit jazyk zvuku na kartě „DCP“, pokud váš zvuk neobsahuje žádné mluvené " "části." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1667,7 +1672,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1736,7 +1741,7 @@ msgstr "Řetěz certifikátů pro podepisování je neplatný" msgid "The certificate chain for signing is invalid ({})" msgstr "Řetěz certifikátů pro podepisování je neplatný ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1751,7 +1756,7 @@ msgstr "" "tlačítko „Re-make certificates and key...“ (Znovu vytvořit certifikáty a " "klíče...) na stránce Keys (Klíče) v okně Preferences (Předvolby)." -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1806,7 +1811,7 @@ msgstr "Soubor {} byl oříznut o {} milisekund méně." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Soubor {} byl oříznut o {} milisekund více." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1826,7 +1831,7 @@ msgstr "" "směru než dříve. Měli byste zkontrolovat všechny titulky ve svém projektu " "a ujistit se, že jsou umístěny tam, kde je chcete mít." -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1853,12 +1858,12 @@ 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:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "Tento KDM byl vytvořen pro {}, ale ne pro jeho listový certifikát." -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "Tento KDM nebyl vytvořen pro dešifrovací certifikát {}." @@ -2051,7 +2056,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Ještě další deinterlacing filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2062,7 +2067,7 @@ msgstr "" "není podporována všemi projektory. Doporučujeme změnit snímkovou frekvenci " "DCP na {} fps." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2073,7 +2078,7 @@ msgstr "" "není podporována všemi projektory. Možná budete chtít změnit snímkovou " "frekvenci na {} fps." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2081,7 +2086,7 @@ 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:322 +#: src/lib/hints.cc:325 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.)" @@ -2089,7 +2094,7 @@ 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:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2108,7 +2113,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:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2116,7 +2121,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:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2124,7 +2129,7 @@ msgstr "" "Zadali jste soubor písma, který je větší než 640kB. Pravděpodobně to může " "způsobit problémy při přehrávání." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2137,7 +2142,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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2150,7 +2155,7 @@ msgstr "" "Nezáleží na tom, zda má váš obsah méně kanálů, protože {} vyplní přídavky " "tichem." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2161,7 +2166,7 @@ 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:167 +#: src/lib/hints.cc:170 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." @@ -2169,7 +2174,7 @@ 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:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2198,7 +2203,7 @@ msgstr "[přesouvám obrázky]" msgid "[still]" msgstr "[stále]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[titulky]" @@ -2214,7 +2219,7 @@ msgstr "_reel{}" msgid "bits" msgstr "bity" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "spojení vypršelo" @@ -2270,22 +2275,22 @@ msgstr "nemohu číst ze souboru {} ({})" msgid "could not write to file {} ({})" msgstr "nemohu zapisovat do souboru {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "chyba při async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "chyba při async_connect: ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "chyba při async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "chyba při async_write ({})" @@ -2415,7 +2420,7 @@ msgstr "stále" msgid "unknown" msgstr "neznáme" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "video snímky" diff --git a/src/lib/po/da_DK.po b/src/lib/po/da_DK.po index 69e4894aa..03ac44501 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Indholds billedhastighed %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Beskåret til {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Skærmformat %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Udfyldt med sort for at tilpasse til container {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Skaleret til {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixel format %.2f:1" @@ -176,7 +176,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "3D-denoiser" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -214,7 +214,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -241,7 +241,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "Reklamer (ADV)" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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 +253,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:157 +#: src/lib/hints.cc:160 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -279,54 +279,54 @@ msgstr "Analyserer lyd" msgid "Analysing subtitles" msgstr "Undersøger undertekster" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -673,7 +673,7 @@ msgstr "Indhold der skal splejses skal bruge samme tekstningsstrøm." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Indholdsvideo er {}x{}" @@ -814,7 +814,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML undertekster" @@ -822,7 +822,12 @@ msgstr "DCP XML undertekster" msgid "DCP sample rate" msgstr "DCP sample rate" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP vil bruge hvert andet billede fra indholdet.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP vil køre ved %.1f%% af indholdshastigheden.\n" @@ -912,11 +917,11 @@ msgstr "Download fejlede ({} fejl {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Hvert billede i indholdet vil blive brugt to gange i DCP'en.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "" @@ -966,12 +971,12 @@ msgstr "Fejl: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Undersøger undertekster" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Undersøger billedtekster" @@ -984,7 +989,7 @@ msgstr "Undersøger indhold" msgid "Examining subtitles" msgstr "Undersøger undertekster" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Undersøger billedtekster" @@ -1141,18 +1146,18 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1196,7 +1201,7 @@ msgstr "Venstre bag surround" msgid "Left surround" msgstr "Venstre surround" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Længde" @@ -1388,7 +1393,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, fuzzy, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1507,7 +1512,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1570,7 +1575,7 @@ msgstr "Short" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Størrelse" @@ -1623,7 +1628,7 @@ msgstr "" "De bliver nu undersøgt igen, og det kan være nødvendigt at gennemse deres " "indstillinger bagefter." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1631,14 +1636,14 @@ msgid "" msgstr "" "Nogle af underteksterne er på mere end {} linjer, så de bliver beskåret." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1660,7 +1665,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1726,7 +1731,7 @@ msgstr "Certifikatkæden til signering er ugyldig" msgid "The certificate chain for signing is invalid ({})" msgstr "Certifikatkæden til signering er ugyldig ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1736,7 +1741,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1782,7 +1787,7 @@ msgstr "Filen {} er blevet trimmet {} millisekunder kortere." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Filen {} er blevet trimmet {} millisekunder længere." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1796,7 +1801,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1825,13 +1830,13 @@ 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:981 +#: src/lib/util.cc:961 #, fuzzy, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" "KDM var genereret til DCP-o-matic, men ikke til dens 'leaf' certifikat." -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, fuzzy, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "KDM var ikke genereret til DCP-o-matics dekrypterings certifikat." @@ -2020,7 +2025,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Endnu et Deinterlacing Filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2031,7 +2036,7 @@ msgstr "" "billedhastighed understøttes ikke af alle projektorer. Du rådes til at " "ændre DCP-billedhastigheden til {} fps." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2042,7 +2047,7 @@ msgstr "" "billedhastighed understøttes ikke af alle projektorer. Du rådes til at " "ændre billedhastigheden til {} fps." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2051,7 +2056,7 @@ msgstr "" "understøttes af alle projektorer. Vær opmærksom på at der kan opstå " "kompatibilitetsproblemer." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2059,7 +2064,7 @@ 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:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2077,14 +2082,14 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 #, 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:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2092,7 +2097,7 @@ msgstr "" "Du har valgt en font-fil der er større end 640 kB. Dette vil højst " "sandsynligt give problemer ved afspilningen." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2105,7 +2110,7 @@ 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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2114,7 +2119,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2122,7 +2127,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -2132,7 +2137,7 @@ msgstr "" "projektorer. Brug Flat eller Scope som DCPens indholdsformat, hvis det er " "muligt" -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2160,7 +2165,7 @@ msgstr "[levende billeder]" msgid "[still]" msgstr "[stillbillede]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[undertekster]" @@ -2176,7 +2181,7 @@ msgstr "_spole{}" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "forbindelsestimeout" @@ -2232,22 +2237,22 @@ msgstr "kunne ikke læse fra fil {} ({})" msgid "could not write to file {} ({})" msgstr "kunne ikke skrive til fil {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "fejl ved async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "fejl ved async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "fejl ved async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "fejl ved async_write ({})" @@ -2375,7 +2380,7 @@ msgstr "stille" msgid "unknown" msgstr "ukendt" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "videobilleder" diff --git a/src/lib/po/de_DE.po b/src/lib/po/de_DE.po index da338451b..6f2c276f1 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "Bildrate %.4f fps\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "Beschnitten zu {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "Anzeigeseitenverhältnis (DAR) %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "Mit Schwarz gefüllt auf Containerformat {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -63,7 +63,7 @@ msgstr "" "\n" "Skaliert auf {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -104,7 +104,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", Pixelseitenverhältnis %.2f:1" @@ -178,7 +178,7 @@ msgstr "2.39:1 (DCI Scope)" msgid "3D denoiser" msgstr "3D Rauschunterdrückung" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -232,7 +232,7 @@ msgstr "" "href=\"https://dcpomatic.com/donate_amount?amount=10\">Spende über Paypal " "£10</a></ul><p>Dankeschön!</font>" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -260,7 +260,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "Werbung - ADV" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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 +274,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:157 +#: src/lib/hints.cc:160 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -300,28 +300,28 @@ msgstr "Audio wird analysiert" msgid "Analysing subtitles" msgstr "Untertitel analysieren" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "Mindestens eine Ihrer Untertiteldateien ist grösser als " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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." @@ -330,7 +330,7 @@ msgstr "" "empfohlen, jede Untertitelzeile auf eine Länge von maximal 52 Zeichen zu " "beschränken." -#: src/lib/hints.cc:497 +#: src/lib/hints.cc:492 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -338,7 +338,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -346,7 +346,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:631 +#: src/lib/hints.cc:648 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -354,7 +354,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:636 +#: src/lib/hints.cc:653 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." @@ -363,7 +363,7 @@ msgstr "" "vorherigen Untertitel. Es ist ratsam, die Lücke zwischen Untertiteln auf " "mindestens 2 Frames zu vergrössern." -#: src/lib/hints.cc:707 +#: src/lib/hints.cc:724 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -727,7 +727,7 @@ msgstr "" "Zu verbindende Inhalte müssen die gleichen Zeichensätze für Untertitel " "verwenden." -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Inhalt Video ist {}x{}" @@ -868,7 +868,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML Untertitel" @@ -876,7 +876,12 @@ msgstr "DCP XML Untertitel" msgid "DCP sample rate" msgstr "Audio Abtastrate (angepasst für DCP/48KHz)" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP verwendet nur jedes zweite Bild des Quelle.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP läuft mit %.1f%% der Originalgeschwindigkeit der Quelle.\n" @@ -967,11 +972,11 @@ msgstr "Herunterladen fehlgeschlagen ({} Fehler {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Jedes Bild der Quelle wird im DCP verdoppelt.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Jedes Bild der Quelle wird {} mal im DCP wiederholt.\n" @@ -1020,12 +1025,12 @@ msgstr "Fehler: ({})" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Analysiere Untertitel" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Untersuche Closed Captions (CCAP)" @@ -1038,7 +1043,7 @@ msgstr "Inhalt wird überprüft" msgid "Examining subtitles" msgstr "Analysiere Untertitel" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Untersuche Closed Captions (CCAP)" @@ -1194,13 +1199,13 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1212,7 +1217,7 @@ msgstr "" "den SMPTE-Standard für das DCP zu setzen. Nutzen Sie dazu den \"DCP\" " "Tabreiter." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1259,7 +1264,7 @@ msgstr "Surround hinten links" msgid "Left surround" msgstr "Surround links" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Länge" @@ -1457,7 +1462,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, fuzzy, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1576,7 +1581,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1647,7 +1652,7 @@ msgstr "Kurzfilm - SHR" msgid "Sign" msgstr "Signatur" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Größe" @@ -1704,7 +1709,7 @@ msgstr "" "Diese Inhalte werden nun neu untersucht, ggfs. müssen Sie bei Änderungen " "deren typspezifische Einstellungen überprüfen!" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1713,7 +1718,7 @@ msgstr "" "Einige ihrer Closed Captions (CCAP) sind länger als {} Zeile(n). Sie werden " "abgeschnitten." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1723,7 +1728,7 @@ msgstr "" "festgelegt. Es ist ratsam, die Audio-Sprache im \"DCP\" Tabreiter zu setzen, " "außer Ihre Audiospuren haben keine gesprochenen Teile." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1745,7 +1750,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1812,7 +1817,7 @@ msgstr "Die Zertifikatskette für die Signatur ist ungültig" msgid "The certificate chain for signing is invalid ({})" msgstr "Die Zertifikatskette für Signaturen ist ungültig ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1822,7 +1827,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1872,7 +1877,7 @@ msgstr "Die Spur {} wurde um {} Millisekunden gekürzt." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Die Spur {} wurde um {} Millisekunden verlängert." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1886,7 +1891,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1916,14 +1921,14 @@ msgstr "" "32-Bit-Betriebssystem ausführen, versuchen Sie, die Anzahl der Rechen-" "Threads in den Voreinstellungen n zu reduzieren." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, fuzzy, c++-format msgid "This KDM was made for {} 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:979 +#: src/lib/util.cc:959 #, fuzzy, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -2123,7 +2128,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Und ein weiterer De-Interlacer ('YADIF')" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2135,7 +2140,7 @@ msgstr "" "abweichend von 24fps oder 48fps(3D) nicht leichtfertig! Ändern Sie die " "Bildrate gegebenenfalls in {} fps." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2147,7 +2152,7 @@ msgstr "" "abweichend von 24fps oder 48fps(3D) nicht leichtfertig! Ändern Sie die " "Bildrate gegebenenfalls in {} fps!" -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2156,7 +2161,7 @@ msgstr "" "nicht von allen Projektionssystemen unterstützt! Wählen Sie Bildraten " "abweichend von 24fps oder 48fps(3D) nicht leichtfertig!" -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2165,7 +2170,7 @@ msgstr "" "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:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2187,7 +2192,7 @@ msgstr "" "unterschiedliche Frame-Raten. Entfernen Sie die Inhalte, welche die " "unpassenden Frame-Raten haben." -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2196,7 +2201,7 @@ msgstr "" "nicht zulässig! Bitte entfernen Sie die Überlappung oder ändern Sie den DCP " "Wrapping Typ auf 'SMPTE'." -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2207,7 +2212,7 @@ msgstr "" "speziellen Zeichensatz angewiesen sind, googlen Sie nach 'TI Font " "Compressor' und verwenden Sie ggfs. dieses Tool zur Behebung des Problems." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2221,7 +2226,7 @@ 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:110 +#: src/lib/hints.cc:113 #, fuzzy, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2235,7 +2240,7 @@ msgstr "" "Audiokanäle haben, werden die nicht genutzten Audiokanäle automatisch mit " "Stille aufgefüllt." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2243,7 +2248,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2252,7 +2257,7 @@ msgstr "" "Projektionssystemen Probleme verursachen. Bitte verwenden Sie wann immer " "möglich Flat oder Scope Container." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2288,7 +2293,7 @@ msgstr "[Bewegte Bilder]" msgid "[still]" msgstr "[Standbild]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[Untertitel]" @@ -2304,7 +2309,7 @@ msgstr "_reel{}" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "Zeit für Verbindungsaufbau abgelaufen" @@ -2360,22 +2365,22 @@ msgstr "Datei {} konnte nicht gelesen werden ({})" msgid "could not write to file {} ({})" msgstr "Datei {} konnte nicht geschrieben werden ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "error during async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "error during async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "error during async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "error during async_write ({})" @@ -2527,7 +2532,7 @@ msgstr "Standbild" msgid "unknown" msgstr "unbekannt" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "Video Bilder" diff --git a/src/lib/po/el_GR.po b/src/lib/po/el_GR.po index 82705cdda..845004e7a 100644 --- a/src/lib/po/el_GR.po +++ b/src/lib/po/el_GR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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,42 +17,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" "Content frame rate %.4f\n" msgstr "" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" "Cropped to {}x{}" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" "Display aspect ratio %.2f:1" msgstr "" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" "Padded with black to fit container {} ({}x{})" msgstr "" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" "Scaled to {}x{}" msgstr "" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr "" @@ -82,7 +82,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr "" @@ -155,7 +155,7 @@ msgstr "" msgid "3D denoiser" msgstr "" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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,7 +193,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -216,7 +216,7 @@ msgstr "" msgid "Advertisement" msgstr "" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -224,7 +224,7 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -244,54 +244,54 @@ msgstr "" msgid "Analysing subtitles" msgstr "" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -614,7 +614,7 @@ msgstr "" msgid "Content to be joined must use the same text language." msgstr "" -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "" @@ -750,7 +750,7 @@ msgstr "" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "" @@ -758,7 +758,12 @@ msgstr "" msgid "DCP sample rate" msgstr "" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "" @@ -835,11 +840,11 @@ msgstr "" msgid "EC" msgstr "" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "" @@ -888,11 +893,11 @@ msgstr "" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -904,7 +909,7 @@ msgstr "" msgid "Examining subtitles" msgstr "" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "" @@ -1055,18 +1060,18 @@ msgstr "" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1110,7 +1115,7 @@ msgstr "" msgid "Left surround" msgstr "" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "" @@ -1293,7 +1298,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1409,7 +1414,7 @@ msgstr "" msgid "SMPTE 240M" msgstr "" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1471,7 +1476,7 @@ msgstr "" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "" @@ -1505,21 +1510,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1540,7 +1545,7 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1604,7 +1609,7 @@ msgstr "" msgid "The certificate chain for signing is invalid ({})" msgstr "" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1614,7 +1619,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1658,7 +1663,7 @@ msgstr "" msgid "The file {} has been trimmed by {} milliseconds more." msgstr "" -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1672,7 +1677,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1692,12 +1697,12 @@ msgid "" "tab of Preferences." msgstr "" -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -1875,7 +1880,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1883,7 +1888,7 @@ msgid "" "to {} fps." msgstr "" -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1891,19 +1896,19 @@ msgid "" "rate to {} fps." msgstr "" -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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:322 +#: src/lib/hints.cc:325 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 "" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -1917,19 +1922,19 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." msgstr "" -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -1940,7 +1945,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -1949,7 +1954,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -1957,13 +1962,13 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -1989,7 +1994,7 @@ msgstr "" msgid "[still]" msgstr "" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "" @@ -2005,7 +2010,7 @@ msgstr "" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "" @@ -2061,22 +2066,22 @@ msgstr "" msgid "could not write to file {} ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "" @@ -2199,7 +2204,7 @@ msgstr "" msgid "unknown" msgstr "" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "" diff --git a/src/lib/po/es_ES.po b/src/lib/po/es_ES.po index 6ac02b4e0..dcc644703 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Velocidad del contenido %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Recortado a {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Proporción de aspecto mostrada %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Completado con negro para cubrir el contenedor {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Redimensionado a {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", proporción de aspecto de pixel %.2f:1" @@ -176,7 +176,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "reducción de ruido 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -228,7 +228,7 @@ msgstr "" "Paypal para donar €20</a><li><a href=“https://dcpomatic.com/donate_amount?" "amount=10”>Ir a Paypal para donar€10</a></ul><p>¡Muchas gracias!" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -257,7 +257,7 @@ msgstr "ARIB STD-B67 ('Log-gamma híbrido')" msgid "Advertisement" msgstr "Publicidad" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -268,7 +268,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:157 +#: src/lib/hints.cc:160 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 " @@ -291,25 +291,25 @@ msgstr "Analizaando audio" msgid "Analysing subtitles" msgstr "Analizando subtítulos" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 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:495 +#: src/lib/hints.cc:490 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." @@ -317,7 +317,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:497 +#: src/lib/hints.cc:492 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -325,7 +325,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -333,7 +333,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:631 +#: src/lib/hints.cc:648 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -341,7 +341,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:636 +#: src/lib/hints.cc:653 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." @@ -349,7 +349,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:707 +#: src/lib/hints.cc:724 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -690,7 +690,7 @@ msgstr "Para unir contenido debe tener el mismo tipo de subtítulos." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "El video es {}x{}" @@ -831,7 +831,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "Subtítulos DCP XML" @@ -839,7 +839,12 @@ msgstr "Subtítulos DCP XML" msgid "DCP sample rate" msgstr "Velocidad del DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "El DCP usará una de cada dos imágenes de la fuente.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "El DCP se reproducirá al %.1f%% de la velocidad de la fuente.\n" @@ -928,11 +933,11 @@ msgstr "Descarga fallida ({} error {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Se doblará cada imagen en el DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Cada imagen será repetida otras {} veces en el DCP.\n" @@ -981,12 +986,12 @@ msgstr "Error: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Examinando subtítulos" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Examinando audio, subtítulos, abiertos y cerrados" @@ -998,7 +1003,7 @@ msgstr "Examinando contenido" msgid "Examining subtitles" msgstr "Examinando subtítulos" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Examinando subtítulos abiertos y cerrados" @@ -1152,11 +1157,11 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1167,7 +1172,7 @@ msgstr "" "importante para elegir Interop. Deberías elegir el standard SMPTE en la " "pestaña “DCP”." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1213,7 +1218,7 @@ msgstr "Surround trasero izquierda" msgid "Left surround" msgstr "Surround izquierda" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Duración" @@ -1406,7 +1411,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, fuzzy, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1525,7 +1530,7 @@ msgstr "SMPTE 2085, Y’D’zD’x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1592,7 +1597,7 @@ msgstr "Cortometraje" msgid "Sign" msgstr "Signo" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Tamaño" @@ -1641,7 +1646,7 @@ msgstr "" "\n" "Estos ficheros serán reexaminados ahora, necesitarás confirmar las opciones." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1649,7 +1654,7 @@ msgid "" msgstr "" "Algunos d los subtítulos cerrados tienen más de {} líneas, serán cortados." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1659,7 +1664,7 @@ msgstr "" "recomendable indicar la lengua del audio en la pestaña “DCP”, a menos que el " "audio no contenga texto hablado." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1681,7 +1686,7 @@ msgstr "Parte del contenido necesita una KDM" msgid "Some of your content needs an OV" msgstr "Parte del contenido necesita una OV" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1748,7 +1753,7 @@ msgstr "La cadena de certificados para firmar no es válida" msgid "The certificate chain for signing is invalid ({})" msgstr "La cadena de certificados para firmar no es válida ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1758,7 +1763,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1807,7 +1812,7 @@ msgstr "El fichero {} ha sido recortado en {} milisegundos." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "El fichero {} ha sido alargado con {} milisegundos." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1821,7 +1826,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1850,12 +1855,12 @@ 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:981 +#: src/lib/util.cc:961 #, fuzzy, c++-format msgid "This KDM was made for {} 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:979 +#: src/lib/util.cc:959 #, fuzzy, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -2050,7 +2055,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2061,7 +2066,7 @@ msgstr "" "soportada por todos los proyectores. Te recomendamos cambiar la velocidad a " "{} ips." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2072,7 +2077,7 @@ msgstr "" "soportada por todos los proyectores. Considera cambiar la velocidad a {} " "ips." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2081,7 +2086,7 @@ msgstr "" "todos los proyectores. Sé consciente de que puede haber problemas de " "compatibilidad." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2089,7 +2094,7 @@ 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:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2108,7 +2113,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:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2116,7 +2121,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:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2124,7 +2129,7 @@ msgstr "" "Has seleccionado una fuente de más de 640 Kb. Es muy posible que cause " "problemas en la reproducción." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2137,7 +2142,7 @@ 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:110 +#: src/lib/hints.cc:113 #, fuzzy, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2150,7 +2155,7 @@ msgstr "" "que el contenido tenga menos canales, DCP-o-matic añadirá silencio en los " "canales sin audio." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2158,7 +2163,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2167,7 +2172,7 @@ msgstr "" "algunos proyectores. Si es posible, utiliza Flat o Scope como contenedor " "DCP." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2195,7 +2200,7 @@ msgstr "[imágenes en movimiento]" msgid "[still]" msgstr "[imagen fija]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[subtítulos]" @@ -2211,7 +2216,7 @@ msgstr "_bobina{}" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "tiempo de conexión agotado" @@ -2267,22 +2272,22 @@ msgstr "no se pudo leer del fichero {} ({})" msgid "could not write to file {} ({})" msgstr "no se pudo escribir en el fichero {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "error durante async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "error durante async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "error durante async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "error durante async_write ({})" @@ -2417,7 +2422,7 @@ msgstr "imagen fija" msgid "unknown" msgstr "desconocido" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "fotogramas" diff --git a/src/lib/po/fa_IR.po b/src/lib/po/fa_IR.po index a2d78c768..636631b6f 100644 --- a/src/lib/po/fa_IR.po +++ b/src/lib/po/fa_IR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.5\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "تعداد فریم محتوا در ثانیه %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "بریده شد به {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "نسبت ابعاد صفحه نمایش %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "با نوار مشکی تا هم اندازه ظرف محتوا پوشیده شد {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -63,7 +63,7 @@ msgstr "" "\n" "تغییر مقیاس به {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -103,7 +103,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$نام_عملیات: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", نسبت ابعاد پیکسلها %.2f:1" @@ -176,7 +176,7 @@ msgstr "2/39(اسکوپ)" msgid "3D denoiser" msgstr "ضد نویز سه بعدی" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -231,7 +231,7 @@ msgstr "" "</a></ul><p>\n" "متشکرم! </font>" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -259,7 +259,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "تبلیغات بازرگانی" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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 +271,7 @@ msgstr "" "میگیرد. ممکن است ترجیح دهید ظرف دی سی پی را در زبانه \"دی سی پی\" بزرگتر و " "روی اسکوپ (2/39 به 1) قرار دهید." -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -294,24 +294,24 @@ msgstr "آنالیز صدا" msgid "Analysing subtitles" msgstr "آنالیز زیرنویس" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "حداقل یک نشانه در آخر پروژه قرار گرفته که از آن صرف نظر شد." -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "حداقل یکی از فایلهای زیرنویس شما بزرگتر است از " -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "حداقل یکی از قسمتهای XML فایلهای زیرنویس شما بزرگتر است از " -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "حداقل یکی از فایلهای زیرنویس شما بزرگتر است از " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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 +319,7 @@ msgstr "" "حداقل یکی از خطهای زیرنویس شما بیشتر از 52 حرف دارد. توصیه میشود طول هر خط " "را حداکثر به 52 حرف تغییر دهید." -#: src/lib/hints.cc:497 +#: src/lib/hints.cc:492 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 +327,7 @@ msgstr "" "حداقل یکی از خطهای زیرنویس شما بیش از 79 حرف دارد. شما باید طول هر خط را " "حداکثر به 79 حرف تغییر دهید." -#: src/lib/hints.cc:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -335,7 +335,7 @@ msgstr "" "حداقل یکی از زیرنویسهای شما بیش از 3 خط دارد. توصیه میشود بیش از سه خط " "استفاده نکنید." -#: src/lib/hints.cc:631 +#: src/lib/hints.cc:648 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 +343,7 @@ msgstr "" "حداقل یک زیرنویس وجود دارد که زمان آن کمتر از 15 فریم است. توصیه میشود زمان " "هر زیرنویس حداقل 15 فریم بر ثانیه باشد." -#: src/lib/hints.cc:636 +#: src/lib/hints.cc:653 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 +351,7 @@ msgstr "" "حداقل یکی از زیرنویسهای شما کمتر از 2 فریم بعد از زیرنویس قبلی شروع میشود. " "توصیه میشود زمان بین دو زیرنویس حداقل 2 فریم باشد." -#: src/lib/hints.cc:707 +#: src/lib/hints.cc:724 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 " @@ -680,7 +680,7 @@ msgstr "محتوایی که الحاق میشود باید رشته کد زیر msgid "Content to be joined must use the same text language." msgstr "محتوایی که الحاق میشود باید زبان نوشتاری مشابه داشته باشد." -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "محتوای ویدیو {}x{} است" @@ -821,7 +821,7 @@ msgstr "دی بی پی" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "زیرنویس های XML دی سی پی" @@ -829,7 +829,12 @@ msgstr "زیرنویس های XML دی سی پی" msgid "DCP sample rate" msgstr "نرخ نمونه دی سی پی" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "دی سی پی از هر فریم دیگر محتوا استفاده میکند.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "دی سی پی با %.1f%% سرعت محتوا اجرا خواهد شد.\n" @@ -924,11 +929,11 @@ msgstr "دانلود با خطا مواجه شد({} خطا{})" msgid "EC" msgstr "c" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "هر فریم محتوا در دی سی پی دوبرابر خواهد شد.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "هر فریم محتوا {}بار در دی سی پی تکرار خواهد شد.\n" @@ -977,11 +982,11 @@ msgstr "خطا: {}" msgid "Event" msgstr "رویداد" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "بررسی صدا" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "بررسی صدا، زیرنویس و فایل زیرنویس" @@ -993,7 +998,7 @@ msgstr "بررسی محتوا" msgid "Examining subtitles" msgstr "بررسی زیرنویس" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "بررسی فایل های زیرنویس" @@ -1146,13 +1151,13 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" "اگر از 25 فریم بر ثانیه استفاده میکنید استاندارد دی سی پی خود را به اس ام پی " "تی ای تغییر دهید." -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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 " @@ -1162,7 +1167,7 @@ msgstr "" "معینی برای استفاده از اینتروپ دارید. توصیه میشود که در زبانه \"دی سی پی\" " "استاندارد اس ام پی تی ای را برای دی سی پی خودتان انتخاب کنید." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1208,7 +1213,7 @@ msgstr "پشت سر- چپ سراوند" msgid "Left surround" msgstr "چپ سراوند" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "مدت" @@ -1399,7 +1404,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, fuzzy, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1518,7 +1523,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1584,7 +1589,7 @@ msgstr "کوتاه" msgid "Sign" msgstr "امضاء" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "اندازه" @@ -1629,7 +1634,7 @@ msgstr "" "\n" "این فایلها بررسی مجدد میشوند، ممکن است نیاز باشد تنظیمات آنها را کنترل کنید." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, fuzzy, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1637,7 +1642,7 @@ msgid "" msgstr "" "برخی از زیرنویسهای شما بیش از % 1 خطوط را شامل میشوند، بنابراین کوتاه میشوند." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1646,7 +1651,7 @@ msgstr "" "بخش از محتوای شما صدا دارد اما شما زبان آنرا تنظیم نکرده اید. توصیه میشود که " "زبان را در زبانه \"دی سی پی\" تنظیم کنید حتی اگرسکوت دارد." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1667,7 +1672,7 @@ msgstr "بخشی از محتوای شما نیازمند کلید است" msgid "Some of your content needs an OV" msgstr "بخشی از محتوای شما نیازمند یک نسخه اصلی است(OV)" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1732,7 +1737,7 @@ msgstr "زنجیره گواهینامه نامعتبر است" msgid "The certificate chain for signing is invalid ({})" msgstr "زنجیره گواهینامه نامعتبر است({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, fuzzy, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1746,7 +1751,7 @@ msgstr "" "اجرا نشوند. توصیه میشود با مراجعه به اولویتها در زبانه کلید توسط \"ساخت مجدد " "گواهی نامه و کلید..\" مجدد زنجیره گواهی نامه را ایجاد کنید." -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, fuzzy, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1798,7 +1803,7 @@ msgstr "فایل {} به مدت {} میلی ثانیه تنظیم وکوتاه msgid "The file {} has been trimmed by {} milliseconds more." msgstr "فایل {} به مدت {} میلی ثانیه تنظیم وبلند شد." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1818,7 +1823,7 @@ msgstr "" "بود. اما شما باید همه زیرنویسهای پروژه خود را برای اطمینان از جانمایی درست " "بررسی کنید." -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1845,12 +1850,12 @@ msgstr "" "میکنید سعی کنید تعداد رشته های رمزگذاری را از طریق زبانه کلی در اولویتها " "کاهش دهید." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, fuzzy, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "این کلید برای 1% ساخته شده اما نه برای گواهی برگ آن." -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, fuzzy, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "این کلید برای گواهی نامه 1% ساخته نشده است." @@ -2040,7 +2045,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "با این حال یک فیلتر ضد اینترلیس دیگر" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2051,7 +2056,7 @@ msgstr "" "پروژکتورها پشتیبانی نمیشود. توصیه میشود نرخ فریم دی سی پی را به {} فریم بر " "ثانیه تغییر دهید." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2062,7 +2067,7 @@ msgstr "" "پروژکتورها پشتیبانی نمیشود. ممکن است بخواهید نرخ فریم را به {} فریم بر ثانیه " "تغییر دهید." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2070,7 +2075,7 @@ msgstr "" "تنظیمات دی سی پی را روی 30 فریم بر ثانیه قرار داده اید که همه پروژکتورها " "قادر به نمایش آن نیستند. از این عدم سازگاری آگاه باشد." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2079,7 +2084,7 @@ msgstr "" "قرار است روی سیستم سه بعدی پلی شود تنظیم دی سی پی خود را روی سه بعدی قرار " "دهید(مانند Real-D، MasterImage، وغیره.)" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2098,7 +2103,7 @@ msgstr "" "شما بیش از یک محتوای اتمز دارید که نرخ فریم مشابهی ندارند. باید برخی از آنها " "را حذف کنید." -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2106,7 +2111,7 @@ msgstr "" "زیرنویسهای شما همپوشانی دارند، که در استاندارد اینتروپ مجاز نیست. استاندارد " "دی سی پی خود را به اس ام پی تی ای تغییر دهید." -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2114,7 +2119,7 @@ msgstr "" "یک فایل فونت با اندازه بزرگتر از 640 کیلوبایت مشخص شده است. به احتمال زیاد " "هنگام پلی فیلم مشکل ساز است." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2127,7 +2132,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "شما قبل از ساخت دی س پی باید به آن تعدادی محتوا اضافه کنید" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, fuzzy, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2140,7 +2145,7 @@ msgstr "" "محتوای شما تعداد کانال کمتری دارد مساله ای نیست، 1% کانالهای اضافه را با " "سکوت پر میکند." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2151,7 +2156,7 @@ msgstr "" "سنجی دی سی پی شما توسط دفاتر پخش با خطای کیفی مواجه شود. برای پرهیز از خطا، " "تعداد کانالهای دی سی پی خود را روی 8 یا 16 قرار دهید." -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2159,7 +2164,7 @@ msgstr "" "دی سی پی شما نسبت ابعاد تصویر نامتعارفی دارد. این ممکن در برخی پروژکتورها " "مشکل ایجاد کند. اگر ممکن است، از نسبت ابعاد تخت یا اسکوپ استفاده کنید." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2186,7 +2191,7 @@ msgstr "[تصاویر متحرک]" msgid "[still]" msgstr "[تصویرثابت]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[زیرنویسها]" @@ -2202,7 +2207,7 @@ msgstr "_حلقه{}" msgid "bits" msgstr "بیتها" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "زمان اتصال تمام شد" @@ -2258,22 +2263,22 @@ msgstr "نمیتوان از فایل خواند{}({})" msgid "could not write to file {} ({})" msgstr "نمیتوان در فایل نوشت{}({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "خطا در هنگام async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "خطا در هنگام async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "خطا در هنگام async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "خطا در هنگام async_write ({})" @@ -2405,7 +2410,7 @@ msgstr "تصویرثابت" msgid "unknown" msgstr "ناشناخته" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "فریم های ویدیو" diff --git a/src/lib/po/fr_FR.po b/src/lib/po/fr_FR.po index bd5f68789..2915dc9b5 100644 --- a/src/lib/po/fr_FR.po +++ b/src/lib/po/fr_FR.po @@ -7,17 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: DCP-o-matic FRENCH\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-22 22:52+0100\n" -"PO-Revision-Date: 2025-09-28 14:37+0200\n" +"POT-Creation-Date: 2026-04-19 23:03+0200\n" +"PO-Revision-Date: 2026-04-22 00:09+0200\n" "Last-Translator: Dan Cohen <thedan.cohen@protonmail.com>\n" "Language-Team: \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.7\n" +"X-Generator: Poedit 3.9\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Fréquence d'images du contenu %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Rogné à {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Rapport d'aspect de l'écran %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Ajout de bandes noires pour remplir le format image cible {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Mis à l'échelle à {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", rapport d'aspect des pixels %.2f:1" @@ -175,7 +175,7 @@ msgstr "2,39 (Scope)" msgid "3D denoiser" msgstr "Débruitage 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -202,7 +202,7 @@ msgid "; {} remaining; finishing at {}{}" msgstr "; {} restant ; fin prévue à {}{}" #: src/lib/analytics.cc:58 -#, fuzzy, c++-format +#, c++-format msgid "" "<h2>You have made {} DCPs with {}!</h2><img width=\"150\" height=\"193\" " "src=\"memory:me.jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl " @@ -220,16 +220,16 @@ msgstr "" "src=\"memory:me.jpg\" align=\"center\"><p>Bonjour. Je m'appelle Carl et je " "suis le développeur de {}. Je travaille sur ce logiciel pendant mon temps " "libre (avec l'aide d'une équipe bénévole de testeurs et de traducteurs) et " -"je le publie en tant que logiciel libre.<p>Si vous trouvez {} utile, merci " -"de penser à faire un don au projet. Une aide financière m'aidera à passer " -"plus de temps sur {} et à l'améliorer !<p><ul><li><a href=\"https://" +"je le publie en tant que logiciel libre.<p>Si vous trouvez {} utile, " +"n’hésitez pas à faire un don au projet. Une aide financière m'aidera à " +"passer plus de temps sur {} et à l'améliorer !<p><ul><li><a href=\"https://" "dcpomatic.com/donate_amount?amount=40\">Aller sur Paypal pour faire un don " "de 40€</a><li><a href=\"https://dcpomatic.com/donate_amount?" "amount=20\">Aller sur Paypal pour 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 !</p>" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -258,7 +258,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "Publicité" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -270,7 +270,7 @@ msgstr "" "Ajuster le conteneur de votre DCP en Scope (2,39:1) dans l'onglet \"DCP\", " "si vous voulez l'éviter." -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -293,24 +293,24 @@ msgstr "Analyse de l'audio" msgid "Analysing subtitles" msgstr "Analyse des sous-titres" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "Au moins un marqueur tombe après la fin du projet et sera ignoré." -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 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:495 +#: src/lib/hints.cc:490 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 +319,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:497 +#: src/lib/hints.cc:492 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 +327,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -335,7 +335,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:631 +#: src/lib/hints.cc:648 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 +343,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:636 +#: src/lib/hints.cc:653 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." @@ -352,7 +352,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:707 +#: src/lib/hints.cc:724 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 " @@ -444,7 +444,7 @@ msgstr "C" #: src/lib/exceptions.cc:196 #, c++-format msgid "CPL {} not found" -msgstr "" +msgstr "CPL {} non trouvé" #: src/lib/job.cc:657 msgid "Cancelled" @@ -476,6 +476,9 @@ msgid "" "Check the server settings in the TMS tab of preferences, or un-tick \"Upload " "DCP to TMS after creation\" if you do not want to upload your DCP." msgstr "" +"Vérifiez les paramètres du serveurs dans l’onglet des préférences TMS, ou " +"décochez «Téléverser le DCP vers TMS après la création» si vous ne voulez " +"pas téléverser votre DCP." #: src/lib/transcode_job.cc:106 msgid "Check their new settings, then try again." @@ -687,7 +690,7 @@ msgstr "Le contenu à joindre doit utiliser le même flux de sous-titres." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Le contenu vidéo est {}x{}" @@ -706,9 +709,8 @@ msgid "Copying DCPs to {}" msgstr "Copie des DCPs vers {}" #: src/lib/reel_writer.cc:194 -#, fuzzy msgid "Copying existing asset" -msgstr "Vérification des données d'image existantes" +msgstr "Copie des ressources existantes" #: src/lib/copy_to_drive_job.cc:58 #, c++-format @@ -828,7 +830,7 @@ msgstr "DCP" msgid "DCP (via {})" msgstr "DCP (via {})" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "Sous-titres XML de DCP" @@ -836,7 +838,12 @@ msgstr "Sous-titres XML de DCP" msgid "DCP sample rate" msgstr "Fréquence d'échantillonnage du DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "Le DCP utilisera une image sur {} du contenu.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "Le DCP sera lu à %.1f%% de la vitesse du contenu source.\n" @@ -927,15 +934,14 @@ msgstr "Échec du téléchargement (erreur {} {})" #. TRANSLATORS: this is an abbreviation for "end credits", shown next to the pair of markers #. "FFEC" and "LFEC" ({First, Last} Frame of End Credits) #: src/lib/layout_markers.cc:145 -#, fuzzy msgid "EC" -msgstr "C" +msgstr "EC" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Chaque image du contenu sera doublée dans le DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Chaque image de contenu sera répétée {} fois de plus dans le DCP.\n" @@ -986,11 +992,11 @@ msgstr "Erreur : {}" msgid "Event" msgstr "Événement" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "Examen de l'audio" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Examen de l'audio, des sous-titres et des sous-titres codés" @@ -1002,7 +1008,7 @@ msgstr "Examen du contenu" msgid "Examining subtitles" msgstr "Examen des sous-titres" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Examen des sous-titres et des sous-titres codés" @@ -1154,15 +1160,15 @@ msgstr "IEC61966-2-4" #. "FFOI" and "LFOI" ({First, Last} Frame of Intermission) #: src/lib/layout_markers.cc:142 msgid "IN" -msgstr "" +msgstr "IN" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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 en SMPTE." -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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 " @@ -1172,7 +1178,7 @@ 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1218,7 +1224,7 @@ msgstr "Ambiance arrière gauche" msgid "Left surround" msgstr "Ambiance gauche" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Durée" @@ -1264,9 +1270,8 @@ msgstr "Ls" #. TRANSLATORS: this is an abbreviation for "moving credits", shown next to the pair of markers #. "FFMC" and "LFMC" ({First, Last} Frame of Moving Credits) #: src/lib/layout_markers.cc:148 -#, fuzzy msgid "MC" -msgstr "C" +msgstr "MC" #: src/lib/mid_side_decoder.cc:39 msgid "Mid-side decoder" @@ -1312,12 +1317,11 @@ msgstr "Désentrelaceur à compensation de mouvement" #: src/lib/dcp_content.cc:212 msgid "No ASSETMAP or ASSETMAP.xml file found: is this a DCP?" -msgstr "" +msgstr "Aucun fichier ASSETMAP ou ASSETMAP.xml trouvé: est-ce un DCP?" #: src/lib/dcp_examiner.cc:115 -#, fuzzy msgid "No CPLs found in DCP" -msgstr "Aucune CPL trouvée dans le DCP." +msgstr "Aucune CPL trouvée dans le DCP" #: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." @@ -1403,17 +1407,17 @@ msgstr "Réduction de bruit par ondelettes" #: src/lib/colour_conversion.cc:293 msgid "P3 D60 (~6000K)" -msgstr "" +msgstr "P3 D60 (~6000K)" #: src/lib/colour_conversion.cc:292 msgid "P3 D65 (~6500K)" -msgstr "" +msgstr "P3 D65 (~6500K)" #: src/lib/colour_conversion.cc:291 msgid "P3 DCI (~6300K)" -msgstr "" +msgstr "P3 DCI (~6300K)" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1455,9 +1459,8 @@ msgstr "D" #. TRANSLATORS: this is an abbreviation for "ratings band", shown next to the pair of markers #. "FFOB" and "LFOB" ({First, Last} Frame of Band) #: src/lib/layout_markers.cc:136 -#, fuzzy msgid "RB" -msgstr "D" +msgstr "RB" #: src/lib/ffmpeg_content.cc:644 msgid "RGB / sRGB (IEC61966-2-1)" @@ -1532,7 +1535,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1548,9 +1551,8 @@ 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:660 -#, fuzzy msgid "SMPTE ST 2128, IPT-C2" -msgstr "SMPTE ST 428-1" +msgstr "SMPTE ST 2128, IPT-C2" #: src/lib/ffmpeg_content.cc:636 msgid "SMPTE ST 428-1" @@ -1599,7 +1601,7 @@ msgstr "Court métrage" msgid "Sign" msgstr "Signe" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Taille" @@ -1637,17 +1639,14 @@ msgstr "" "vérifier leurs paramètres." #: src/lib/check_content_job.cc:94 -#, fuzzy msgid "" "Some files must be re-examined due to a bug fix in DCP-o-matic. You may " "need to check their settings." msgstr "" -"Certains fichiers ont été modifiés depuis qu'ils ont été ajoutés au projet.\n" -"\n" -"Ces fichiers seront maintenant réexaminés, vous devrez donc peut-être " -"vérifier leurs paramètres." +"Certains fichiers doivent être re-examinés suite à la résolution d’un bug " +"dans DCP-o-matic. Vous devez vérifier leurs paramètres." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1656,7 +1655,7 @@ msgstr "" "Certaines de vos sous-titres codés font plus de {} lignes, ils seront donc " "tronqués." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1666,7 +1665,7 @@ msgstr "" "langue audio. Il est conseillé de définir la langue audio dans l'onglet " "\"DCP\", sauf si votre audio ne comporte pas de parties parlées." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1674,6 +1673,11 @@ msgid "" "in doubt, set everything (picture, sound and text) to be either encrypted or " "not." msgstr "" +"Une partie de votre contenu est chiffré, mais l’autre non. Même si certains " +"distributeurs (ex : Netflix) demandent des sous-titres non chiffrés (même si " +"le son et l’image le sont), d’autres pointeront des erreurs avec le DCP fait " +"depuis ce projet. Dans le doute, chiffrez tout ou rien (image, son et " +"texte)." #: src/lib/make_dcp.cc:69 msgid "Some of your content is missing" @@ -1687,7 +1691,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1723,9 +1727,8 @@ msgstr "Dimanche" #. TRANSLATORS: this is an abbreviation for "title credits", shown next to the pair of markers #. "FFTC" and "LFTC" ({First, Last} Frame of Title Credits) #: src/lib/layout_markers.cc:139 -#, fuzzy msgid "TC" -msgstr "C" +msgstr "TC" #: src/lib/dcp_content_type.cc:60 msgid "Teaser" @@ -1757,7 +1760,7 @@ msgstr "La chaîne de certificats pour la signature n'est pas valide" msgid "The certificate chain for signing is invalid ({})" msgstr "La chaîne de certificats pour la signature n'est pas valide ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1772,7 +1775,7 @@ msgstr "" "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:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1826,7 +1829,7 @@ msgstr "Le fichier {} a été raccourci de {} millisecondes." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Le fichier {} a été allongé de {} millisecondes." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1847,7 +1850,7 @@ msgstr "" "devriez 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:248 +#: src/lib/hints.cc:251 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 " @@ -1876,13 +1879,13 @@ 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:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" "Ce KDM a été fait pour {} mais pas pour son certificat d'entité finale." -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "Ce KDM n'a pas été fait pour le certificat de décryptage de {}." @@ -2065,17 +2068,17 @@ msgstr "YCOCG" #: src/lib/ffmpeg_content.cc:661 msgid "YCgCo-R, even addition" -msgstr "" +msgstr "YCg-Co-R, ajout pair" #: src/lib/ffmpeg_content.cc:662 msgid "YCgCo-R, odd addition" -msgstr "" +msgstr "YCg-Co-R, ajout impair" #: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2086,7 +2089,7 @@ msgstr "" "par tous les projecteurs. Nous vous conseillons de modifier la cadence " "d'images de votre DCP à {} ips." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2097,7 +2100,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 à {} ips." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2106,7 +2109,7 @@ msgstr "" "qui n'est pas supportée par tous les projecteurs. Attention à de probables " "problèmes de compatibilité." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2115,7 +2118,7 @@ msgstr "" "DCP sur 3D si vous souhaitez le projeter sur un système 3D (par exemple : " "Real-D, MasterImage, etc.)" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2135,7 +2138,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:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2143,7 +2146,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:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2151,7 +2154,7 @@ msgstr "" "Vous avez spécifié un fichier de police dont la taille est supérieure à " "640kB. Cela risque fort de poser des problèmes lors de la lecture." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2164,7 +2167,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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2177,7 +2180,7 @@ msgstr "" "canaux. Cela n'a pas d'importance si votre contenu a moins de canaux, car " "{} remplira les extras de silence." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2188,7 +2191,7 @@ msgstr "" "erreur lors de la vérification par votre distributeur. Sélectionnez 8 ou 16 " "canaux audio pour éviter cela." -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2197,7 +2200,7 @@ msgstr "" "problèmes sur certains projecteurs. Si possible, utilisez Flat ou Scope " "pour le ratio du DCP." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2229,7 +2232,7 @@ msgstr "[séquence d'images]" msgid "[still]" msgstr "[image fixe]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[sous-titres]" @@ -2245,7 +2248,7 @@ msgstr "_bobine{}" msgid "bits" msgstr "bits" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "la connexion a expiré" @@ -2301,22 +2304,22 @@ msgstr "impossible de lire depuis le fichier {} ({})" msgid "could not write to file {} ({})" msgstr "impossible d'écrire dans le fichier {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "erreur pendant async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "erreur pendant async_connect : ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "erreur pendant async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "erreur pendant async_write ({})" @@ -2416,7 +2419,6 @@ msgstr "nom" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " #: src/lib/dcp_content.cc:829 -#, fuzzy msgid "" "one of its closed caption reels has a non-zero entry point so it must be re-" "written." @@ -2450,7 +2452,7 @@ msgstr "fixe" msgid "unknown" msgstr "inconnu" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "images vidéo" diff --git a/src/lib/po/hu_HU.po b/src/lib/po/hu_HU.po index 87860dae9..93f2f7862 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Tartalom képkockaszáma %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Méretre vágva: {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Megjelenítési arány: %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Fekete kerettel körbekerítve, hogy beleférjen a {} ({}x{}) konténerbe." -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Skálázva a következő méretre: {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixel arány %.2f:1" @@ -175,7 +175,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "3D denoiser" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -227,7 +227,7 @@ msgstr "" "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:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -258,7 +258,7 @@ msgstr "ARIB STD-B67 (‘Hybrid log-gamma’)" msgid "Advertisement" msgstr "Advertisement" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -269,7 +269,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:157 +#: src/lib/hints.cc:160 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 " @@ -292,26 +292,26 @@ msgstr "Hang vizsgálata" msgid "Analysing subtitles" msgstr "Felirat vizsgálata" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "Legalább egy felirat nagyobb, mint " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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 +319,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:497 +#: src/lib/hints.cc:492 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 +327,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -335,7 +335,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:631 +#: src/lib/hints.cc:648 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 +343,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:636 +#: src/lib/hints.cc:653 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 +351,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:707 +#: src/lib/hints.cc:724 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -691,7 +691,7 @@ msgstr "" msgid "Content to be joined must use the same text language." msgstr "" -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "" @@ -830,7 +830,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML feliratok" @@ -838,7 +838,12 @@ msgstr "DCP XML feliratok" msgid "DCP sample rate" msgstr "" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "" @@ -927,11 +932,11 @@ msgstr "Letöltés közben hiba lépett fel ({} hiba {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "" @@ -980,12 +985,12 @@ msgstr "Hiba: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Feliratok vizsgálata" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Hang, feliratok és hangleíró feliratok vizsgálata" @@ -997,7 +1002,7 @@ msgstr "Tartalom vizsgálata" msgid "Examining subtitles" msgstr "Feliratok vizsgálata" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Feliratok és hangleíró feliratok vizsgálata" @@ -1150,18 +1155,18 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1205,7 +1210,7 @@ msgstr "Bal hátsó térhangzás" msgid "Left surround" msgstr "Bal térhangzás" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Hossz" @@ -1395,7 +1400,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, fuzzy, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1514,7 +1519,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1581,7 +1586,7 @@ msgstr "Short" msgid "Sign" msgstr "Aláírás" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Méret" @@ -1615,21 +1620,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1650,7 +1655,7 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1716,7 +1721,7 @@ msgstr "" msgid "The certificate chain for signing is invalid ({})" msgstr "" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1726,7 +1731,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1770,7 +1775,7 @@ msgstr "" msgid "The file {} has been trimmed by {} milliseconds more." msgstr "" -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1784,7 +1789,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1804,12 +1809,12 @@ msgid "" "tab of Preferences." msgstr "" -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -1987,7 +1992,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1995,7 +2000,7 @@ msgid "" "to {} fps." msgstr "" -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2003,19 +2008,19 @@ msgid "" "rate to {} fps." msgstr "" -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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:322 +#: src/lib/hints.cc:325 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 "" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2029,19 +2034,19 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." msgstr "" -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2052,7 +2057,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2061,7 +2066,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2069,13 +2074,13 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2101,7 +2106,7 @@ msgstr "[mozgó képek]" msgid "[still]" msgstr "[álló]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[felirat]" @@ -2117,7 +2122,7 @@ msgstr "_reel{}" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "időtúllépés csatlakozás közben" @@ -2173,22 +2178,22 @@ msgstr "hiba a fájlból olvasás közben {} ({})" msgid "could not write to file {} ({})" msgstr "hiba a fájlba írás közben {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "hiba a csatlakozás közben ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "hiba a csatlakozás közben ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "hiba az olvasás közben ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "hiba az írás közben ({})" @@ -2311,7 +2316,7 @@ msgstr "még" msgid "unknown" msgstr "ismeretlen" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "videó képkockái" diff --git a/src/lib/po/it_IT.po b/src/lib/po/it_IT.po index 0642acf7c..a1e4126d6 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Frequenza fotogrammi del contenuto %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Ritagliato a {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Rapporto schermo %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Aggiunto nero per adattare al contenitore {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Scalato a {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$NOME_LAVORO: $STATO_LAVORO" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", rapporto pixel %.2f:1" @@ -176,7 +176,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "Riduzione rumore 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -214,7 +214,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -241,7 +241,7 @@ msgstr "ARIB STD-B67 ('log-gamma ibrido')" msgid "Advertisement" msgstr "Pubblicità" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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 +253,7 @@ msgstr "" "Forse è preferibile impostare il contenitore DCP su Scope (2.39:1) nel tab " "\"DCP\"." -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -279,54 +279,54 @@ msgstr "Analizza l'audio" msgid "Analysing subtitles" msgstr "Trova sottotitoli" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -672,7 +672,7 @@ msgstr "Il contenuto da unire deve usare lo stesso flusso di sottotitoli." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Il contenuto video è {}x{}" @@ -814,7 +814,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML sottotitoli" @@ -822,7 +822,12 @@ msgstr "DCP XML sottotitoli" msgid "DCP sample rate" msgstr "DCP frequenza di campionamento" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "Il DCP utilizzerà ogni altro fotogramma del contenuto.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "Il DCP andrà al %.1f%% della velocità originale.\n" @@ -912,11 +917,11 @@ msgstr "Download fallito ({}/{} errore {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Ogni fotogramma del contenuto sarà duplicato nel DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Ogni fotogramma del contenuto sarà ripetuto {} più volte nel DCP.\n" @@ -965,12 +970,12 @@ msgstr "Errore: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Trova sottotitoli" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Esamino il contenuto" @@ -984,7 +989,7 @@ msgstr "Analisi contenuto" msgid "Examining subtitles" msgstr "Trova sottotitoli" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Esamino il contenuto" @@ -1142,18 +1147,18 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1197,7 +1202,7 @@ msgstr "Surround posteriore sinistro" msgid "Left surround" msgstr "Surround sinistro" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Lunghezza" @@ -1387,7 +1392,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1504,7 +1509,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1567,7 +1572,7 @@ msgstr "Corto" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Dimensione" @@ -1601,21 +1606,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1637,7 +1642,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1703,7 +1708,7 @@ msgstr "La catena del certificato per la firma non è valida" msgid "The certificate chain for signing is invalid ({})" msgstr "La catena del certificato per la firma non è valida ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1713,7 +1718,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1759,7 +1764,7 @@ msgstr "Il file {} é stato tagliato di {} millisecondi in meno." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Il file {} é stato tagliato di {} millisecondi in piú." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1773,7 +1778,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1803,12 +1808,12 @@ msgstr "" "operativo a 32 bit, provare a ridurre il numero di thread di codifica nella " "scheda Generale delle Preferenze." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -1999,7 +2004,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Altro filtro di deinterlacciamento" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2010,7 +2015,7 @@ msgstr "" "supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di " "creare un DCP SMPTE." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2021,7 +2026,7 @@ msgstr "" "supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di " "creare un DCP SMPTE." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 #, fuzzy msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " @@ -2031,7 +2036,7 @@ msgstr "" "supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di " "creare un DCP SMPTE." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2040,7 +2045,7 @@ msgstr "" "3D se vuoi vedere il contenuto su un vero sistema 3D (come Real-D, " "MasterImage, ecc.)" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2058,13 +2063,13 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2072,7 +2077,7 @@ msgstr "" "Hai specificato un font la cui dimensione supera i 640kB. Probabilmente ci " "saranno problemi nella riproduzione." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2085,7 +2090,7 @@ 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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2094,7 +2099,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2102,7 +2107,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -2112,7 +2117,7 @@ msgstr "" "causare problemi su alcuni proiettori. Se possibile, usa Flat o Scope come " "contenitore per il DCP" -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2144,7 +2149,7 @@ msgstr "[spostamento immagini]" msgid "[still]" msgstr "[fermo immagine]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[sottotitoli]" @@ -2160,7 +2165,7 @@ msgstr "" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "connessione scaduta" @@ -2216,22 +2221,22 @@ msgstr "Impossibile leggere dal file {} ({})" msgid "could not write to file {} ({})" msgstr "Impossibile scrivere il file {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "errore durante la connessione asincrona ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "errore durante la connessione asincrona ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "errore durante la lettura asincrona ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "errore durante la scrittura asincrona ({})" @@ -2361,7 +2366,7 @@ msgstr "fermo immagine" msgid "unknown" msgstr "sconosciuto" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "fotogrammi video" diff --git a/src/lib/po/ja_JP.po b/src/lib/po/ja_JP.po index d8d43a137..6ec5315d1 100644 --- a/src/lib/po/ja_JP.po +++ b/src/lib/po/ja_JP.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-02-15 21:03+0100\n" -"PO-Revision-Date: 2026-03-23 22:33+0900\n" +"PO-Revision-Date: 2026-04-25 20:27+0900\n" "Last-Translator: \n" "Language-Team: \n" "Language: ja_JP\n" @@ -33,7 +33,7 @@ msgid "" "Cropped to {}x{}" msgstr "" "\n" -"トリミング: {}x{}" +"切り抜きサイズ: {}x{}" #: src/lib/video_content.cc:467 #, c-format @@ -193,7 +193,7 @@ msgstr "; {} fps" #: src/lib/job.cc:633 msgid "; {} remaining; finishing at {}{}" -msgstr "" +msgstr "; 残り時間 {} ; 終了予定 {}{}" #: src/lib/analytics.cc:58 #, c-format @@ -210,17 +210,17 @@ msgid "" "href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to " "donate €10</a></ul><p>Thank you!</font>" msgstr "" -"<h2>{} を使用して {} 個の DCP を作成しました!</h2><img width=\"20%%\" " -"src=\"memory:me.jpg\" align=\"center\"><font size=\"+1\"><p>こんにちは。私は " -"Carl、{} の開発者です。私は空き時間に(テスターと翻訳者のボランティア チーム" -"の協力を得て){} の開発に取り組んでおり、フリー ソフトウェアとしてリリースし" -"ています。<p>{} が役に立つと思われる場合は、プロジェクトへの寄付をご検討くだ" -"さい。資金援助をしていただけると、{} の開発と改善にさらに時間を費やすことがで" -"きます。<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?" -"amount=40\">Paypal で €40 を寄付</a><li><a href=\"https://dcpomatic.com/" -"donate_amount?amount=20\">Paypal で €20 を寄付</a><li><a href=\"https://" -"dcpomatic.com/donate_amount?amount=10\">Paypal で €10 を寄付</a></ul><p>あり" -"がとうございます。</font>" +"<h2>{}を使用して{}個のDCPを作成しました!</h2><img width=\"20%%\" " +"src=\"memory:me.jpg\" align=\"center\"><font size=\"+1\"><p>こんにちは。私は" +"Carl、{}の開発者です。私は空き時間に(テスターと翻訳者のボランティア チームの" +"協力を得て){}の開発に取り組んでおり、フリー ソフトウェアとしてリリースしてい" +"ます。<p>{}が役に立つと思われる場合はプロジェクトへの寄付をご検討ください。資" +"金援助をしていただけると、{}の開発と改善にさらに時間を費やすことができます。" +"<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?amount=40\">Paypalで" +"€40 を寄付</a><li><a href=\"https://dcpomatic.com/donate_amount?" +"amount=20\">Paypal で €20 を寄付</a><li><a href=\"https://dcpomatic.com/" +"donate_amount?amount=10\">Paypal で €10 を寄付</a></ul><p>ありがとうございま" +"す。</font>" #: src/lib/hints.cc:176 msgid "" @@ -530,9 +530,8 @@ msgid "Colourspace" msgstr "カラースペース" #: src/lib/combine_dcp_job.cc:48 -#, fuzzy msgid "Combine DCPs" -msgstr "DCPを結合" +msgstr "複数のDCPを結合" #: src/lib/writer.cc:522 #, fuzzy @@ -563,12 +562,16 @@ msgid "Content to be joined must all have or not have audio" msgstr "結合するコンテンツはすべて音声付きまたは音声なしである必要があります" #: src/lib/ffmpeg_content.cc:152 +#, fuzzy msgid "Content to be joined must all have or not have subtitles or captions" msgstr "" +"参加するコンテンツは字幕またはキャプションがすべて付いているか、付いていない" +"かのいずれかである必要があります。" #: src/lib/ffmpeg_content.cc:146 +#, fuzzy msgid "Content to be joined must all have or not have video" -msgstr "" +msgstr "参加するコンテンツはすべて動画を含むか含まないかのいずれかである。" #: src/lib/text_content.cc:302 msgid "" @@ -610,7 +613,8 @@ msgstr "結合するコンテンツは同じ色変換になっている必要が #: src/lib/video_content.cc:215 msgid "Content to be joined must have the same crop." -msgstr "結合するコンテンツは同じトリミングである必要があります。" +msgstr "" +"結合するコンテンツは同じ切り抜き(クロップ)サイズである必要があります。" #: src/lib/video_content.cc:219 msgid "Content to be joined must have the same custom ratio setting." @@ -943,9 +947,8 @@ msgid "Email problem report for {}" msgstr "{} の問題レポートをメールで送信" #: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:134 -#, fuzzy msgid "Encoding" -msgstr "エンコード済" +msgstr "エンコード進捗" #: src/lib/dcp_content_type.cc:67 msgid "Episode" @@ -1330,7 +1333,7 @@ msgstr "OK" #: src/lib/job.cc:652 msgid "OK (ran for {} from {} to {})" -msgstr "" +msgstr "OK ( 処理時間 {} 、 開始時刻 {} 、 終了時刻 {} )" #: src/lib/job.cc:650 msgid "OK (ran for {})" @@ -1779,15 +1782,14 @@ msgid "The file {} has been trimmed by {} milliseconds more." msgstr "{}はさらにに{}ms短縮されました。" #: src/lib/hints.cc:267 -#, fuzzy 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 "" -"ヨーロッパ、オーストララシア、北米の映画館の大多数は、MPEG2ではなくJPEG2000で" -"エンコードされたDCPを想定しています。ご利用予定の映画館が本当に旧式のMPEG2 " -"DCPを必要としているかどうかを必ずご確認ください。" +"ヨーロッパ・オーストララシア・北米の映画館の大多数はMPEG2ではなくJPEG2000でエ" +"ンコードされたDCPを想定しています。ご利用予定の映画館が本当に旧式のMPEG2 DCP" +"を必要としているかどうかを必ずご確認ください。" #: src/lib/release_notes.cc:87 #, fuzzy @@ -2074,13 +2076,12 @@ msgstr "" "ンテンツの一部を削除する必要があります。" #: src/lib/hints.cc:612 -#, fuzzy msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -"字幕が重複していますが、これは相互運用可能なDCPでは許可されていません。DCP規" -"格をSMPTEに変更してください。" +"字幕が重複していますが、これはInterop DCPでは許可されていません。DCP規格を" +"SMPTEに変更してください。" #: src/lib/hints.cc:290 msgid "" @@ -2417,13 +2418,12 @@ msgstr "" "形式の可能性があります。" #: src/lib/film.cc:1829 -#, fuzzy msgid "" "{} 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 を OV として参照するために設定を変更する必要がありました。設定を確" -"認し、正しいことを確認してください。" +"{}はDCPをOVとして参照するために設定を変更する必要がありました。設定を確認し、" +"正しいことを確認してください。" #: src/lib/film.cc:1795 #, fuzzy diff --git a/src/lib/po/ko_KR.po b/src/lib/po/ko_KR.po index c8c4179f6..9ae621413 100644 --- a/src/lib/po/ko_KR.po +++ b/src/lib/po/ko_KR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+0200\n" "PO-Revision-Date: 2026-03-06 17:22+0900\n" "Last-Translator: \n" "Language-Team: \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.8\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "콘텐츠 프레임 레이트 %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "{}x{}로 크롭됨" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "디스플레이 화면 비율 %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "컨테이너 {} ({}x{})에 맞게 블랙 패딩 추가됨" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -63,7 +63,7 @@ msgstr "" "\n" "{}x{}로 스케일 조정됨" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -103,7 +103,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", 픽셀 화면 비율 %.2f:1" @@ -176,7 +176,7 @@ msgstr "2.39 (스코프)" msgid "3D denoiser" msgstr "3D 노이즈 제거기" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -227,7 +227,7 @@ msgstr "" "amount=20\">Paypal로 20€ 기부하기</a><li><a href=\"https://dcpomatic.com/" "donate_amount?amount=10\">Paypal로 10€ 기부하기</a></ul><p>감사합니다!</font>" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -255,7 +255,7 @@ msgstr "ARIB STD-B67 ('하이브리드 로그-감마')" msgid "Advertisement" msgstr "광고" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -266,7 +266,7 @@ msgstr "" "되어 있습니다. 이 경우 플랫 프레임 내에 레터박스가 생기게 됩니다. \"DCP\" 탭" "에서 컨테이너를 스코프(2.39:1)로 설정하는 것이 좋을 수 있습니다." -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -289,24 +289,24 @@ msgstr "오디오 분석" msgid "Analysing subtitles" msgstr "자막 분석" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "최소 하나의 마커가 프로젝트 종료 지점 이후에 위치하여 무시됩니다." -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "폐쇄 자막 파일 중 적어도 하나가 다음보다 큽니다: " -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "폐쇄 자막 파일의 XML 부분 중 적어도 하나가 다음보다 큽니다: " -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "자막 파일 중 적어도 하나가 다음보다 큽니다: " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 #, fuzzy msgid "" "At least one of your subtitle lines has more than 52 characters. It is " @@ -315,7 +315,7 @@ msgstr "" "자막 중 한 줄에 52자 이상이 포함되어 있습니다. 각 줄을 최대 52자 이내로 구성" "하는 것을 권장합니다." -#: src/lib/hints.cc:497 +#: src/lib/hints.cc:492 #, fuzzy msgid "" "At least one of your subtitle lines has more than 79 characters. You should " @@ -324,7 +324,7 @@ msgstr "" "자막 중 한 줄에 79자 이상이 포함되어 있습니다. 각 줄을 최대 79자 이내로 구성" "해야 합니다." -#: src/lib/hints.cc:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -332,7 +332,7 @@ msgstr "" "자막 중 3줄을 초과하는 것이 있습니다. 자막은 3줄 이내로 유지하는 것이 좋습니" "다." -#: src/lib/hints.cc:631 +#: src/lib/hints.cc:648 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -340,7 +340,7 @@ msgstr "" "하나 이상의 자막이 15프레임보다 짧게 표시됩니다. 각 자막은 최소 15프레임 이" "상 유지되도록 설정하는 것이 좋습니다." -#: src/lib/hints.cc:636 +#: src/lib/hints.cc:653 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." @@ -348,7 +348,7 @@ msgstr "" "하나 이상의 자막이 이전 자막 종료 후 2프레임 미만 간격으로 시작됩니다. 자막 " "사이의 간격은 최소 2프레임 이상으로 설정하는 것이 좋습니다." -#: src/lib/hints.cc:707 +#: src/lib/hints.cc:724 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -679,7 +679,7 @@ msgstr "결합할 콘텐츠는 동일한 자막 스트림을 사용해야 합니 msgid "Content to be joined must use the same text language." msgstr "결합할 콘텐츠는 동일한 텍스트 언어를 사용해야 합니다." -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "콘텐츠 비디오는 {}x{}입니다" @@ -823,7 +823,7 @@ msgstr "DCP" msgid "DCP (via {})" msgstr "DCP ({} 경유)" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML 자막" @@ -831,7 +831,12 @@ msgstr "DCP XML 자막" msgid "DCP sample rate" msgstr "DCP 샘플 레이트" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP에서 콘텐츠의 매 두 번째 프레임을 사용합니다.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP가 콘텐츠 속도의 %.1f%%로 재생됩니다.\n" @@ -926,11 +931,11 @@ msgstr "다운로드 실패 ({} 오류 {})" msgid "EC" msgstr "EC" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "DCP에서 각 콘텐츠 프레임이 두 번씩 반복됩니다.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "DCP에서 각 콘텐츠 프레임이 {}번 더 반복됩니다.\n" @@ -979,11 +984,11 @@ msgstr "오류: {}" msgid "Event" msgstr "이벤트" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "오디오 분석" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "오디오, 자막 및 폐쇄형 자막 분석" @@ -995,7 +1000,7 @@ msgstr "콘텐츠 분석" msgid "Examining subtitles" msgstr "자막 분석" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "자막 및 폐쇄형 자막 분석" @@ -1148,11 +1153,11 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "IN" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "25fps를 사용하는 경우 DCP 표준을 SMPTE로 변경해야 합니다." -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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 " @@ -1161,7 +1166,7 @@ msgstr "" "특별한 이유가 없다면 Interop 대신 SMPTE DCP를 제작하는 것이 권장됩니다. " "\"DCP\" 탭에서 표준을 SMPTE로 설정하십시오." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1207,7 +1212,7 @@ msgstr "좌측 후방 서라운드" msgid "Left surround" msgstr "좌측 서라운드" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "길이" @@ -1390,7 +1395,7 @@ msgstr "P3 D65 (~6500K)" msgid "P3 DCI (~6300K)" msgstr "P3 DCI (~6300K)" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1508,7 +1513,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1575,7 +1580,7 @@ msgstr "단편 (Short)" msgid "Sign" msgstr "사인" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "크기" @@ -1618,14 +1623,14 @@ msgstr "" "DCP-o-matic의 버그 수정으로 인해 일부 파일을 다시 분석해야 합니다. 파일 설정" "을 확인해 보십시오." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "폐쇄형 자막 중 일부가 {}줄을 초과하여 끝부분이 잘릴 수 있습니다." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1634,7 +1639,7 @@ msgstr "" "오디오가 포함된 콘텐츠가 있으나 오디오 언어가 설정되지 않았습니다. 대사가 없" "는 경우가 아니라면 \"DCP\" 탭에서 오디오 언어를 설정하는 것이 좋습니다." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1659,7 +1664,7 @@ msgstr "일부 콘텐츠에 KDM이 필요합니다" msgid "Some of your content needs an OV" msgstr "일부 콘텐츠에 OV가 필요합니다" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1727,7 +1732,7 @@ msgstr "서명용 인증서 체인이 유효하지 않습니다" msgid "The certificate chain for signing is invalid ({})" msgstr "서명용 인증서 체인이 유효하지 않습니다 ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1741,7 +1746,7 @@ msgstr "" "서 및 키 다시 만들기...\" 버튼을 클릭하여 인증서 체인을 재생성하는 것을 권장" "합니다." -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1794,7 +1799,7 @@ msgstr "파일 {}의 트리밍이 {}밀리초만큼 줄었습니다." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "파일 {}의 트리밍이 {}밀리초만큼 늘었습니다." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1812,7 +1817,7 @@ msgstr "" "일부 자막의 수직 오프셋 조절 방식이 이전과 반대 방향으로 변경되었습니다. 프" "로젝트 내의 자막 위치가 의도한 대로 배치되었는지 확인해 주십시오." -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1837,14 +1842,14 @@ msgstr "" "메모리가 부족합니다. 32비트 운영체제를 사용 중이라면 환경 설정의 '일반' 탭에" "서 인코딩 스레드 수를 줄여 보십시오." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" "이 KDM은 {}를 위해 제작되었으나 해당 단말 인증서(leaf certificate)를 위한 것" "이 아닙니다." -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "이 KDM은 {}의 복호화 인증서를 위해 제작되지 않았습니다." @@ -2034,7 +2039,7 @@ msgstr "YCgCo-R, 홀수 가산" msgid "Yet Another Deinterlacing Filter" msgstr "또 다른 디인터레이싱 필터 (YADIF)" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2044,7 +2049,7 @@ msgstr "" "DCP 프레임 레이트가 {} fps로 설정되어 있습니다. 이 레이트는 일부 프로젝터에" "서 지원되지 않을 수 있습니다. {} fps로 변경하는 것을 권장합니다." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2054,7 +2059,7 @@ msgstr "" "DCP 프레임 레이트가 {} fps로 설정되어 있습니다. 이 레이트는 일부 프로젝터에" "서 지원되지 않을 수 있으므로, {} fps로 변경하는 것을 고려해 보십시오." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2062,7 +2067,7 @@ msgstr "" "DCP 프레임 레이트가 30fps로 설정되어 있습니다. 이는 일부 프로젝터에서 지원되" "지 않으므로 호환성 문제가 발생할 수 있음에 유의하십시오." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2070,7 +2075,7 @@ msgstr "" "3D 콘텐츠를 사용 중이지만 DCP가 2D로 설정되어 있습니다. 3D 시스템(Real-D, " "MasterImage 등)에서 상영하려면 DCP를 3D로 설정하십시오." -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2089,7 +2094,7 @@ msgstr "" "프레임 레이트가 다른 여러 개의 Atmos 콘텐츠가 포함되어 있습니다. 일부 Atmos " "콘텐츠를 제거해야 합니다." -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2097,7 +2102,7 @@ msgstr "" "폐쇄형 자막이 겹쳐 있습니다. 이는 Interop DCP에서 허용되지 않으므로 DCP 표준" "을 SMPTE로 변경하십시오." -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2105,7 +2110,7 @@ msgstr "" "지정한 폰트 파일이 640kB를 초과합니다. 재생 시 문제가 발생할 가능성이 매우 높" "습니다." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2118,7 +2123,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "DCP를 제작하기 전에 콘텐츠를 추가해야 합니다" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2130,7 +2135,7 @@ msgstr "" "채널로 설정하는 것이 좋습니다. 콘텐츠 채널이 적더라도 {}에서 나머지를 무음으" "로 채웁니다." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2140,7 +2145,7 @@ msgstr "" "DCP 오디오 채널이 8 또는 16이 아닌 {}개입니다. 배급사 검수시 오류로 처리될 " "수 있으니 오디오 채널을 8 또는 16으로 설정하십시오." -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2148,7 +2153,7 @@ msgstr "" "DCP가 비표준 컨테이너 비율을 사용하고 있습니다. 일부 프로젝터에서 문제가 발" "생할 수 있으므로 가급적 플랫(Flat) 또는 스코프(Scope)를 사용하십시오." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2178,7 +2183,7 @@ msgstr "[동영상]" msgid "[still]" msgstr "[정지 영상]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[자막]" @@ -2194,7 +2199,7 @@ msgstr "_릴{}" msgid "bits" msgstr "비트" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "연결 시간 초과" @@ -2250,22 +2255,22 @@ msgstr "파일 {}에서 읽을 수 없습니다 ({})" msgid "could not write to file {} ({})" msgstr "파일 {}에 쓸 수 없습니다 ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "비동기 연결 중 오류 발생 ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "비동기 연결 중 오류 발생: ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "비동기 읽기 중 오류 발생 ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "비동기 쓰기 중 오류 발생 ({})" @@ -2394,7 +2399,7 @@ msgstr "스틸" msgid "unknown" msgstr "알 수 없음" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "비디오 프레임" diff --git a/src/lib/po/nl_NL.po b/src/lib/po/nl_NL.po index c1e1e1f1f..2981fcaa2 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: 2026-03-22 22:52+0100\n" -"PO-Revision-Date: 2026-03-23 13:14+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+0200\n" +"PO-Revision-Date: 2026-04-21 18:10+0200\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.8\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "Content frame rate %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "Bijgesneden naar {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "Weergave-beeldverhouding %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "Opgevuld met zwart om in container {} ({}x{}) te passen" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -63,7 +63,7 @@ msgstr "" "\n" "Geschaald naar {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -103,7 +103,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixel-beeldverhouding %.2f:1" @@ -176,7 +176,7 @@ msgstr "2,39:1 (Scope)" msgid "3D denoiser" msgstr "3D-ruisonderdrukking" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -229,7 +229,7 @@ msgstr "" "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:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -258,7 +258,7 @@ msgstr "ARIB STD-B67 ('Hybrid Log-Gamma')" msgid "Advertisement" msgstr "Advertisement" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -270,7 +270,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:157 +#: src/lib/hints.cc:160 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 " @@ -294,26 +294,26 @@ msgstr "Analyseren audio" msgid "Analysing subtitles" msgstr "Analyseren ondertitels" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 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:495 +#: src/lib/hints.cc:490 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 +321,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:497 +#: src/lib/hints.cc:492 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 +329,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -337,7 +337,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:631 +#: src/lib/hints.cc:648 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 +345,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:636 +#: src/lib/hints.cc:653 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 +353,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:707 +#: src/lib/hints.cc:724 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 " @@ -708,7 +708,7 @@ msgstr "Samen te voegen content moet dezelfde ondertitel-stream gebruiken." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Content-video is {}x{}" @@ -848,7 +848,7 @@ msgstr "DCP" msgid "DCP (via {})" msgstr "DCP (via {})" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML ondertitels" @@ -856,7 +856,12 @@ msgstr "DCP XML ondertitels" msgid "DCP sample rate" msgstr "DCP sample rate" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP zal 1 van elke {} frames van de content gebruiken.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP zal afspelen met %.1f%% van de content-snelheid.\n" @@ -950,11 +955,11 @@ msgstr "Download mislukt ({} fout {})" msgid "EC" msgstr "EC" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Elk content frame zal dubbel gebruikt worden in de DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Elk content frame zal {} keer herhaald worden in de DCP.\n" @@ -1003,11 +1008,11 @@ msgstr "Fout: {}" msgid "Event" msgstr "Event" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "Onderzoeken audio" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Onderzoeken audio, ondertitels en closed captions" @@ -1019,7 +1024,7 @@ msgstr "Onderzoeken content" msgid "Examining subtitles" msgstr "Onderzoeken ondertitels" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Onderzoeken ondertitels en closed captions" @@ -1173,13 +1178,13 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "IN" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 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 " @@ -1189,7 +1194,7 @@ 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1235,7 +1240,7 @@ msgstr "Achter surround links (BsL)" msgid "Left surround" msgstr "Links surround (Ls)" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Lengte" @@ -1428,7 +1433,7 @@ msgstr "P3 D65 (~6500K)" msgid "P3 DCI (~6300K)" msgstr "P3 DCI (~6300K)" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1546,7 +1551,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1612,7 +1617,7 @@ msgstr "Short" msgid "Sign" msgstr "Sign" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Grootte" @@ -1657,7 +1662,7 @@ msgstr "" "Sommige bestanden moeten opnieuw worden onderzocht vanwege een bugfix in DCP-" "o-matic. Het kan nodig zijn om hun instellingen te controleren." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1666,7 +1671,7 @@ msgstr "" "Een deel van uw closed captions heeft meer dan {} regels, dus worden ze " "afgekapt." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1676,7 +1681,7 @@ msgstr "" "ingesteld. Het is raadzaam om de audio-taal in te stellen in het \"DCP\"-" "tabblad, tenzij uw audio geen gesproken delen heeft." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1702,7 +1707,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1771,7 +1776,7 @@ msgstr "De certificaat-keten voor ondertekening is ongeldig" msgid "The certificate chain for signing is invalid ({})" msgstr "De certificaat-keten voor ondertekening is ongeldig ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1786,7 +1791,7 @@ msgstr "" "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:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1841,7 +1846,7 @@ msgstr "Van het bestand {} is {} milliseconden minder weggeknipt." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Van het bestand {} is {} milliseconden meer weggeknipt." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1862,7 +1867,7 @@ msgstr "" "ondertitels in uw project om er zeker van te zijn dat ze op de gewenste " "plaats staan." -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1891,12 +1896,12 @@ msgstr "" "threads te verminderen in het \"Algemeen\"-tabblad bij Voorkeuren als u een " "32-bits operating system draait." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "Deze KDM is gemaakt voor {} maar niet voor het leaf-certificaat." -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "Deze KDM is niet gemaakt voor het ontsleutelings-certificaat van {}." @@ -2088,7 +2093,7 @@ msgstr "YCgCo-R, oneven toevoeging" msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2099,7 +2104,7 @@ msgstr "" "wordt niet door alle projectoren ondersteund. U wordt geadviseerd om de DCP " "frame rate te wijzigen in {} fps." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2110,7 +2115,7 @@ msgstr "" "wordt niet door alle projectoren ondersteund. U kunt overwegen om de DCP " "frame rate te wijzigen in {} fps." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2119,7 +2124,7 @@ msgstr "" "wordt niet door alle projectoren ondersteund. Houd er rekening mee dat u " "compatibiliteitsproblemen kunt krijgen." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2127,7 +2132,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:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2147,7 +2152,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:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2155,7 +2160,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:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2163,7 +2168,7 @@ msgstr "" "U heeft een font-bestand gespecificeerd dat groter is dan 640kB. Dit zal " "zeer waarschijnlijk problemen bij het afspelen geven." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2176,7 +2181,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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2189,7 +2194,7 @@ msgstr "" "maakt niet uit of uw content minder kanalen heeft, {} vult de extra kanalen " "met stilte." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2201,7 +2206,7 @@ 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:167 +#: src/lib/hints.cc:170 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." @@ -2210,7 +2215,7 @@ msgstr "" "problemen geven met sommige projectoren. Gebruik, indien mogelijk, Flat of " "Scope voor de container-beeldverhouding van de DCP." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2241,7 +2246,7 @@ msgstr "[bewegende beelden]" msgid "[still]" msgstr "[stilstaand beeld]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[ondertitels]" @@ -2257,7 +2262,7 @@ msgstr "_reel{}" msgid "bits" msgstr "bits" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "time-out van verbinding" @@ -2313,22 +2318,22 @@ msgstr "kan niet lezen uit bestand {} ({})" msgid "could not write to file {} ({})" msgstr "kan niet schrijven naar bestand {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "fout tijdens async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "fout tijdens async_connect: ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "fout tijdens async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "fout tijdens async_write ({})" @@ -2461,7 +2466,7 @@ msgstr "stilstaand beeld" msgid "unknown" msgstr "onbekend" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "video frames" diff --git a/src/lib/po/pl_PL.po b/src/lib/po/pl_PL.po index 905cda145..8413e9aad 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -29,7 +29,7 @@ msgstr "" "\n" "Liczba kl/s pliku video %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -38,7 +38,7 @@ msgstr "" "\n" "Wykadrowany do {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -47,7 +47,7 @@ msgstr "" "\n" "Proporcje obrazu %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -56,7 +56,7 @@ msgstr "" "\n" "Dodane czarne pasy, aby dopasować do formatu {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -65,7 +65,7 @@ msgstr "" "\n" "Przeskalowany do {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -105,7 +105,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", proporcje piksela %.2f:1" @@ -179,7 +179,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "Odszumianie 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -232,7 +232,7 @@ msgstr "" "dcpomatic.com/donate_mount?amount=10\">Przejdź do PayPal i wpłać 10 EUR</a></" "ul><p>Dziękuję!" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -262,7 +262,7 @@ msgstr "ARIB STD-B67 ('Hybrydowa log-gamma')" msgid "Advertisement" msgstr "Reklama" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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 +274,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:157 +#: src/lib/hints.cc:160 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 " @@ -298,27 +298,27 @@ msgstr "Analizuję dźwięk" msgid "Analysing subtitles" msgstr "Analizuję napisy" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 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:495 +#: src/lib/hints.cc:490 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." @@ -326,7 +326,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:497 +#: src/lib/hints.cc:492 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -334,7 +334,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -342,7 +342,7 @@ msgstr "" "W pliku znajdują się napisy, które mają ponad 3 linie. Zaleca się użycie " "maksymalnie 3 linii." -#: src/lib/hints.cc:631 +#: src/lib/hints.cc:648 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -351,7 +351,7 @@ msgstr "" "obrazu. Zaleca się, aby każdy napis był widoczny co najmniej przez 15 " "klatek obrazu." -#: src/lib/hints.cc:636 +#: src/lib/hints.cc:653 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." @@ -359,7 +359,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:707 +#: src/lib/hints.cc:724 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -698,7 +698,7 @@ msgstr "Łączone pliki muszą używać tego samego źródła napisów." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Rozdzielczość pliku video {}x{}" @@ -839,7 +839,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "Napisy DCP XML" @@ -847,7 +847,12 @@ msgstr "Napisy DCP XML" msgid "DCP sample rate" msgstr "Liczba kl/s DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP będzie używał co drugiej klatki materiału.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP będzie odtwarzany z %.1f%% prędkości.\n" @@ -936,11 +941,11 @@ msgstr "Pobieranie nie powiodło się ({} błąd {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Każda klatka materiału zostanie zdublowana w DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Każda klatka materiału będzie powtórzona {} razy w DCP.\n" @@ -989,12 +994,12 @@ msgstr "Błąd: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Analizowanie napisów" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Sprawdzam audio, napisy i napisy kodowane" @@ -1006,7 +1011,7 @@ msgstr "Analizowanie materiału" msgid "Examining subtitles" msgstr "Analizowanie napisów" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Analizowanie napisów i napisów kodowanych" @@ -1161,11 +1166,11 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1176,7 +1181,7 @@ msgstr "" "użycie standardu Interlop jest uzasadnione. Zaleca się wybranie standardu " "SMPTE z zakładki „DCP” dla tego Projektu." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1222,7 +1227,7 @@ msgstr "Lewy tylny surround" msgid "Left surround" msgstr "Lewy surround" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Długość" @@ -1412,7 +1417,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, fuzzy, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1531,7 +1536,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1598,7 +1603,7 @@ msgstr "Krótkometrażowy" msgid "Sign" msgstr "Podpis" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Rozdzielczość" @@ -1642,7 +1647,7 @@ msgstr "" "\n" "Pliki te zostaną ponownie zbadane, sprawdź ustawienia." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1651,7 +1656,7 @@ msgstr "" "Niektóre z napisów dzielą się na więcej niż {} linii, dlatego zostaną " "przycięte." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1661,7 +1666,7 @@ msgstr "" "języka. Zaleca się, aby określić język dźwięku w zakładce „DCP”, chyba że " "materiał nie posiada dialogów." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1683,7 +1688,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1751,7 +1756,7 @@ msgstr "Certyfikat jest nieprawidłowy" msgid "The certificate chain for signing is invalid ({})" msgstr "Certyfikat jest nieprawidłowy ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1761,7 +1766,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1810,7 +1815,7 @@ msgstr "Długość pliku {} została skrócona o {} milisekund." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Długość pliku {} została wydłużona o {} milisekund." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1824,7 +1829,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1852,14 +1857,14 @@ 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:981 +#: src/lib/util.cc:961 #, fuzzy, c++-format msgid "This KDM was made for {} 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:979 +#: src/lib/util.cc:959 #, fuzzy, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -2054,7 +2059,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "I jeszcze jeden filtr usuwania przeplotu" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2065,7 +2070,7 @@ msgstr "" "obsługiwana przez wszystkie projektory. Zaleca się zmianę liczby klatek/s " "na wartość {} FPS." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2076,7 +2081,7 @@ msgstr "" "obsługiwana przez wszystkie projektory. Rozważ zmianę liczby klatek/s na " "wartość {} FPS." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2085,7 +2090,7 @@ msgstr "" "przez wszystkie projektory. Paczka może nie być kompatybilna ze wszystkimi " "systemami." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2094,7 +2099,7 @@ msgstr "" "opcje DCP na 3D, jeśli chcesz odtwarzać go na systemach 3D (jak Real-D, " "MasterImage itd.)" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2114,7 +2119,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:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2122,7 +2127,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:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2130,7 +2135,7 @@ msgstr "" "Wskazana przez ciebie czcionka ma rozmiar większy niż 640kB. " "Najprawdopodobniej spowoduje to problemy podczas odtwarzania." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2143,7 +2148,7 @@ 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:110 +#: src/lib/hints.cc:113 #, fuzzy, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2156,7 +2161,7 @@ msgstr "" "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:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2164,7 +2169,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2173,7 +2178,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:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2205,7 +2210,7 @@ msgstr "[ruchome obrazy]" msgid "[still]" msgstr "[stopklatka]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[napisy]" @@ -2221,7 +2226,7 @@ msgstr "_rolka{}" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "przekroczenie limitu czasu połączenia" @@ -2277,22 +2282,22 @@ msgstr "nie udało się odczytać pliku {} ({})" msgid "could not write to file {} ({})" msgstr "nie udało się zapisać do pliku {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "wystąpił błąd podczas async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "wystąpił błąd podczas async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "wystąpił błąd podczas async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "wystąpił błąd podczas async_write ({})" @@ -2427,7 +2432,7 @@ msgstr "stopklatka" msgid "unknown" msgstr "nieznany" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "klatki obrazu" diff --git a/src/lib/po/pt_BR.po b/src/lib/po/pt_BR.po index 02e6eb82f..7e7779402 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Taxa de quadros do conteúdo %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Redimensionado para {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Proporções de exibição %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Preenchido com barras pretas {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Redimensionado para {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", aspect ratio do pixel %.2f:1" @@ -176,7 +176,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "Redutor de ruído 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -214,7 +214,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -242,7 +242,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "Comercial" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -254,7 +254,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:157 +#: src/lib/hints.cc:160 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -281,54 +281,54 @@ msgstr "Analisar áudio" msgid "Analysing subtitles" msgstr "Buscando legendas" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -692,7 +692,7 @@ msgstr "O conteúdo a ser concatenado deve usar a mesma faixa de legendas." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "O conteúdo tem {}x{}" @@ -834,7 +834,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "Legendas XML do DCP" @@ -842,7 +842,12 @@ msgstr "Legendas XML do DCP" msgid "DCP sample rate" msgstr "Taxa de quadros do DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "O DCP vai utilizar frames intercalados do conteúdo.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "O DCP vai ser exibido a %.1f%% da velocidade do conteúdo.\n" @@ -932,11 +937,11 @@ msgstr "Download falhou ({}/{} erro {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Cada quadro do conteúdo será duplicado no DCP\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Cada quadro do conteúdo será repetido {} vezes no DCP\n" @@ -985,12 +990,12 @@ msgstr "Erro: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Buscando legendas" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -1004,7 +1009,7 @@ msgstr "Examinar conteúdo" msgid "Examining subtitles" msgstr "Buscando legendas" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Buscando legendas" @@ -1162,18 +1167,18 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1217,7 +1222,7 @@ msgstr "Surround traseiro esquerdo" msgid "Left surround" msgstr "Surround esquerdo" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Duração" @@ -1406,7 +1411,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1523,7 +1528,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1586,7 +1591,7 @@ msgstr "Curta-metragem" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Tamanho" @@ -1620,21 +1625,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1658,7 +1663,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1724,7 +1729,7 @@ msgstr "A cadeia de certificado para assinatura é inválida" msgid "The certificate chain for signing is invalid ({})" msgstr "A cadeia de certificado para assinatura é inválida ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1734,7 +1739,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1780,7 +1785,7 @@ msgstr "O arquivo {} foi cortado por {} milissegundos a menos." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "O arquivo {} foi cortado por {} milissegundos a mais." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1794,7 +1799,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1817,12 +1822,12 @@ 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:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -2014,7 +2019,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter (YADIF)" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2025,7 +2030,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:192 +#: src/lib/hints.cc:195 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2036,7 +2041,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:202 +#: src/lib/hints.cc:205 #, fuzzy msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " @@ -2046,7 +2051,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:322 +#: src/lib/hints.cc:325 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.)" @@ -2055,7 +2060,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:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2069,13 +2074,13 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2083,7 +2088,7 @@ msgstr "" "Você especificou um arquivo de fonte que tem mais de 640kB. Isso muito " "provavelmente causará problemas na reprodução." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2097,7 +2102,7 @@ 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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2106,7 +2111,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2114,7 +2119,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -2124,7 +2129,7 @@ msgstr "" "alguns projetores. Se possível, use apenas Flat ou Scope nos formatos de " "container." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2155,7 +2160,7 @@ msgstr "[sequência de imagens]" msgid "[still]" msgstr "[imagem estática]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[legendas]" @@ -2171,7 +2176,7 @@ msgstr "" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "connect timed out" @@ -2227,22 +2232,22 @@ msgstr "não foi possível ler do arquivo {} ({})" msgid "could not write to file {} ({})" msgstr "não foi possível modificar o arquivo {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "erro durante async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "erro durante async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "erro durante async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "erro durante async_write ({})" @@ -2377,7 +2382,7 @@ msgstr "imagem estática" msgid "unknown" msgstr "desconhecido" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "quadros de vídeo" diff --git a/src/lib/po/pt_PT.po b/src/lib/po/pt_PT.po index 816ef8096..aa0060f1f 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, 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:477 +#: src/lib/video_content.cc:479 #, fuzzy, c++-format msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "Recortado para {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, fuzzy, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "Rácio do ecrã %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, fuzzy, c++-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "Preenchido com negro para caber no contentor {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, fuzzy, c++-format msgid "" "\n" @@ -63,7 +63,7 @@ msgstr "" "\n" "Redimensionado para {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr "" @@ -93,7 +93,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, fuzzy, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", rácio de pixeis %.2f:1" @@ -169,7 +169,7 @@ msgstr "" msgid "3D denoiser" msgstr "Remoção de ruído 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -207,7 +207,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -230,7 +230,7 @@ msgstr "" msgid "Advertisement" msgstr "Publicidade" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -238,7 +238,7 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -260,54 +260,54 @@ msgstr "Analizar áudio" msgid "Analysing subtitles" msgstr "À procura das legendas" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -659,7 +659,7 @@ msgstr "O conteúdo a ser unido deve usar o mesmo fluxo de legendas." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "O vídeo do conteúdo tem {}x{}" @@ -803,7 +803,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "Legendas XML DCP" @@ -812,7 +812,12 @@ msgstr "Legendas XML DCP" msgid "DCP sample rate" msgstr "Cadência de fotogramas do DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "O DCP usará todos os outros fotogramas do conteúdo.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "O DCP será reproduzido a %.1f%% da velocidade do conteúdo.\n" @@ -902,11 +907,11 @@ msgstr "O download falhou ({}/{} erro {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Cada fotograma do conteúdo será duplicado no DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Cada fotograma do conteúdo será repetido {} vezes no DCP.\n" @@ -955,12 +960,12 @@ msgstr "Erro: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "À procura das legendas" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 #, fuzzy msgid "Examining audio, subtitles and closed captions" msgstr "Examen du contenu" @@ -975,7 +980,7 @@ msgstr "Examinar conteúdo" msgid "Examining subtitles" msgstr "À procura das legendas" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Examen du contenu" @@ -1137,18 +1142,18 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1192,7 +1197,7 @@ msgstr "Esquerdo traseiro surround" msgid "Left surround" msgstr "Esquerdo surround" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Duração" @@ -1380,7 +1385,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1499,7 +1504,7 @@ msgstr "" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1564,7 +1569,7 @@ msgstr "Curta-metragem" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Tamanho" @@ -1598,21 +1603,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1633,7 +1638,7 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1698,7 +1703,7 @@ msgstr "A cadeia de certificação para assinatura é inválida" msgid "The certificate chain for signing is invalid ({})" msgstr "A cadeia de certificação para assinatura é inválida" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1708,7 +1713,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1754,7 +1759,7 @@ msgstr "" msgid "The file {} has been trimmed by {} milliseconds more." msgstr "" -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1768,7 +1773,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1791,12 +1796,12 @@ 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:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -1986,7 +1991,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1994,7 +1999,7 @@ msgid "" "to {} fps." msgstr "" -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2002,19 +2007,19 @@ msgid "" "rate to {} fps." msgstr "" -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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:322 +#: src/lib/hints.cc:325 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 "" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2028,19 +2033,19 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." msgstr "" -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2052,7 +2057,7 @@ 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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2061,7 +2066,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2069,13 +2074,13 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2101,7 +2106,7 @@ msgstr "[moving images]" msgid "[still]" msgstr "[still]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[subtitles]" @@ -2117,7 +2122,7 @@ msgstr "" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "Ligação expirou" @@ -2173,22 +2178,22 @@ msgstr "não foi possível ler do ficheiro {} ({})" msgid "could not write to file {} ({})" msgstr "não foi possível escrever para o ficheiro {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "erro durante conexão assíncrona ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "erro durante conexão assíncrona ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "erro durante leitura assíncrona ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "erro durante escrita assíncrona ({})" @@ -2317,7 +2322,7 @@ msgstr "imagem estática" msgid "unknown" msgstr "desconhecido" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "fotogramas de vídeo" diff --git a/src/lib/po/ru_RU.po b/src/lib/po/ru_RU.po index ee54ce3eb..d55497a90 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+0200\n" "PO-Revision-Date: 2025-06-08 20:12+0300\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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Частота кадров контента: %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Размер при кадрировании: {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Соотношение сторон экрана - %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Заполнено черным для подгонки под контейнер {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Масштаб: {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", соотношение сторон пикселя %.2f:1" @@ -175,7 +175,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "Подавитель шума 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -228,7 +228,7 @@ msgstr "" "donate_amount?amount=10\">Перейти в Paypal для пожертвования €10</a></" "ul><p>Благодарю вас!</font>" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -256,7 +256,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "ADV (Рекламный)" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -268,7 +268,7 @@ msgstr "" "Вы можете изменить формат контейнера DCP на SCOPE (2.39:1) на вкладке " "\"DCP\"." -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -292,26 +292,26 @@ msgstr "Анализ аудио" msgid "Analysing subtitles" msgstr "Анализ субтитров" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" "Найдены маркеры, установленные после окончания проекта. Они будут " "проигнорированы." -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "Найдены файлы с субтитрами CC, которые больше, чем " -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "Найдены файлы с субтитрами CC, XML-часть которых больше, чем " -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "Найдены файлы с субтитрами, которые больше, чем " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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 +319,7 @@ msgstr "" "Найдена строка субтитров, которая длиннее 52 символов. Рекомендуется " "ограничить длину всех строк до 52 символов." -#: src/lib/hints.cc:497 +#: src/lib/hints.cc:492 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 +327,7 @@ msgstr "" "Найдена строка субтитров, которая длиннее 79 символов. Вы должны ограничить " "длину всех строк до 79 символов." -#: src/lib/hints.cc:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -335,7 +335,7 @@ msgstr "" "Найдены субтитры из более трёх строк. Рекомендуется использовать не более " "трёх строк." -#: src/lib/hints.cc:631 +#: src/lib/hints.cc:648 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 +343,7 @@ msgstr "" "Найдены субтитры, продолжительность которых менее 15 кадров. Рекомендуется " "задать продолжительность для всех субтитров как минимум 15 кадров." -#: src/lib/hints.cc:636 +#: src/lib/hints.cc:653 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." @@ -352,7 +352,7 @@ msgstr "" "предыдущего. Рекомендуется задать промежуток между субтитрами как минимум 2 " "кадра." -#: src/lib/hints.cc:707 +#: src/lib/hints.cc:724 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 " @@ -696,7 +696,7 @@ msgstr "Весь добавляемый контент должен иметь msgid "Content to be joined must use the same text language." msgstr "Весь добавляемый контент должен иметь одинаковый язык текста." -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Разрешение контента: {}x{}" @@ -837,7 +837,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML субтитры" @@ -845,7 +845,12 @@ msgstr "DCP XML субтитры" msgid "DCP sample rate" msgstr "Частота кадров DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP будет использовать каждый второй кадр контента.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP будет воспроизводиться на %.1f%% от скорости контента.\n" @@ -942,11 +947,11 @@ msgstr "Ошибка загрузки ({} ошибка {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Каждый кадр контента будет дублирован в DCP-пакете.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "" @@ -996,11 +1001,11 @@ msgstr "Ошибка: ({})" msgid "Event" msgstr "Событие" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "Проверка звука" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Проверка аудио, открытых и скрытых субтитров" @@ -1012,7 +1017,7 @@ msgstr "Проверка контента" msgid "Examining subtitles" msgstr "Проверка субтитров" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Проверка субтитров" @@ -1167,13 +1172,13 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" "Если вы используете 25 кадр/сек, вам следует изменить стандарт вашего DCP на " "SMPTE." -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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 " @@ -1183,7 +1188,7 @@ msgstr "" "причины для использования Interop. Рекомендуется изменить стандарт DCP на " "SMPTE на вкладке \"DCP\"." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1229,7 +1234,7 @@ msgstr "LRS - Левый задний объёмный" msgid "Left surround" msgstr "LS - Левый объёмный" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Длительность" @@ -1417,7 +1422,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1536,7 +1541,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1603,7 +1608,7 @@ msgstr "SHR (Короткометражный фильм)" msgid "Sign" msgstr "Жест" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Размер" @@ -1650,7 +1655,7 @@ msgstr "" "Эти файлы сейчас будут перепроверены. Возможно, вам придётся проверить их " "настройки." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1659,7 +1664,7 @@ msgstr "" "Некоторые из ваших скрытых субтитров занимают более {} строк. Они будут " "обрезаны." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1668,7 +1673,7 @@ msgstr "" "Часть вашего контента содержит аудио, у которого не задан язык. Если ваше " "аудио содержит речь, то рекомендуется задать язык аудио на вкладке \"DCP\"." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1689,7 +1694,7 @@ msgstr "Часть вашего контента требует KDM" msgid "Some of your content needs an OV" msgstr "Часть вашего контента требует OV" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1758,7 +1763,7 @@ msgstr "Цепочка сертификатов для подписи невер msgid "The certificate chain for signing is invalid ({})" msgstr "Цепочка сертификатов для подписи неверна ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, fuzzy, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1773,7 +1778,7 @@ msgstr "" "сертификатов, нажав кнопку \"Переделать сертификаты и ключи...\" на странице " "настроек \"Ключи\"." -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, fuzzy, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1827,7 +1832,7 @@ msgstr "Файл {} был обрезан на {} миллисекунд мен msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Файл {} был обрезан на {} миллисекунд больше." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1848,7 +1853,7 @@ msgstr "" "обратном направлении, чем раньше. Вам следует проверить все субтитры в вашем " "проекте, чтобы убедиться, что они размещены там, где вы хотите." -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1876,12 +1881,12 @@ msgstr "" "попробуйте уменьшить число потоков кодирования в Настройках на вкладке " "\"Основные\"." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "Этот KDM был сделан для {}, но не для его конечного сертификата." -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "Этот KDM не был сделан для сертификата расшифровки {}." @@ -2073,7 +2078,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Фильтр деинтерлейсинга YADIF" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2084,7 +2089,7 @@ msgstr "" "не всеми проекторами. Рекомендуется изменить частоту кадров вашего DCP на {} " "кадр/сек." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2095,7 +2100,7 @@ msgstr "" "поддерживается не всеми проекторами. Возможно, вы захотите изменить частоту " "на {} кадр/сек." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2104,7 +2109,7 @@ msgstr "" "поддерживается не всеми проекторами. Учтите, что у вас могут быть проблемы " "совместимости." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2113,7 +2118,7 @@ msgstr "" "если хотите воспроизвести его на 3D-системе (напр. Real-D, MasterImage и " "т.п.)" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2133,7 +2138,7 @@ msgstr "" "Обнаружено несколько частей контента Atmos с разной частотой кадров. Вам " "нужно удалить часть контента Atmos." -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2141,7 +2146,7 @@ msgstr "" "Ваши скрытые субтитры содержат пересечения (overlap), которые не допускаются " "для Interop DCP. Измените ваш стандарт DCP на SMPTE." -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2149,7 +2154,7 @@ msgstr "" "Вы выбрали файл шрифта, размер которого больше 640 кБ. Весьма вероятно, что " "это вызовет проблемы при воспроизведении." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2162,7 +2167,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Вам необходимо добавить контент в DCP перед его созданием" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2175,7 +2180,7 @@ msgstr "" "Даже если у вас меньше каналов, {} автоматически заполнит недостающие " "тишиной." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, fuzzy, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2187,7 +2192,7 @@ msgstr "" "при проверке вашего DCP. Чтобы избежать этого, установите для аудиоканалов " "DCP значение 8 или 16." -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2196,7 +2201,7 @@ msgstr "" "привести к проблемам на некоторых проекторах. Если возможно, используйте " "соотношение сторон Flat или Scope для контейнера DCP." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2228,7 +2233,7 @@ msgstr "[движущийся]" msgid "[still]" msgstr "[статичный]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[субтитры]" @@ -2244,7 +2249,7 @@ msgstr "_reel{}" msgid "bits" msgstr "бит" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "таймаут соединения" @@ -2300,22 +2305,22 @@ msgstr "не удалось прочитать из файла {} ({})" msgid "could not write to file {} ({})" msgstr "не удалось записать в файл {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "ошибка во время async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "ошибка во время async_connect: ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "ошибка во время async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "ошибка во время async_write ({})" @@ -2447,7 +2452,7 @@ msgstr "статичный" msgid "unknown" msgstr "неизвестно" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "видеокадры" diff --git a/src/lib/po/sk_SK.po b/src/lib/po/sk_SK.po index 95b2e2363..0748a301d 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, fuzzy, c-format msgid "" "\n" @@ -27,7 +27,7 @@ msgstr "" "\n" "Snímacia frekvencia obsahu %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, fuzzy, c++-format msgid "" "\n" @@ -36,7 +36,7 @@ msgstr "" "\n" "Zmenšené na {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, fuzzy, c-format msgid "" "\n" @@ -45,7 +45,7 @@ msgstr "" "\n" "Pomer strán displeja %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, fuzzy, c++-format msgid "" "\n" @@ -54,7 +54,7 @@ msgstr "" "\n" "Vyplnené čiernou, aby sa zmestil do kontajnera {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, fuzzy, c++-format msgid "" "\n" @@ -63,7 +63,7 @@ msgstr "" "\n" "Zmenšené na {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr "" @@ -93,7 +93,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, fuzzy, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pomer strán obrazových bodov %.2f:1" @@ -169,7 +169,7 @@ msgstr "" msgid "3D denoiser" msgstr "3D denoiser" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -207,7 +207,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -230,7 +230,7 @@ msgstr "" msgid "Advertisement" msgstr "Reklama" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -238,7 +238,7 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -260,54 +260,54 @@ msgstr "Analyzovať zvuk" msgid "Analysing subtitles" msgstr "Hľadám titulky" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -655,7 +655,7 @@ msgstr "Aby sa spojil obsah, musí používať rovnaký titulkový stream." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Video je {}x{}" @@ -799,7 +799,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML titulky" @@ -808,7 +808,12 @@ msgstr "DCP XML titulky" msgid "DCP sample rate" msgstr "Snímacia frekvencia obsahu" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP bude používať každý druhý frame obsahu \n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP bude bežať na %.1f%% obsahu videa.\n" @@ -898,11 +903,11 @@ msgstr "Sťahovanie zlyhalo ({}/{} chyba {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Každý frame bude zdvojený v DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Každý frame bude opakovaný {} krát v DCP.\n" @@ -951,12 +956,12 @@ msgstr "Chyba: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Hľadám titulky" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -970,7 +975,7 @@ msgstr "Vypočítavam obsah" msgid "Examining subtitles" msgstr "Hľadám titulky" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Hľadám titulky" @@ -1133,18 +1138,18 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1188,7 +1193,7 @@ msgstr "Left rear surround (Ľavý zadný priestorový)" msgid "Left surround" msgstr "Left surround (Ľavý zadný)" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "" @@ -1374,7 +1379,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1493,7 +1498,7 @@ msgstr "" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1558,7 +1563,7 @@ msgstr "Short (Krátky film)" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "" @@ -1592,21 +1597,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1627,7 +1632,7 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1693,7 +1698,7 @@ msgstr "Reťaz certifikátov pre podpisovanie je neplatná" msgid "The certificate chain for signing is invalid ({})" msgstr "Reťaz certifikátov pre podpisovanie je neplatná" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1703,7 +1708,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1749,7 +1754,7 @@ msgstr "" msgid "The file {} has been trimmed by {} milliseconds more." msgstr "" -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1763,7 +1768,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1785,12 +1790,12 @@ 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:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -1978,7 +1983,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Len ďalší deinterlacing filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1986,7 +1991,7 @@ msgid "" "to {} fps." msgstr "" -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1994,19 +1999,19 @@ msgid "" "rate to {} fps." msgstr "" -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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:322 +#: src/lib/hints.cc:325 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 "" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2020,19 +2025,19 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." msgstr "" -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2044,7 +2049,7 @@ 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:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2053,7 +2058,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2061,13 +2066,13 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2093,7 +2098,7 @@ msgstr "[presúvam obrázky]" msgid "[still]" msgstr "[stále]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[titulky]" @@ -2109,7 +2114,7 @@ msgstr "" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "spojenie vypršalo" @@ -2165,22 +2170,22 @@ msgstr "nemôžem čítať zo súboru {} ({})" msgid "could not write to file {} ({})" msgstr "nemôžem zapisovať do súboru {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "chyba počas async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "chyba počas async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "chyba počas async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "chyba počas async_write ({})" @@ -2309,7 +2314,7 @@ msgstr "stále" msgid "unknown" msgstr "neznáme" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "video snímky" diff --git a/src/lib/po/sl_SI.po b/src/lib/po/sl_SI.po index c1d1c418f..7c7801f47 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Hitrost vsebine v sličicah %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Obrezano na {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Prikazano razmerje stranic %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Obdano s črnino, da se prilega vsebniku {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Velikost spremenjena na {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", razmerje stranic slikovne točke %.2f:1" @@ -175,7 +175,7 @@ msgstr "2,39 (široki/scope)" msgid "3D denoiser" msgstr "3D-razšumnik" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -227,7 +227,7 @@ 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:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -256,7 +256,7 @@ msgstr "ARIB STD-B67 (»Hibridna log-gama«)" msgid "Advertisement" msgstr "Oglas" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -268,7 +268,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:157 +#: src/lib/hints.cc:160 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 " @@ -292,24 +292,24 @@ msgstr "Analiziranje zvoka" msgid "Analysing subtitles" msgstr "Analiziranje podnaslovov" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 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:495 +#: src/lib/hints.cc:490 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." @@ -317,7 +317,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:497 +#: src/lib/hints.cc:492 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -325,7 +325,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -333,7 +333,7 @@ msgstr "" "Vsaj eden od vaših podnaslovov ima več kot 3 vrstice. Priporočljivo je " "uporabiti največ 3 vrstice." -#: src/lib/hints.cc:631 +#: src/lib/hints.cc:648 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -341,7 +341,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:636 +#: src/lib/hints.cc:653 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." @@ -349,7 +349,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:707 +#: src/lib/hints.cc:724 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 " @@ -699,7 +699,7 @@ msgstr "Vsebina, ki jo želite združiti, mora uporabljati isti tok podnaslovov. 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Video vsebine je {}x{}" @@ -840,7 +840,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "Podnaslovi DCP XML" @@ -848,7 +848,12 @@ msgstr "Podnaslovi DCP XML" msgid "DCP sample rate" msgstr "Mera vzorčenja DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP bo uporabil vsako drugo sličico vsebine.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP bo predvajan pri %.1f%% hitrosti vsebine.\n" @@ -937,11 +942,11 @@ msgstr "Prenos ni uspel ({} napaka {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Vsaka sličica vsebine bo podvojena v DCP.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Vsaka sličice vsebine bo v DCP {}-krat ponovljena1.\n" @@ -990,11 +995,11 @@ msgstr " Napaka: {}" msgid "Event" msgstr "Dogodek" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "Preučevanje zvoka" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Preučevanje zvoka, podnaslovov in zaprtih napisov" @@ -1006,7 +1011,7 @@ msgstr "Preučevanje vsebine" msgid "Examining subtitles" msgstr "Preučevanje podnaslovov" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Preučevanje podnaslovov in zaprtih napisov" @@ -1159,11 +1164,11 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 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 " @@ -1173,7 +1178,7 @@ msgstr "" "poseben razlog za uporabo Interop. Svetujemo, da vaš DCP uporablja standard " "SMPTE, kar določite na zavihku »DCP«." -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1219,7 +1224,7 @@ msgstr "Levo, zadaj, okolica" msgid "Left surround" msgstr "Levo, okolica" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Dolžina" @@ -1410,7 +1415,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1527,7 +1532,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1594,7 +1599,7 @@ msgstr "Kratki film" msgid "Sign" msgstr "Sign" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Velikost" @@ -1641,7 +1646,7 @@ msgstr "" "Te datoteke bodo zdaj ponovno pregledane, zato boste morda morali preveriti " "njihove nastavitve." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1649,7 +1654,7 @@ msgid "" msgstr "" "Nekateri vaši zaprti napisi segajo presegajo {} vrstic, zato bodo odrezani." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1659,7 +1664,7 @@ msgstr "" "Priporočljivo je nastaviti jezik zvočnega zapisa na zavihku »DCP«, razen če " "vaš zvočni zapis nima govorjenih delov." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1680,7 +1685,7 @@ msgstr "Nekatere vaše vsebine potrebujejo KDM" msgid "Some of your content needs an OV" msgstr "Nekatere vaše vsebine potrebujejo OV" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1745,7 +1750,7 @@ msgstr "Veriga potrdil za podpisovanje ni veljavna" msgid "The certificate chain for signing is invalid ({})" msgstr "Veriga potrdil za podpisovanje ni veljavna ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, fuzzy, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1760,7 +1765,7 @@ msgstr "" "verigo potrdil za podpisovanje s klikom gumba »Ponovno izdelaj potrdila in " "ključ …« na strani Ključi v Nastavitvah." -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, fuzzy, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1814,7 +1819,7 @@ msgstr "Datoteka {} je bila obrezana za {} milisekund manj." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Datoteka {} je bila obrezana za {} milisekund več." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1833,7 +1838,7 @@ msgstr "" "preveriti vse podnaslove v svojem projektu, da se prepričate, da so umeščeni " "na želeno mesto." -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1861,13 +1866,13 @@ msgstr "" "sistem, poskusite zmanjšati število niti šifriranja na zavihku Splošno v " "Nastavitvah." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, fuzzy, c++-format msgid "This KDM was made for {} 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:979 +#: src/lib/util.cc:959 #, fuzzy, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "Ta KDM ni bil narejen za potrdilo za dešifriranje DCP-o-matic." @@ -2059,7 +2064,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Še en filter za razpletanje" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2070,7 +2075,7 @@ msgstr "" "podpirajo vsi projektorji. Svetujemo vam, da spremenite hitrost predvajanja " "DCP na {} sl/s." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2081,7 +2086,7 @@ msgstr "" "podpirajo vsi projektorji. Morda boste želeli razmisliti o spremembi " "hitrosti sličic na {} sl/s." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2089,7 +2094,7 @@ 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:322 +#: src/lib/hints.cc:325 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.)" @@ -2097,7 +2102,7 @@ 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:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2117,7 +2122,7 @@ msgstr "" "Imate več kot en kos vsebine Atmos, in nimajo enake hitrosti sličic. " "Odstraniti morate nekaj vsebine Atmos." -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2125,7 +2130,7 @@ msgstr "" "Imate prekrivanje zaprtih napisov, ki niso dovoljeni v DCP-jih Interop. " "Spremenite standard DCP v SMPTE." -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2133,7 +2138,7 @@ msgstr "" "Določili ste datoteko pisave, ki je večja od 640 kB. To bo najverjetneje " "povzročilo težave pri predvajanju." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2146,7 +2151,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:110 +#: src/lib/hints.cc:113 #, fuzzy, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2159,7 +2164,7 @@ msgstr "" "pomembno, ali ima vaša vsebina manj kanalov, saj bo DCP-o-matic dodatne " "napolnil s tišino." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2170,7 +2175,7 @@ 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:167 +#: src/lib/hints.cc:170 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." @@ -2179,7 +2184,7 @@ msgstr "" "nekaterih projektorjih. Če je mogoče, uporabite plosko (flat) ali široko " "(scope) za razmerje vsebnika DCP." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2210,7 +2215,7 @@ msgstr "[gibljive slike]" msgid "[still]" msgstr "[fotografija]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[podnaslovi]" @@ -2226,7 +2231,7 @@ msgstr "_reel{}" msgid "bits" msgstr "bitov" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "povezava je potekla" @@ -2282,22 +2287,22 @@ msgstr "ni mogoče brati iz datoteke {} ({})" msgid "could not write to file {} ({})" msgstr "ni mogoče pisati v datoteko {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "napaka med async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "napaka med async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "napaka med async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "napaka med async_write ({})" @@ -2432,7 +2437,7 @@ msgstr "fotografija" msgid "unknown" msgstr "neznano" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "video sličice" diff --git a/src/lib/po/sv_SE.po b/src/lib/po/sv_SE.po index 2798482d7..91c46db76 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -26,7 +26,7 @@ msgstr "" "\n" "Källmaterialets bildhastighet är %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -35,7 +35,7 @@ msgstr "" "\n" "Beskuren till {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ msgstr "" "\n" "Bildformat %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -53,7 +53,7 @@ msgstr "" "\n" "Svarta kanter tillagda för att passa {}-behållaren ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Skalat till {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -102,7 +102,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", pixlarnas höjd/bredd-förhållande %.2f:1" @@ -176,7 +176,7 @@ msgstr "2,39 (Scope)" msgid "3D denoiser" msgstr "3D brusreducering" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -228,7 +228,7 @@ 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:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -257,7 +257,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "Advertisement" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -269,7 +269,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:157 +#: src/lib/hints.cc:160 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 " @@ -293,26 +293,26 @@ msgstr "Analyserar ljud" msgid "Analysing subtitles" msgstr "Analyserar undertexter" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 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:523 +#: src/lib/hints.cc:526 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:516 +#: src/lib/hints.cc:520 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:531 +#: src/lib/hints.cc:532 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:495 +#: src/lib/hints.cc:490 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." @@ -320,7 +320,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:497 +#: src/lib/hints.cc:492 msgid "" "At least one of your subtitle lines has more than 79 characters. You should " "make each line 79 characters at most in length." @@ -328,7 +328,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:664 +#: src/lib/hints.cc:681 msgid "" "At least one of your subtitles has more than 3 lines. It is advisable to " "use no more than 3 lines." @@ -336,7 +336,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:631 +#: src/lib/hints.cc:648 msgid "" "At least one of your subtitles lasts less than 15 frames. It is advisable " "to make each subtitle at least 15 frames long." @@ -344,7 +344,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:636 +#: src/lib/hints.cc:653 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." @@ -352,7 +352,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:707 +#: src/lib/hints.cc:724 #, fuzzy msgid "" "At least one piece of subtitle content has no specified language. It is " @@ -706,7 +706,7 @@ msgstr "Källmaterial som ska sammanfogas måste använda undertext-ström." 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:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Källmaterialet är {}x{}" @@ -847,7 +847,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML-undertexter" @@ -855,7 +855,12 @@ msgstr "DCP XML-undertexter" msgid "DCP sample rate" msgstr "DCP:ns samplingsfrekvens" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP:n kommer använda varannan bild från källmaterialet.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP:n kommer spelas upp i %.1f %% av källmaterialets hastighet.\n" @@ -944,12 +949,12 @@ msgstr "Nedladdning misslyckades ({} fel {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "" "Varje bildruta från källmaterialet kommer användas två gånger i DCP:n.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "" @@ -999,12 +1004,12 @@ msgstr "Fel: {}" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Läser undertexter" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "Undersöker ljud och undertexter" @@ -1016,7 +1021,7 @@ msgstr "Läser källmaterial" msgid "Examining subtitles" msgstr "Läser undertexter" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "Undersöker undertexter" @@ -1172,11 +1177,11 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 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:258 +#: src/lib/hints.cc:261 #, fuzzy msgid "" "In general it is now advisable to make SMPTE DCPs unless you have a " @@ -1187,7 +1192,7 @@ 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1233,7 +1238,7 @@ msgstr "Vänster baksurround" msgid "Left surround" msgstr "Vänster surround" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Speltid" @@ -1423,7 +1428,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, fuzzy, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1542,7 +1547,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1608,7 +1613,7 @@ msgstr "Short" msgid "Sign" msgstr "Tecken" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Upplösning" @@ -1661,7 +1666,7 @@ msgstr "" "Dessa filer kommer nu att genomsökas på nytt, deras inställningar kan " "därefter behöva kontrolleras." -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " @@ -1670,7 +1675,7 @@ msgstr "" "Några av dina dolda undertext-block har fler än {} rader. De överskjutande " "raderna kommer förmodligen klippas bort." -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1679,7 +1684,7 @@ msgstr "" "Innehållet har ljudspår, men inget språk är angivit. Det rekommenderas att " "sätta ljudspårets språk i \"DCP\"-fliken." -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1701,7 +1706,7 @@ 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/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1767,7 +1772,7 @@ msgstr "Certifikatkedjan för att signera är ogiltig" msgid "The certificate chain for signing is invalid ({})" msgstr "Certifikatkedjan för att signera är ogiltig ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1777,7 +1782,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1826,7 +1831,7 @@ msgstr "Filen {} har trimmats med {} millisekunder mindre." msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Filen {} har trimmats med {} millisekunder mer." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1840,7 +1845,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1869,12 +1874,12 @@ msgstr "" "operativsystem, försök att minska antalet kodnings-trådar i Allmänt-fliken " "under Inställningar." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, fuzzy, c++-format msgid "This KDM was made for {} 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:979 +#: src/lib/util.cc:959 #, fuzzy, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "Denna KDM är inte gjord för DCP-o-matics dekrypterings-certifikat." @@ -2067,7 +2072,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Yet Another Deinterlacing Filter" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2077,7 +2082,7 @@ msgstr "" "Vald bildhastighet är {} fps. Denna bildhastighet stöds inte av all " "uppspelningsutrustning. Rekommenderat är att ändra bildhastighet till {} fps." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2087,7 +2092,7 @@ msgstr "" "Vald bildhastighet är {} fps. Denna bildhastighet stöds inte av all " "uppspelningsutrustning. Överväg att ändra bildhastighet till {} fps." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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." @@ -2095,7 +2100,7 @@ msgstr "" "Vald bildhastighet är 30 fps. Denna bildhastighet stöds inte av all " "uppspelningsutrustning. Problem vid uppspelning kan förekomma." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2104,7 +2109,7 @@ msgstr "" "för 3D om du vill spela upp den med 3D-utrustning (t.ex. Real-D, MasterImage " "etc.)" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2124,7 +2129,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:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2132,7 +2137,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:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2140,7 +2145,7 @@ msgstr "" "Du använder en typsnittsfil som är större än 640kB. Risken är stor att detta " "leder till problem vid uppspelning." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2153,7 +2158,7 @@ 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:110 +#: src/lib/hints.cc:113 #, fuzzy, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2166,7 +2171,7 @@ msgstr "" "ditt innehåll har färre kanaler, DCP-o-matic fyller i de extra kanalerna med " "tystnad." -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2174,7 +2179,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2183,7 +2188,7 @@ msgstr "" "uppspelning på en del utrustning. Använd Flat eller Scope som bildformat om " "möjligt." -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2213,7 +2218,7 @@ msgstr "[bildsekvens]" msgid "[still]" msgstr "[stillbild]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[undertexter]" @@ -2229,7 +2234,7 @@ msgstr "_akt{}" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "uppkopplingen tog för lång tid" @@ -2285,22 +2290,22 @@ msgstr "kunde inte läsa från fil {} ({})" msgid "could not write to file {} ({})" msgstr "kunde inte skriva till fil {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "fel vid async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "fel vid async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "fel vid async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "fel vid async_write ({})" @@ -2432,7 +2437,7 @@ msgstr "stillbild" msgid "unknown" msgstr "okänd" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "bildrutor" diff --git a/src/lib/po/tr_TR.po b/src/lib/po/tr_TR.po index 82705cdda..845004e7a 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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,42 +17,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" "Content frame rate %.4f\n" msgstr "" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" "Cropped to {}x{}" msgstr "" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" "Display aspect ratio %.2f:1" msgstr "" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" "Padded with black to fit container {} ({}x{})" msgstr "" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" "Scaled to {}x{}" msgstr "" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr "" @@ -82,7 +82,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr "" @@ -155,7 +155,7 @@ msgstr "" msgid "3D denoiser" msgstr "" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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,7 +193,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -216,7 +216,7 @@ msgstr "" msgid "Advertisement" msgstr "" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -224,7 +224,7 @@ msgid "" "tab." msgstr "" -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -244,54 +244,54 @@ msgstr "" msgid "Analysing subtitles" msgstr "" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -614,7 +614,7 @@ msgstr "" msgid "Content to be joined must use the same text language." msgstr "" -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "" @@ -750,7 +750,7 @@ msgstr "" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "" @@ -758,7 +758,12 @@ msgstr "" msgid "DCP sample rate" msgstr "" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "" @@ -835,11 +840,11 @@ msgstr "" msgid "EC" msgstr "" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "" @@ -888,11 +893,11 @@ msgstr "" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -904,7 +909,7 @@ msgstr "" msgid "Examining subtitles" msgstr "" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "" @@ -1055,18 +1060,18 @@ msgstr "" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1110,7 +1115,7 @@ msgstr "" msgid "Left surround" msgstr "" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "" @@ -1293,7 +1298,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1409,7 +1414,7 @@ msgstr "" msgid "SMPTE 240M" msgstr "" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1471,7 +1476,7 @@ msgstr "" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "" @@ -1505,21 +1510,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1540,7 +1545,7 @@ msgstr "" msgid "Some of your content needs an OV" msgstr "" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1604,7 +1609,7 @@ msgstr "" msgid "The certificate chain for signing is invalid ({})" msgstr "" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1614,7 +1619,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1658,7 +1663,7 @@ msgstr "" msgid "The file {} has been trimmed by {} milliseconds more." msgstr "" -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1672,7 +1677,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1692,12 +1697,12 @@ msgid "" "tab of Preferences." msgstr "" -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -1875,7 +1880,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1883,7 +1888,7 @@ msgid "" "to {} fps." msgstr "" -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -1891,19 +1896,19 @@ msgid "" "rate to {} fps." msgstr "" -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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:322 +#: src/lib/hints.cc:325 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 "" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -1917,19 +1922,19 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." msgstr "" -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -1940,7 +1945,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -1949,7 +1954,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -1957,13 +1962,13 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -1989,7 +1994,7 @@ msgstr "" msgid "[still]" msgstr "" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "" @@ -2005,7 +2010,7 @@ msgstr "" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "" @@ -2061,22 +2066,22 @@ msgstr "" msgid "could not write to file {} ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "" @@ -2199,7 +2204,7 @@ msgstr "" msgid "unknown" msgstr "" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "" diff --git a/src/lib/po/uk_UA.po b/src/lib/po/uk_UA.po index 1f27c9866..edf359d66 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: 2026-03-22 22:52+0100\n" +"POT-Creation-Date: 2026-04-19 23:03+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:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -24,7 +24,7 @@ msgstr "" "\n" "Частота кадрів контенту %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -33,7 +33,7 @@ msgstr "" "\n" "Розмір при кадруванні: {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -42,7 +42,7 @@ msgstr "" "\n" "Співвідношення сторін контенту %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -51,7 +51,7 @@ msgstr "" "\n" "Заповнено чорним для підгонки контейнера {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -60,7 +60,7 @@ msgstr "" "\n" "Розмір при масштабуванні: {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -100,7 +100,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$JOB_NAME: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", співвідношення сторін пікселей %.2f:1" @@ -174,7 +174,7 @@ msgstr "2.39 (Scope)" msgid "3D denoiser" msgstr "Придушення шуму 3D" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -212,7 +212,7 @@ msgid "" "donate €10</a></ul><p>Thank you!</font>" msgstr "" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 #, fuzzy msgid "" "A few projectors have problems playing back very high bit-rate DCPs. It is " @@ -239,7 +239,7 @@ msgstr "ARIB STD-B67 ('Hybrid log-gamma')" msgid "Advertisement" msgstr "ADV (Реклама)" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -250,7 +250,7 @@ msgstr "" "означає, що у кадрі зверху та знизу вашого контенту будуть чорні області. Ви " "можете змінити формат кадра вашого DCP на SCOPE (2.39:1) на вкладці \"DCP\"." -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 #, fuzzy msgid "" "All of your content narrower than 1.90:1 but your DCP's container is Scope " @@ -277,54 +277,54 @@ msgstr "Аналіз аудіо" msgid "Analysing subtitles" msgstr "Пошук субтитрів" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "" -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "" -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "" -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -674,7 +674,7 @@ msgstr "Для приєднання контенту необхідно вико msgid "Content to be joined must use the same text language." msgstr "Для приєднання контенту має бути такий самий шрифт." -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "Розмір контенту: {}x{}" @@ -816,7 +816,7 @@ msgstr "DBP" msgid "DCP (via {})" msgstr "" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML субтитри" @@ -824,7 +824,12 @@ msgstr "DCP XML субтитри" msgid "DCP sample rate" msgstr "Частота кадрів DCP" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, fuzzy, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP буде використовувати кажний другий кадр контенту.\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP буде програватися на %.1f%% від швидкості контенту.\n" @@ -914,11 +919,11 @@ msgstr "Помилка завантаження ({}/{} помилка {})" msgid "EC" msgstr "C" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "Кожний кадр контенту буде задвоено у DCP-пакеті.\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "Кожний кадр контенту буде повторений {} раз у DCP-пакеті.\n" @@ -967,12 +972,12 @@ msgstr "Помилка: ({})" msgid "Event" msgstr "" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 #, fuzzy msgid "Examining audio" msgstr "Пошук субтитрів" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "" @@ -986,7 +991,7 @@ msgstr "Перевірка контенту" msgid "Examining subtitles" msgstr "Пошук субтитрів" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 #, fuzzy msgid "Examining subtitles and closed captions" msgstr "Пошук субтитрів" @@ -1144,18 +1149,18 @@ msgstr "IEC61966-2-4" msgid "IN" msgstr "" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1199,7 +1204,7 @@ msgstr "Лівий тиловий surround" msgid "Left surround" msgstr "Лівий surround" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "Тривалість" @@ -1388,7 +1393,7 @@ msgstr "" msgid "P3 DCI (~6300K)" msgstr "" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1505,7 +1510,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1568,7 +1573,7 @@ msgstr "SHR (Короткометражний фільм)" msgid "Sign" msgstr "" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "Розмір" @@ -1602,21 +1607,21 @@ msgid "" "need to check their settings." msgstr "" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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." msgstr "" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1638,7 +1643,7 @@ msgstr "Частина вашого контенту потребує KDM" msgid "Some of your content needs an OV" msgstr "Часть вашего контента требует OV" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1704,7 +1709,7 @@ msgstr "Ланцюг сертифікатів для підпису невірн msgid "The certificate chain for signing is invalid ({})" msgstr "Ланцюг сертифікатів для підпису невірний ({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1714,7 +1719,7 @@ msgid "" "Preferences." msgstr "" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1760,7 +1765,7 @@ msgstr "Файл {} був обрізаний на {} мілісекунд ме msgid "The file {} has been trimmed by {} milliseconds more." msgstr "Файл {} був обрізаний на {} мілісекунд більше." -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1774,7 +1779,7 @@ msgid "" "project to make sure that they are placed where you want them." msgstr "" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 #, fuzzy msgid "" "There is a large difference between the frame rate of your DCP and that of " @@ -1803,12 +1808,12 @@ msgstr "" "спробуйте зменшити кількість потоків кодування у \"Налаштуваннях\" у вкладці " "\"Основні\"." -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "" @@ -1998,7 +2003,7 @@ msgstr "" msgid "Yet Another Deinterlacing Filter" msgstr "Ще один фільтр деінтерлейсинга" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2008,7 +2013,7 @@ msgstr "" "Ви обрали для Interop DCP частоту кадрів, яка офіційно не підтримується. " "Радимо змінити частоту кадрів вашого DCP або замість цього зробити SMPTE DCP." -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, fuzzy, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2018,7 +2023,7 @@ msgstr "" "Ви обрали для Interop DCP частоту кадрів, яка офіційно не підтримується. " "Радимо змінити частоту кадрів вашого DCP або замість цього зробити SMPTE DCP." -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 #, fuzzy msgid "" "You are set up for a DCP frame rate of 30fps, which is not supported by all " @@ -2027,7 +2032,7 @@ msgstr "" "Ви обрали для Interop DCP частоту кадрів, яка офіційно не підтримується. " "Радимо змінити частоту кадрів вашого DCP або замість цього зробити SMPTE DCP." -#: src/lib/hints.cc:322 +#: src/lib/hints.cc:325 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.)" @@ -2036,7 +2041,7 @@ msgstr "" "3D, якщо хочете відтворити його на 3D-системі (напр. Real-D, MasterImage і " "т.п.)" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, fuzzy, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2054,13 +2059,13 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." msgstr "" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2068,7 +2073,7 @@ msgstr "" "Вы вибрали шрифт, розмір якого більше 640 кБ. Висока вірогідність, що це " "викликає проблеми при відтворенні." -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2081,7 +2086,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "Вам необхідно додати контент в DCP перед його створенням" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2090,7 +2095,7 @@ msgid "" "silence." msgstr "" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2098,7 +2103,7 @@ msgid "" "set the DCP audio channels to 8 or 16." msgstr "" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 #, fuzzy msgid "" "Your DCP uses an unusual container ratio. This may cause problems on some " @@ -2108,7 +2113,7 @@ msgstr "" "призвести к проблемам на деяких проекторах. Якщо можливо, використовуйте " "співвідношення сторін Flat або Scope для DCP" -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2140,7 +2145,7 @@ msgstr "[послідовність]" msgid "[still]" msgstr "[статичний]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[субтитри]" @@ -2156,7 +2161,7 @@ msgstr "" msgid "bits" msgstr "" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "таймаут з'єднання" @@ -2212,22 +2217,22 @@ msgstr "не вдалося прочитати з файла {} ({})" msgid "could not write to file {} ({})" msgstr "не вдалося записати в файл {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "помилка під час async_connect ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, fuzzy, c++-format msgid "error during async_connect: ({})" msgstr "помилка під час async_connect ({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "помилка під час async_read ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "помилка під час async_write ({})" @@ -2358,7 +2363,7 @@ msgstr "статичний" msgid "unknown" msgstr "невідомо" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "відеокадри" diff --git a/src/lib/po/zh_CN.po b/src/lib/po/zh_CN.po index 5ae79a70f..db2ab4731 100644 --- a/src/lib/po/zh_CN.po +++ b/src/lib/po/zh_CN.po @@ -12,19 +12,19 @@ msgid "" msgstr "" "Project-Id-Version: LIBDCPOMATIC\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-22 22:52+0100\n" -"PO-Revision-Date: 2025-10-05 13:31+0800\n" +"POT-Creation-Date: 2026-04-19 23:03+0200\n" +"PO-Revision-Date: 2026-05-17 10:45+0800\n" "Last-Translator: Dian Li <xslidian@gmail.com>\n" -"Language-Team: Chinese Simplified (Rov8 branch)\n" +"Language-Team: Chinese Simplified (Hanyuan branch)\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.7\n" +"X-Generator: Poedit 3.9\n" "X-Poedit-SourceCharset: UTF-8\n" -#: src/lib/video_content.cc:513 +#: src/lib/video_content.cc:515 #, c-format msgid "" "\n" @@ -33,7 +33,7 @@ msgstr "" "\n" "源视频帧率 %.4f\n" -#: src/lib/video_content.cc:477 +#: src/lib/video_content.cc:479 #, c++-format msgid "" "\n" @@ -42,7 +42,7 @@ msgstr "" "\n" "裁剪为 {}x{}" -#: src/lib/video_content.cc:467 +#: src/lib/video_content.cc:469 #, c-format msgid "" "\n" @@ -51,7 +51,7 @@ msgstr "" "\n" "显示宽高比 %.2f:1" -#: src/lib/video_content.cc:501 +#: src/lib/video_content.cc:503 #, c++-format msgid "" "\n" @@ -60,7 +60,7 @@ msgstr "" "\n" "填充为黑色,以适应打包宽高比 {} ({}x{})" -#: src/lib/video_content.cc:491 +#: src/lib/video_content.cc:493 #, c++-format msgid "" "\n" @@ -69,7 +69,7 @@ msgstr "" "\n" "缩放到 {}x{}" -#: src/lib/video_content.cc:495 src/lib/video_content.cc:506 +#: src/lib/video_content.cc:497 src/lib/video_content.cc:508 #, c-format msgid " (%.2f:1)" msgstr " (%.2f:1)" @@ -109,7 +109,7 @@ msgstr "" msgid "$JOB_NAME: $JOB_STATUS" msgstr "$任务名称: $JOB_STATUS" -#: src/lib/video_content.cc:462 +#: src/lib/video_content.cc:464 #, c-format msgid ", pixel aspect ratio %.2f:1" msgstr ", 像素宽高比 %.2f:1" @@ -182,7 +182,7 @@ msgstr "2.39 (宽幅)" msgid "3D denoiser" msgstr "3D 降噪" -#: src/lib/hints.cc:219 +#: src/lib/hints.cc:222 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 " @@ -207,7 +207,7 @@ msgid "; {} remaining; finishing at {}{}" msgstr "; 剩余 {} ; 完成于 {}{}" #: src/lib/analytics.cc:58 -#, fuzzy, c++-format +#, c++-format msgid "" "<h2>You have made {} DCPs with {}!</h2><img width=\"150\" height=\"193\" " "src=\"memory:me.jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl " @@ -231,7 +231,7 @@ msgstr "" "href=\"https://dcpomatic.com/donate_amount?amount=10\">去Paypal捐款10欧元</" "a></ul><p>谢谢您!</font>" -#: src/lib/hints.cc:176 +#: src/lib/hints.cc:179 msgid "" "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 " @@ -258,7 +258,7 @@ msgstr "ARIB STD-B67 (“HLG” HDR)" msgid "Advertisement" msgstr "广告片" -#: src/lib/hints.cc:153 +#: src/lib/hints.cc:156 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. " @@ -268,7 +268,7 @@ msgstr "" "您添加的媒体画面宽高比为2.39:1,但是DCP容器设置为1.85:1的模式。这将会使您的画" "面在放映时存在上下黑边。建议把DCP容器设置为2.39:1的模式。" -#: src/lib/hints.cc:157 +#: src/lib/hints.cc:160 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 " @@ -290,55 +290,55 @@ msgstr "分析音频中" msgid "Analysing subtitles" msgstr "分析字幕中" -#: src/lib/hints.cc:384 +#: src/lib/hints.cc:379 msgid "" "At least one marker comes after the end of the project and will be ignored." msgstr "至少有一个标记出现在项目结束后,将被忽略。" -#: src/lib/hints.cc:523 +#: src/lib/hints.cc:526 msgid "At least one of your closed caption files is larger than " msgstr "至少有一个隐藏字幕文件过大了 " -#: src/lib/hints.cc:516 +#: src/lib/hints.cc:520 msgid "At least one of your closed caption files' XML part is larger than " msgstr "至少有一个隐藏式字幕文件的XML部分过大了 " -#: src/lib/hints.cc:531 +#: src/lib/hints.cc:532 msgid "At least one of your subtitle files is larger than " msgstr "至少有一个字幕文件过大了 " -#: src/lib/hints.cc:495 +#: src/lib/hints.cc:490 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:497 +#: src/lib/hints.cc:492 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:664 +#: src/lib/hints.cc:681 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:631 +#: src/lib/hints.cc:648 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:636 +#: src/lib/hints.cc:653 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:707 +#: src/lib/hints.cc:724 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 " @@ -429,7 +429,7 @@ msgstr "中置" #: src/lib/exceptions.cc:196 #, c++-format msgid "CPL {} not found" -msgstr "" +msgstr "未找到CPL {}" #: src/lib/job.cc:657 msgid "Cancelled" @@ -461,6 +461,8 @@ msgid "" "Check the server settings in the TMS tab of preferences, or un-tick \"Upload " "DCP to TMS after creation\" if you do not want to upload your DCP." msgstr "" +"在首选项的TMS页面中检查服务器设置,或者您不想要上传DCP的话,则取消选中“制作" +"DCP后上传到TMS)复选框" #: src/lib/transcode_job.cc:106 msgid "Check their new settings, then try again." @@ -663,7 +665,7 @@ msgstr "添加的内容字幕流必须相同。" msgid "Content to be joined must use the same text language." msgstr "添加的内容必须有相同的文字语言。" -#: src/lib/video_content.cc:453 +#: src/lib/video_content.cc:455 #, c++-format msgid "Content video is {}x{}" msgstr "源视频分辨率是 {}x{}" @@ -682,9 +684,8 @@ msgid "Copying DCPs to {}" msgstr "复制DCP到 {}" #: src/lib/reel_writer.cc:194 -#, fuzzy msgid "Copying existing asset" -msgstr "检查现有的图像数据" +msgstr "正在拷贝已经存在的资产" #: src/lib/copy_to_drive_job.cc:58 #, c++-format @@ -802,7 +803,7 @@ msgstr "DCP" msgid "DCP (via {})" msgstr "DCP (via {})" -#: src/lib/dcp_subtitle_content.cc:139 +#: src/lib/dcp_subtitle_content.cc:138 msgid "DCP XML subtitles" msgstr "DCP XML字幕" @@ -810,7 +811,12 @@ msgstr "DCP XML字幕" msgid "DCP sample rate" msgstr "DCP 采样率" -#: src/lib/frame_rate_change.cc:101 +#: src/lib/frame_rate_change.cc:93 +#, c++-format +msgid "DCP will contain 1 out of every {} frames of the content.\n" +msgstr "DCP 将包含内容中每 {} 帧中的 1 帧。\n" + +#: src/lib/frame_rate_change.cc:103 #, c-format msgid "DCP will run at %.1f%% of the content speed.\n" msgstr "DCP队列将在速度 %.1f%% 下运行。\n" @@ -899,15 +905,14 @@ msgstr "下载失败 ({} error {})" #. TRANSLATORS: this is an abbreviation for "end credits", shown next to the pair of markers #. "FFEC" and "LFEC" ({First, Last} Frame of End Credits) #: src/lib/layout_markers.cc:145 -#, fuzzy msgid "EC" -msgstr "中置" +msgstr "片尾字幕" -#: src/lib/frame_rate_change.cc:93 +#: src/lib/frame_rate_change.cc:95 msgid "Each content frame will be doubled in the DCP.\n" msgstr "该DCP中每一帧将复制为两帧。\n" -#: src/lib/frame_rate_change.cc:95 +#: src/lib/frame_rate_change.cc:97 #, c++-format msgid "Each content frame will be repeated {} more times in the DCP.\n" msgstr "每个内容帧将在DCP中重复{}次。\n" @@ -956,11 +961,11 @@ msgstr "错误: ({})" msgid "Event" msgstr "事件" -#: src/lib/hints.cc:415 +#: src/lib/hints.cc:410 msgid "Examining audio" msgstr "正在检查音频" -#: src/lib/hints.cc:417 +#: src/lib/hints.cc:412 msgid "Examining audio, subtitles and closed captions" msgstr "检查音频、字幕和隐藏式字幕中" @@ -972,7 +977,7 @@ msgstr "分析内容中" msgid "Examining subtitles" msgstr "定位字幕中" -#: src/lib/hints.cc:413 +#: src/lib/hints.cc:408 msgid "Examining subtitles and closed captions" msgstr "检查字幕和隐藏式字幕中" @@ -1123,13 +1128,13 @@ msgstr "IEC61966-2-4" #. "FFOI" and "LFOI" ({First, Last} Frame of Intermission) #: src/lib/layout_markers.cc:142 msgid "IN" -msgstr "" +msgstr "幕间休息" -#: src/lib/hints.cc:195 +#: src/lib/hints.cc:198 msgid "If you do use 25fps you should change your DCP standard to SMPTE." msgstr "如果您选择使用25fps,那就必须把DCP标准选线设置为SMPTE。" -#: src/lib/hints.cc:258 +#: src/lib/hints.cc:261 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 " @@ -1138,7 +1143,7 @@ msgstr "" "一般来说,现在建议制作SMPTE DCP,除非您有特殊的理由使用Interop。建议在“DCP”选" "项卡中将DCP设置为使用SMPTE标准。" -#: src/lib/hints.cc:624 +#: src/lib/hints.cc:641 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." @@ -1182,7 +1187,7 @@ msgstr "左后环绕" msgid "Left surround" msgstr "左环绕" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "Length" msgstr "长度" @@ -1226,9 +1231,8 @@ msgstr "左环绕" #. TRANSLATORS: this is an abbreviation for "moving credits", shown next to the pair of markers #. "FFMC" and "LFMC" ({First, Last} Frame of Moving Credits) #: src/lib/layout_markers.cc:148 -#, fuzzy msgid "MC" -msgstr "中置" +msgstr "滚动字幕" #: src/lib/mid_side_decoder.cc:39 msgid "Mid-side decoder" @@ -1274,12 +1278,11 @@ msgstr "动态隔行补偿" #: src/lib/dcp_content.cc:212 msgid "No ASSETMAP or ASSETMAP.xml file found: is this a DCP?" -msgstr "" +msgstr "未找到ASSETMAP或ASSETMAP.xml文件,这是一个DCP吗?" #: src/lib/dcp_examiner.cc:115 -#, fuzzy msgid "No CPLs found in DCP" -msgstr "DCP中没有找到CPL文件。" +msgstr "DCP中没有找到CPL文件" #: src/lib/dcp_decoder.cc:114 msgid "No CPLs found in DCP." @@ -1357,17 +1360,17 @@ msgstr "小波降噪" #: src/lib/colour_conversion.cc:293 msgid "P3 D60 (~6000K)" -msgstr "" +msgstr "P3 D60 (~6000K)" #: src/lib/colour_conversion.cc:292 msgid "P3 D65 (~6500K)" -msgstr "" +msgstr "P3 D65 (~6500K)" #: src/lib/colour_conversion.cc:291 msgid "P3 DCI (~6300K)" -msgstr "" +msgstr "P3 DCI (~6300K)" -#: src/lib/util.cc:1131 +#: src/lib/util.cc:1111 #, c++-format msgid "" "Please report this problem by using Help -> Report a problem or via email to " @@ -1407,9 +1410,8 @@ msgstr "右声道" #. TRANSLATORS: this is an abbreviation for "ratings band", shown next to the pair of markers #. "FFOB" and "LFOB" ({First, Last} Frame of Band) #: src/lib/layout_markers.cc:136 -#, fuzzy msgid "RB" -msgstr "右声道" +msgstr "评级" #: src/lib/ffmpeg_content.cc:644 msgid "RGB / sRGB (IEC61966-2-1)" @@ -1484,7 +1486,7 @@ msgstr "SMPTE 2085, Y'D'zD'x" msgid "SMPTE 240M" msgstr "SMPTE 240M" -#: src/lib/hints.cc:689 +#: src/lib/hints.cc:706 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). " @@ -1498,9 +1500,8 @@ 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:660 -#, fuzzy msgid "SMPTE ST 2128, IPT-C2" -msgstr "SMPTE ST 428-1" +msgstr "SMPTE ST 2128, IPT-C2" #: src/lib/ffmpeg_content.cc:636 msgid "SMPTE ST 428-1" @@ -1549,7 +1550,7 @@ msgstr "短片" msgid "Sign" msgstr "签名" -#: src/lib/video_content.cc:528 +#: src/lib/video_content.cc:530 msgid "Size" msgstr "大小" @@ -1584,23 +1585,21 @@ msgstr "" "这些文件现在将被重新检查,因此您可能需要检查它们的设置。" #: src/lib/check_content_job.cc:94 -#, fuzzy msgid "" "Some files must be re-examined due to a bug fix in DCP-o-matic. You may " "need to check their settings." msgstr "" -"有些文件在添加到项目后发生了更改\n" -"\n" -"这些文件现在将被重新检查,因此您可能需要检查它们的设置。" +"由于 DCP-o-matic 中的一个漏洞修复,某些文件必须重新检查。您可能需要检查它们的" +"设置。" -#: src/lib/hints.cc:605 +#: src/lib/hints.cc:622 #, c++-format msgid "" "Some of your closed captions span more than {} lines, so they will be " "truncated." msgstr "您的某些隐藏字幕跨度超过{}行,因此它将被截断,可能显示不完整。" -#: src/lib/hints.cc:727 +#: src/lib/hints.cc:744 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 " @@ -1609,7 +1608,7 @@ msgstr "" "您的某些内容有音频,但您尚未设置音频语言。建议在“DCP”选项卡设置音频语言,除非" "您的音频没有说话部分。" -#: src/lib/hints.cc:798 +#: src/lib/hints.cc:815 msgid "" "Some of your content is encrypted, and some not. Though some distributors " "(e.g. Netflix) require subtitles not to be encrypted (even if picture and " @@ -1617,6 +1616,9 @@ msgid "" "in doubt, set everything (picture, sound and text) to be either encrypted or " "not." msgstr "" +"你的一些内容是加密的,而有些则不是。虽然一些分销商(例如 Netflix)要求字幕不" +"能加密(即使画面和声音可以加密),但其他分销商会对由此项目生成的 DCP 标记错" +"误。如果不确定,请将所有内容(画面、声音和文字)设置为加密或不加密。" #: src/lib/make_dcp.cc:69 msgid "Some of your content is missing" @@ -1630,7 +1632,7 @@ msgstr "一些内容需要KDM密钥" msgid "Some of your content needs an OV" msgstr "一些内容需要OV" -#: src/lib/hints.cc:781 +#: src/lib/hints.cc:798 #, c++-format msgid "" "Some of your video content contains an alpha channel, and {} cannot be " @@ -1665,9 +1667,8 @@ msgstr "星期日" #. TRANSLATORS: this is an abbreviation for "title credits", shown next to the pair of markers #. "FFTC" and "LFTC" ({First, Last} Frame of Title Credits) #: src/lib/layout_markers.cc:139 -#, fuzzy msgid "TC" -msgstr "中置" +msgstr "标题字幕" #: src/lib/dcp_content_type.cc:60 msgid "Teaser" @@ -1698,7 +1699,7 @@ msgstr "证书签名无效" msgid "The certificate chain for signing is invalid ({})" msgstr "证书签名无效({})" -#: src/lib/hints.cc:744 +#: src/lib/hints.cc:761 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs contains a " @@ -1711,7 +1712,7 @@ msgstr "" "议通过单击“首选项”的“密钥”页面中的“重新制作证书和密钥…”按钮来重新创建签名证书" "链。" -#: src/lib/hints.cc:752 +#: src/lib/hints.cc:769 #, c++-format msgid "" "The certificate chain that {} uses for signing DCPs and KDMs has a validity " @@ -1760,7 +1761,7 @@ msgstr "文件 {} 被缩短了 {} 毫秒。" msgid "The file {} has been trimmed by {} milliseconds more." msgstr "文件 {} 被延长了 {} 毫秒。" -#: src/lib/hints.cc:267 +#: src/lib/hints.cc:270 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 " @@ -1778,7 +1779,7 @@ msgstr "" "现在版本中的字幕的垂直偏移控制与以前版本中的方向相反。您应该检查项目中的所有" "字幕,以确保它们放置在您想要的位置。" -#: src/lib/hints.cc:248 +#: src/lib/hints.cc:251 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 " @@ -1801,12 +1802,12 @@ msgid "" "tab of Preferences." msgstr "内存不足,如您是32位系统,请重新设置运行线程数量来达到稳定运行。" -#: src/lib/util.cc:981 +#: src/lib/util.cc:961 #, c++-format msgid "This KDM was made for {} but not for its leaf certificate." msgstr "KDM是为 {}生成,但不是为它的叶子证书生成。" -#: src/lib/util.cc:979 +#: src/lib/util.cc:959 #, c++-format msgid "This KDM was not made for {}'s decryption certificate." msgstr "KDM不是为 {} 解密证书而生成。" @@ -1982,17 +1983,17 @@ msgstr "YCOCG" #: src/lib/ffmpeg_content.cc:661 msgid "YCgCo-R, even addition" -msgstr "" +msgstr "YCgCo-R,偶数叠加编码" #: src/lib/ffmpeg_content.cc:662 msgid "YCgCo-R, odd addition" -msgstr "" +msgstr "YCgCo-R,奇数叠加编码" #: src/lib/filter.cc:98 msgid "Yet Another Deinterlacing Filter" msgstr "反隔行扫描滤镜" -#: src/lib/hints.cc:208 +#: src/lib/hints.cc:211 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2002,7 +2003,7 @@ msgstr "" "您设置DCP的帧率为 {} fps的DCP。并非所有放映设备都支持此帧率。建议您将DCP帧率" "更改为 {} fps。" -#: src/lib/hints.cc:192 +#: src/lib/hints.cc:195 #, c++-format msgid "" "You are set up for a DCP at a frame rate of {} fps. This frame rate is not " @@ -2012,13 +2013,13 @@ msgstr "" "您设置的帧率为{} fps的DCP。并非所有放映设备都支持此帧率。建议您将帧率更改为 " "{} fps。" -#: src/lib/hints.cc:202 +#: src/lib/hints.cc:205 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:322 +#: src/lib/hints.cc:325 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.)" @@ -2026,7 +2027,7 @@ msgstr "" "您添加的内容是3D内容,但您的DCP包设置为2D模式,如果您想在3D放映系统(如Real-" "D, MasterImage等)上播放,请设置到3D模式。" -#: src/lib/hints.cc:125 +#: src/lib/hints.cc:128 #, c++-format msgid "" "You are using {}'s stereo-to-5.1 upmixer. This is experimental and may " @@ -2042,7 +2043,7 @@ msgid "" "frame rate. You must remove some Atmos content." msgstr "您有多个全景声内容片段,而它们的帧率不同。您必须删除一些全景声内容。" -#: src/lib/hints.cc:612 +#: src/lib/hints.cc:629 msgid "" "You have overlapping closed captions, which are not allowed in Interop " "DCPs. Change your DCP standard to SMPTE." @@ -2050,7 +2051,7 @@ msgstr "" "您有重叠的隐藏式字幕,这在 Interop DCP中是不允许的。请您的DCP标准更改为" "SMPTE。" -#: src/lib/hints.cc:290 +#: src/lib/hints.cc:293 msgid "" "You have specified a font file which is larger than 640kB. This is very " "likely to cause problems on playback." @@ -2058,7 +2059,7 @@ msgstr "" "您添加的字体文件超过了640KB,部分服务器不支持超过640KB大小的字体,可能在播放" "时出现问题。" -#: src/lib/hints.cc:306 +#: src/lib/hints.cc:309 #, c++-format msgid "" "You have {} files that look like they are VOB files from DVD. You should " @@ -2071,7 +2072,7 @@ msgstr "" msgid "You must add some content to the DCP before creating it" msgstr "在创建 DCP 之前,必须向其中添加一些内容" -#: src/lib/hints.cc:110 +#: src/lib/hints.cc:113 #, c++-format msgid "" "Your DCP has fewer than 6 audio channels. This may cause problems on some " @@ -2082,7 +2083,7 @@ msgstr "" "您的DCP的音轨少于6个,某些放映设备可能不支持。但是如果您的内容没有这么多的音" "轨,您可以设置成6个音轨, {} 将用空白音轨补齐。" -#: src/lib/hints.cc:770 +#: src/lib/hints.cc:787 #, c++-format msgid "" "Your DCP has {} audio channels, rather than 8 or 16. This may cause some " @@ -2092,7 +2093,7 @@ msgstr "" "您的DCP具有 {} 个音频通道,而不是8或16个通道。这可能导致一些发行商在检查您的 " "DCP 时出现 QC 报错。为防止这种情况,建议设置8或16个DCP音频通道。" -#: src/lib/hints.cc:167 +#: src/lib/hints.cc:170 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." @@ -2100,7 +2101,7 @@ msgstr "" "您的DCP使用了不常见的画幅比例,可能导致部分电影放映机无法正常播放,建议改成" "Flat (1.77/1.78/1.85) 或者Scope (2.35/2.39) 比例。" -#: src/lib/hints.cc:356 +#: src/lib/hints.cc:359 #, c++-format msgid "" "Your audio level is very high (on {}). You should reduce the gain of your " @@ -2126,7 +2127,7 @@ msgstr "[动态图像]" msgid "[still]" msgstr "[静态图像]" -#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86 +#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86 #: src/lib/string_text_file_content.cc:111 msgid "[subtitles]" msgstr "[字幕]" @@ -2142,7 +2143,7 @@ msgstr "_卷号{}" msgid "bits" msgstr "位" -#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112 +#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116 msgid "connect timed out" msgstr "连接超时" @@ -2198,22 +2199,22 @@ msgstr "无法从文件 {} 中读取({})" msgid "could not write to file {} ({})" msgstr "不能写入文件 {} ({})" -#: src/lib/dcpomatic_socket.cc:108 +#: src/lib/dcpomatic_socket.cc:112 #, c++-format msgid "error during async_connect ({})" msgstr "在async连接时出现错误 ({})" -#: src/lib/dcpomatic_socket.cc:78 +#: src/lib/dcpomatic_socket.cc:82 #, c++-format msgid "error during async_connect: ({})" msgstr "在async连接时出现错误:({})" -#: src/lib/dcpomatic_socket.cc:200 +#: src/lib/dcpomatic_socket.cc:204 #, c++-format msgid "error during async_read ({})" msgstr "在async读取时出现错误 ({})" -#: src/lib/dcpomatic_socket.cc:159 +#: src/lib/dcpomatic_socket.cc:163 #, c++-format msgid "error during async_write ({})" msgstr "在async写入时出现错误 ({})" @@ -2308,11 +2309,10 @@ msgstr "名字" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " #: src/lib/dcp_content.cc:829 -#, fuzzy msgid "" "one of its closed caption reels has a non-zero entry point so it must be re-" "written." -msgstr "它的一个隐藏字幕有一个非零的时间点,因此必须重写。" +msgstr "它的一个隐藏字幕卷有一个非零的起始点,因此必须重写。" #. TRANSLATORS: this string will follow "Cannot reference this DCP: " #: src/lib/dcp_content.cc:823 @@ -2338,7 +2338,7 @@ msgstr "静止图像" msgid "unknown" msgstr "未知" -#: src/lib/video_content.cc:526 +#: src/lib/video_content.cc:528 msgid "video frames" msgstr "视频帧" diff --git a/src/lib/raw_image_proxy.cc b/src/lib/raw_image_proxy.cc index 9e819140b..e54163e9e 100644 --- a/src/lib/raw_image_proxy.cc +++ b/src/lib/raw_image_proxy.cc @@ -19,6 +19,7 @@ */ +#include "dcpomatic_assert.h" #include "raw_image_proxy.h" #include "image.h" #include <dcp/util.h> @@ -47,7 +48,7 @@ using boost::optional; RawImageProxy::RawImageProxy(shared_ptr<const Image> image) : _image (image) { - + DCPOMATIC_ASSERT(image); } diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc index b85b53305..76c1f8124 100644 --- a/src/lib/reel_writer.cc +++ b/src/lib/reel_writer.cc @@ -591,6 +591,7 @@ ReelWriter::create_reel_sound(shared_ptr<dcp::Reel> reel, list<ReferencedReelAss } +/** @param ensure_closed_captions List of DCPTextTracks that we need to make sure exist in this reel */ void ReelWriter::create_reel_text( shared_ptr<dcp::Reel> reel, @@ -630,17 +631,30 @@ ReelWriter::create_reel_text( } } - for (auto const& i: _closed_caption_assets) { - 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 + for (auto iter = ensure_closed_captions.begin(); iter != ensure_closed_captions.end(); ) { + /* Find any asset we wrote for this track */ + auto written_asset = _closed_caption_assets.find(*iter); + + /* Try to make a reel asset out of either written_asset or one of the referenced assets */ + auto asset = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>( + written_asset == _closed_caption_assets.end() ? shared_ptr<dcp::TextAsset>() : written_asset->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); - if (i.first.language) { - a->set_language(i.first.language.get()); + + /* Fill in some details for the reel asset if we know them */ + if (asset && written_asset != _closed_caption_assets.end()) { + asset->set_annotation_text(written_asset->first.name); + if (written_asset->first.language) { + asset->set_language(written_asset->first.language.get()); + } } - ensure_closed_captions.erase(i.first); + if (asset) { + /* We made a reel asset for this track, so we don't need to worry about it any more */ + iter = ensure_closed_captions.erase(iter); + } else { + ++iter; + } } /* Make empty tracks for anything we've been asked to ensure but that we haven't added */ diff --git a/src/lib/subtitle_sync_packet_queue.cc b/src/lib/subtitle_sync_packet_queue.cc new file mode 100644 index 000000000..6a96924df --- /dev/null +++ b/src/lib/subtitle_sync_packet_queue.cc @@ -0,0 +1,99 @@ +/* + Copyright (C) 2026 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_log.h" +#include "subtitle_sync_packet_queue.h" +extern "C" { +#include <libavcodec/packet.h> +#include <libavutil/avutil.h> +} +#include <iostream> + + +using boost::optional; + + +void +SubtitleSyncPacketQueue::add(AVPacket* packet, Type type) +{ + switch (type) { + case Type::VIDEO: + ++_num_video; + _other.push_back({packet, type}); + break; + case Type::AUDIO: + _other.push_back({packet, type}); + break; + case Type::DROP: + _other.push_back({PacketInfo(packet), type}); + av_packet_free(&packet); + break; + case Type::SUBTITLE: + _subtitle.push_back(packet); + break; + } +} + + +optional<std::pair<PacketQueue::Packet, PacketQueue::Type>> +SubtitleSyncPacketQueue::get(bool flushing) +{ + if (!_subtitle.empty()) { + /* Any subtitle packets we have get returned first */ + auto packet = _subtitle.front(); + _subtitle.pop_front(); + return std::make_pair(Packet(packet), Type::SUBTITLE); + } + + if (_other.size() > 4096) { + LOG_WARNING("SubtitleSyncPacketQueue is getting large: {} (_num_video={})", _other.size(), _num_video); + } + + if ((!flushing && _num_video < 48 && _other.size() < 8192) || _other.empty()) { + /* We haven't queued up enough video yet, or we don't have anything */ + return boost::none; + } + + auto packet = _other.front(); + if (packet.second == Type::VIDEO) { + --_num_video; + } + _other.pop_front(); + return packet; +} + + +void +SubtitleSyncPacketQueue::clear() +{ + for (auto i: _other) { + if (auto packet = boost::get<AVPacket*>(&i.first)) { + av_packet_free(packet); + } + } + for (auto i: _subtitle) { + av_packet_free(&i); + } + _other.clear(); + _subtitle.clear(); + _num_video = 0; +} + diff --git a/src/lib/subtitle_sync_packet_queue.h b/src/lib/subtitle_sync_packet_queue.h new file mode 100644 index 000000000..203b99bf2 --- /dev/null +++ b/src/lib/subtitle_sync_packet_queue.h @@ -0,0 +1,62 @@ +/* + Copyright (C) 2026 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/>. + +*/ + + +/** @file src/lib/subtitle_sync_packet_queue.h + * @brief SubtitleSyncPacketQueue class. + */ + + +#include "packet_queue.h" +#include <boost/variant.hpp> +#include <cstdint> +#include <deque> + +struct AVPacket; + + +/** @class PacketQueue + * @brief A queue of FFmpeg packets, used to re-order them so that + * subtitles do not arrive too late. + */ +class SubtitleSyncPacketQueue : public PacketQueue +{ +public: + /** Add a packet to the queue. Does not ref the packet; we expect + * the packet to be freed when it comes out of get() (or by clear()). + */ + void add(AVPacket* packet, Type type) override; + + /** Get the next packet to process. + * @param flushing should be true if we are flushing at the end of a decode. + * When this is true the queue will be emptied without trying to re-order it. + * Returns boost::none when there are no more packets to get. + */ + boost::optional<std::pair<Packet, Type>> get(bool flushing) override; + + /** Clear the queue. Packets will be freed. */ + void clear() override; + +private: + int _num_video = 0; + std::deque<AVPacket*> _subtitle; + std::deque<std::pair<Packet, Type>> _other; +}; + diff --git a/src/lib/text_ring_buffers.cc b/src/lib/text_ring_buffers.cc index e2be7bf41..3650bf6a0 100644 --- a/src/lib/text_ring_buffers.cc +++ b/src/lib/text_ring_buffers.cc @@ -28,17 +28,17 @@ using namespace dcpomatic; void -TextRingBuffers::put (PlayerText text, DCPTextTrack track, DCPTimePeriod period) +TextRingBuffers::put(PlayerText text, DCPTextTrack track, DCPTimePeriod period) { - boost::mutex::scoped_lock lm (_mutex); - _data.push_back (Data(text, track, period)); + boost::mutex::scoped_lock lm(_mutex); + _data.push_back(Data(text, track, period)); } optional<TextRingBuffers::Data> -TextRingBuffers::get () +TextRingBuffers::get() { - boost::mutex::scoped_lock lm (_mutex); + boost::mutex::scoped_lock lm(_mutex); if (_data.empty()) { return {}; } @@ -50,7 +50,7 @@ TextRingBuffers::get () void -TextRingBuffers::clear () +TextRingBuffers::clear() { - _data.clear (); + _data.clear(); } diff --git a/src/lib/text_ring_buffers.h b/src/lib/text_ring_buffers.h index 1f366fc0b..b924a9634 100644 --- a/src/lib/text_ring_buffers.h +++ b/src/lib/text_ring_buffers.h @@ -33,13 +33,13 @@ class TextRingBuffers { public: - void put (PlayerText text, DCPTextTrack track, dcpomatic::DCPTimePeriod period); + void put(PlayerText text, DCPTextTrack track, dcpomatic::DCPTimePeriod period); struct Data { - Data (PlayerText text_, DCPTextTrack track_, dcpomatic::DCPTimePeriod period_) - : text (text_) - , track (track_) - , period (period_) + Data(PlayerText text_, DCPTextTrack track_, dcpomatic::DCPTimePeriod period_) + : text(text_) + , track(track_) + , period(period_) {} PlayerText text; @@ -47,8 +47,8 @@ public: dcpomatic::DCPTimePeriod period; }; - boost::optional<Data> get (); - void clear (); + boost::optional<Data> get(); + void clear(); private: boost::mutex _mutex; diff --git a/src/lib/util.cc b/src/lib/util.cc index adc347ab1..60b93a0c4 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -171,7 +171,7 @@ time_to_hmsf(DCPTime time, Frame rate) m -= h * 60; char buffer[64]; - snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d.%02d", h, m, s, static_cast<int>(f)); + snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d:%02d", h, m, s, static_cast<int>(f)); return buffer; } @@ -842,26 +842,6 @@ remap(shared_ptr<const AudioBuffers> input, int output_channels, AudioMapping ma } -size_t -utf8_strlen(string s) -{ - size_t const len = s.length(); - int N = 0; - for (size_t i = 0; i < len; ++i) { - unsigned char c = s[i]; - if ((c & 0xe0) == 0xc0) { - ++i; - } else if ((c & 0xf0) == 0xe0) { - i += 2; - } else if ((c & 0xf8) == 0xf0) { - i += 3; - } - ++N; - } - return N; -} - - /** @param size Size of picture that the subtitle will be overlaid onto */ void emit_subtitle_image(ContentTimePeriod period, dcp::TextImage sub, dcp::Size size, shared_ptr<TextDecoder> decoder) diff --git a/src/lib/util.h b/src/lib/util.h index aa003ff00..9863e5d94 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -84,7 +84,6 @@ extern std::string atmos_asset_filename(std::shared_ptr<dcp::AtmosAsset> asset, extern std::string careful_string_filter(std::string s, std::wstring allowed = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.+"); 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::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); diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc index b6e350d34..25c0fac62 100644 --- a/src/lib/video_content.cc +++ b/src/lib/video_content.cc @@ -435,8 +435,10 @@ VideoContent::fade(shared_ptr<const Film> film, ContentTime time) const auto const fade_out_time = ContentTime::from_frames(fade_out(), vfr); auto const end = ContentTime::from_frames(length(), vfr) - _parent->trim_end(); auto const time_after_end_fade_start = time - (end - fade_out_time); + /* The first frame of the fade (at time 0) must have some fade */ + auto const fade_amount = time_after_end_fade_start + ContentTime::from_frames(1, vfr); if (time_after_end_fade_start > ContentTime()) { - return std::max(0.0, 1 - static_cast<double>(time_after_end_fade_start.get()) / fade_out_time.get()); + return std::max(0.0, 1 - static_cast<double>(fade_amount.get()) / fade_out_time.get()); } return {}; diff --git a/src/lib/video_mxf_content.cc b/src/lib/video_mxf_content.cc index a26c54473..1accd7a5c 100644 --- a/src/lib/video_mxf_content.cc +++ b/src/lib/video_mxf_content.cc @@ -41,8 +41,8 @@ using boost::optional; using namespace dcpomatic; -VideoMXFContent::VideoMXFContent (boost::filesystem::path path) - : Content (path) +VideoMXFContent::VideoMXFContent(boost::filesystem::path path) + : Content(path) { } @@ -51,12 +51,12 @@ VideoMXFContent::VideoMXFContent (boost::filesystem::path path) 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); + video = VideoContent::from_xml(this, node, version, VideoRange::FULL); } bool -VideoMXFContent::valid_mxf (boost::filesystem::path path) +VideoMXFContent::valid_mxf(boost::filesystem::path path) { Kumu::DefaultLogSink().UnsetFilterFlag(Kumu::LOG_ALLOW_ALL); @@ -71,7 +71,7 @@ VideoMXFContent::valid_mxf (boost::filesystem::path path) try { Kumu::DefaultLogSink().SetFilterFlag(0); - dcp::StereoJ2KPictureAsset sp (path); + dcp::StereoJ2KPictureAsset sp(path); return true; } catch (dcp::MXFFileError& e) { @@ -88,33 +88,33 @@ VideoMXFContent::valid_mxf (boost::filesystem::path path) void VideoMXFContent::examine(shared_ptr<const Film> film, shared_ptr<Job> job, bool tolerant) { - job->set_progress_unknown (); + job->set_progress_unknown(); Content::examine(film, job, tolerant); - video.reset (new VideoContent (this)); + video.reset(new VideoContent(this)); auto examiner = make_shared<VideoMXFExaminer>(shared_from_this()); video->take_from_examiner(film, examiner); - video->unset_colour_conversion (); + video->unset_colour_conversion(); } string -VideoMXFContent::summary () const +VideoMXFContent::summary() const { return fmt::format(_("{} [video]"), path_summary()); } string -VideoMXFContent::technical_summary () const +VideoMXFContent::technical_summary() const { return Content::technical_summary() + " - " + video->technical_summary(); } string -VideoMXFContent::identifier () const +VideoMXFContent::identifier() const { return Content::identifier() + "_" + video->identifier(); } @@ -130,23 +130,23 @@ VideoMXFContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour DCPTime -VideoMXFContent::full_length (shared_ptr<const Film> film) const +VideoMXFContent::full_length(shared_ptr<const Film> film) const { - FrameRateChange const frc (film, shared_from_this()); - return DCPTime::from_frames (llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate()); + FrameRateChange const frc(film, shared_from_this()); + return DCPTime::from_frames(llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate()); } DCPTime -VideoMXFContent::approximate_length () const +VideoMXFContent::approximate_length() const { - return DCPTime::from_frames (video->length_after_3d_combine(), 24); + return DCPTime::from_frames(video->length_after_3d_combine(), 24); } void -VideoMXFContent::add_properties (shared_ptr<const Film> film, list<UserProperty>& p) const +VideoMXFContent::add_properties(shared_ptr<const Film> film, list<UserProperty>& p) const { - Content::add_properties (film, p); - video->add_properties (p); + Content::add_properties(film, p); + video->add_properties(p); } diff --git a/src/lib/video_mxf_content.h b/src/lib/video_mxf_content.h index 4c2d051b0..0383242d5 100644 --- a/src/lib/video_mxf_content.h +++ b/src/lib/video_mxf_content.h @@ -25,21 +25,21 @@ class VideoMXFContent : public Content { public: - VideoMXFContent (boost::filesystem::path path); - VideoMXFContent (cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version); + VideoMXFContent(boost::filesystem::path path); + VideoMXFContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version); - std::shared_ptr<VideoMXFContent> shared_from_this () { + std::shared_ptr<VideoMXFContent> shared_from_this() { return std::dynamic_pointer_cast<VideoMXFContent>(Content::shared_from_this()); } - std::shared_ptr<const VideoMXFContent> shared_from_this () const { + std::shared_ptr<const VideoMXFContent> shared_from_this() const { return std::dynamic_pointer_cast<const VideoMXFContent>(Content::shared_from_this()); } void examine(std::shared_ptr<const Film> film, std::shared_ptr<Job> job, bool tolerant) override; - std::string summary () const override; - std::string technical_summary () const override; - std::string identifier () const override; + std::string summary() const override; + std::string technical_summary() const override; + std::string identifier() const override; void as_xml( xmlpp::Element* element, @@ -48,9 +48,9 @@ public: 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; + 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; - static bool valid_mxf (boost::filesystem::path path); + static bool valid_mxf(boost::filesystem::path path); }; diff --git a/src/lib/wscript b/src/lib/wscript index 8e4b4d783..909b7a3c2 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -170,6 +170,8 @@ sources = """ mpeg2_encoder.cc named_channel.cc overlaps.cc + packet_queue.cc + passthrough_packet_queue.cc pixel_quanta.cc player.cc player_video.cc @@ -208,6 +210,7 @@ sources = """ string_text_file_decoder.cc subtitle_analysis.cc subtitle_film_encoder.cc + subtitle_sync_packet_queue.cc territory_type.cc text_ring_buffers.cc text_type.cc @@ -255,7 +258,7 @@ def build(bld): obj.uselib = """ AVCODEC AVUTIL AVFORMAT AVFILTER SWSCALE BOOST_FILESYSTEM BOOST_THREAD BOOST_DATETIME BOOST_SIGNALS2 BOOST_REGEX - SAMPLERATE POSTPROC TIFF SSH DCP CXML GLIB LZMA XML++ + SAMPLERATE POSTPROC TIFF SSH DCP CXML GLIB LZMA XMLPP CURL ZIP BZ2 FONTCONFIG PANGOMM CAIROMM XMLSEC SUB ICU NETTLE PNG JPEG LEQM_NRT LIBZ SQLITE3 """ |
