summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/analytics.cc22
-rw-r--r--src/lib/atmos_content.cc6
-rw-r--r--src/lib/atmos_content.h2
-rw-r--r--src/lib/atmos_mxf_content.cc13
-rw-r--r--src/lib/atmos_mxf_content.h11
-rw-r--r--src/lib/audio_analysis.cc33
-rw-r--r--src/lib/audio_content.cc12
-rw-r--r--src/lib/audio_content.h2
-rw-r--r--src/lib/audio_decoder.cc10
-rw-r--r--src/lib/audio_filter_graph.cc18
-rw-r--r--src/lib/audio_filter_graph.h3
-rw-r--r--src/lib/audio_mapping.cc17
-rw-r--r--src/lib/audio_mapping.h2
-rw-r--r--src/lib/audio_point.cc4
-rw-r--r--src/lib/butler.cc2
-rw-r--r--src/lib/check_content_job.cc2
-rw-r--r--src/lib/cinema.cc112
-rw-r--r--src/lib/cinema.h59
-rw-r--r--src/lib/cinema_list.cc466
-rw-r--r--src/lib/cinema_list.h126
-rw-r--r--src/lib/colour_conversion.cc49
-rw-r--r--src/lib/colour_conversion.h2
-rw-r--r--src/lib/config.cc629
-rw-r--r--src/lib/config.h196
-rw-r--r--src/lib/constants.h2
-rw-r--r--src/lib/content.cc42
-rw-r--r--src/lib/content.h11
-rw-r--r--src/lib/content_factory.cc44
-rw-r--r--src/lib/content_factory.h3
-rw-r--r--src/lib/content_text.h2
-rw-r--r--src/lib/content_video.h11
-rw-r--r--src/lib/cpu_j2k_encoder_thread.cc62
-rw-r--r--src/lib/cpu_j2k_encoder_thread.h16
-rw-r--r--src/lib/create_cli.cc21
-rw-r--r--src/lib/create_cli.h2
-rw-r--r--src/lib/crop.cc10
-rw-r--r--src/lib/crop.h2
-rw-r--r--src/lib/cross.h16
-rw-r--r--src/lib/cross_common.cc107
-rw-r--r--src/lib/cross_linux.cc7
-rw-r--r--src/lib/cross_osx.cc120
-rw-r--r--src/lib/dcp_content.cc237
-rw-r--r--src/lib/dcp_content.h28
-rw-r--r--src/lib/dcp_content_type.cc3
-rw-r--r--src/lib/dcp_decoder.cc140
-rw-r--r--src/lib/dcp_decoder.h22
-rw-r--r--src/lib/dcp_digest_file.cc34
-rw-r--r--src/lib/dcp_examiner.cc154
-rw-r--r--src/lib/dcp_examiner.h38
-rw-r--r--src/lib/dcp_film_encoder.cc (renamed from src/lib/dcp_encoder.cc)99
-rw-r--r--src/lib/dcp_film_encoder.h (renamed from src/lib/dcp_encoder.h)19
-rw-r--r--src/lib/dcp_subtitle.cc12
-rw-r--r--src/lib/dcp_subtitle.h4
-rw-r--r--src/lib/dcp_subtitle_content.cc34
-rw-r--r--src/lib/dcp_subtitle_content.h13
-rw-r--r--src/lib/dcp_subtitle_decoder.cc16
-rw-r--r--src/lib/dcp_subtitle_decoder.h8
-rw-r--r--src/lib/dcp_text_track.cc4
-rw-r--r--src/lib/dcp_video.cc46
-rw-r--r--src/lib/dcp_video.h11
-rw-r--r--src/lib/dcpomatic_log.h2
-rw-r--r--src/lib/dcpomatic_socket.cc32
-rw-r--r--src/lib/dcpomatic_socket.h9
-rw-r--r--src/lib/dcpomatic_time.cc19
-rw-r--r--src/lib/dcpomatic_time.h7
-rw-r--r--src/lib/decoder_factory.cc21
-rw-r--r--src/lib/dkdm_recipient.cc49
-rw-r--r--src/lib/dkdm_recipient.h18
-rw-r--r--src/lib/dkdm_recipient_list.cc243
-rw-r--r--src/lib/dkdm_recipient_list.h90
-rw-r--r--src/lib/dkdm_wrapper.cc16
-rw-r--r--src/lib/email.cc9
-rw-r--r--src/lib/email.h1
-rw-r--r--src/lib/encode_server.cc18
-rw-r--r--src/lib/encode_server.h6
-rw-r--r--src/lib/encode_server_finder.cc4
-rw-r--r--src/lib/encode_server_finder.h3
-rw-r--r--src/lib/environment_info.cc7
-rw-r--r--src/lib/exceptions.cc7
-rw-r--r--src/lib/exceptions.h62
-rw-r--r--src/lib/export_config.cc18
-rw-r--r--src/lib/export_config.h2
-rw-r--r--src/lib/ffmpeg_audio_stream.cc14
-rw-r--r--src/lib/ffmpeg_audio_stream.h2
-rw-r--r--src/lib/ffmpeg_content.cc39
-rw-r--r--src/lib/ffmpeg_content.h11
-rw-r--r--src/lib/ffmpeg_decoder.cc11
-rw-r--r--src/lib/ffmpeg_examiner.cc19
-rw-r--r--src/lib/ffmpeg_file_encoder.cc25
-rw-r--r--src/lib/ffmpeg_file_encoder.h5
-rw-r--r--src/lib/ffmpeg_film_encoder.cc (renamed from src/lib/ffmpeg_encoder.cc)24
-rw-r--r--src/lib/ffmpeg_film_encoder.h (renamed from src/lib/ffmpeg_encoder.h)6
-rw-r--r--src/lib/ffmpeg_image_proxy.cc4
-rw-r--r--src/lib/ffmpeg_image_proxy.h4
-rw-r--r--src/lib/ffmpeg_stream.cc6
-rw-r--r--src/lib/ffmpeg_stream.h2
-rw-r--r--src/lib/ffmpeg_subtitle_stream.cc10
-rw-r--r--src/lib/ffmpeg_subtitle_stream.h2
-rw-r--r--src/lib/film.cc437
-rw-r--r--src/lib/film.h51
-rw-r--r--src/lib/film_encoder.cc (renamed from src/lib/encoder.cc)8
-rw-r--r--src/lib/film_encoder.h (renamed from src/lib/encoder.h)19
-rw-r--r--src/lib/film_property.h4
-rw-r--r--src/lib/filter.cc3
-rw-r--r--src/lib/font.cc6
-rw-r--r--src/lib/font.h2
-rw-r--r--src/lib/font_id_allocator.cc37
-rw-r--r--src/lib/font_id_allocator.h6
-rw-r--r--src/lib/frame_info.cc84
-rw-r--r--src/lib/frame_info.h45
-rw-r--r--src/lib/grok/context.h291
-rw-r--r--src/lib/grok/messenger.h906
-rw-r--r--src/lib/grok_j2k_encoder_thread.cc72
-rw-r--r--src/lib/grok_j2k_encoder_thread.h41
-rw-r--r--src/lib/hints.cc67
-rw-r--r--src/lib/hints.h12
-rw-r--r--src/lib/http_server.cc255
-rw-r--r--src/lib/http_server.h91
-rw-r--r--src/lib/id.cc30
-rw-r--r--src/lib/id.h48
-rw-r--r--src/lib/image_content.cc13
-rw-r--r--src/lib/image_content.h11
-rw-r--r--src/lib/image_decoder.cc2
-rw-r--r--src/lib/image_proxy.h4
-rw-r--r--src/lib/internal_player_server.cc48
-rw-r--r--src/lib/internal_player_server.h46
-rw-r--r--src/lib/j2k_encoder.cc416
-rw-r--r--src/lib/j2k_encoder.h52
-rw-r--r--src/lib/j2k_encoder_thread.cc58
-rw-r--r--src/lib/j2k_encoder_thread.h53
-rw-r--r--src/lib/j2k_image_proxy.cc20
-rw-r--r--src/lib/j2k_image_proxy.h10
-rw-r--r--src/lib/j2k_sync_encoder_thread.cc65
-rw-r--r--src/lib/j2k_sync_encoder_thread.h32
-rw-r--r--src/lib/job.cc38
-rw-r--r--src/lib/job.h3
-rw-r--r--src/lib/kdm_cli.cc297
-rw-r--r--src/lib/kdm_recipient.cc8
-rw-r--r--src/lib/kdm_with_metadata.h7
-rw-r--r--src/lib/log_entry.cc1
-rw-r--r--src/lib/log_entry.h1
-rw-r--r--src/lib/make_dcp.cc17
-rw-r--r--src/lib/make_dcp.h2
-rw-r--r--src/lib/map_cli.cc19
-rw-r--r--src/lib/mpeg2_encoder.cc80
-rw-r--r--src/lib/mpeg2_encoder.h42
-rw-r--r--src/lib/overlaps.cc3
-rw-r--r--src/lib/overlaps.h7
-rw-r--r--src/lib/path_behaviour.h33
-rw-r--r--src/lib/pixel_quanta.cc4
-rw-r--r--src/lib/player.cc344
-rw-r--r--src/lib/player.h13
-rw-r--r--src/lib/player_video.cc45
-rw-r--r--src/lib/player_video.h8
-rw-r--r--src/lib/playlist.cc13
-rw-r--r--src/lib/playlist.h5
-rw-r--r--src/lib/po/cs_CZ.po947
-rw-r--r--src/lib/po/da_DK.po945
-rw-r--r--src/lib/po/de_DE.po953
-rw-r--r--src/lib/po/es_ES.po940
-rw-r--r--src/lib/po/fa_IR.po1298
-rw-r--r--src/lib/po/fr_FR.po950
-rw-r--r--src/lib/po/hu_HU.po891
-rw-r--r--src/lib/po/it_IT.po920
-rw-r--r--src/lib/po/ka_KA.po872
-rw-r--r--src/lib/po/nl_NL.po1054
-rw-r--r--src/lib/po/pl_PL.po945
-rw-r--r--src/lib/po/pt_BR.po905
-rw-r--r--src/lib/po/pt_PT.po901
-rw-r--r--src/lib/po/ru_RU.po945
-rw-r--r--src/lib/po/sk_SK.po900
-rw-r--r--src/lib/po/sl_SI.po939
-rw-r--r--src/lib/po/sv_SE.po944
-rw-r--r--src/lib/po/tr_TR.po872
-rw-r--r--src/lib/po/uk_UA.po918
-rw-r--r--src/lib/po/zh_CN.po943
-rw-r--r--src/lib/raw_image_proxy.cc10
-rw-r--r--src/lib/raw_image_proxy.h2
-rw-r--r--src/lib/reel_writer.cc314
-rw-r--r--src/lib/reel_writer.h48
-rw-r--r--src/lib/referenced_reel_asset.cc3
-rw-r--r--src/lib/release_notes.cc64
-rw-r--r--src/lib/remembered_asset.cc97
-rw-r--r--src/lib/remembered_asset.h79
-rw-r--r--src/lib/remote_j2k_encoder_thread.cc84
-rw-r--r--src/lib/remote_j2k_encoder_thread.h21
-rw-r--r--src/lib/render_text.cc56
-rw-r--r--src/lib/rgba.cc10
-rw-r--r--src/lib/rgba.h2
-rw-r--r--src/lib/screen.cc58
-rw-r--r--src/lib/screen.h17
-rw-r--r--src/lib/send_problem_report_job.cc11
-rw-r--r--src/lib/server.cc19
-rw-r--r--src/lib/server.h1
-rw-r--r--src/lib/shuffler.cc18
-rw-r--r--src/lib/spl.cc6
-rw-r--r--src/lib/spl_entry.cc2
-rw-r--r--src/lib/sqlite_statement.cc111
-rw-r--r--src/lib/sqlite_statement.h50
-rw-r--r--src/lib/sqlite_table.cc79
-rw-r--r--src/lib/sqlite_table.h54
-rw-r--r--src/lib/sqlite_transaction.cc50
-rw-r--r--src/lib/sqlite_transaction.h40
-rw-r--r--src/lib/state.cc2
-rw-r--r--src/lib/string_text.h10
-rw-r--r--src/lib/string_text_file_content.cc14
-rw-r--r--src/lib/string_text_file_content.h11
-rw-r--r--src/lib/string_text_file_decoder.cc4
-rw-r--r--src/lib/subtitle_analysis.cc16
-rw-r--r--src/lib/subtitle_film_encoder.cc (renamed from src/lib/subtitle_encoder.cc)32
-rw-r--r--src/lib/subtitle_film_encoder.h (renamed from src/lib/subtitle_encoder.h)12
-rw-r--r--src/lib/text_content.cc80
-rw-r--r--src/lib/text_content.h6
-rw-r--r--src/lib/text_decoder.cc11
-rw-r--r--src/lib/text_decoder.h6
-rw-r--r--src/lib/text_type.cc25
-rw-r--r--src/lib/text_type.h7
-rw-r--r--src/lib/transcode_job.cc28
-rw-r--r--src/lib/transcode_job.h12
-rw-r--r--src/lib/types.h6
-rw-r--r--src/lib/unzipper.cc14
-rw-r--r--src/lib/unzipper.h3
-rw-r--r--src/lib/util.cc94
-rw-r--r--src/lib/util.h27
-rw-r--r--src/lib/variant.cc179
-rw-r--r--src/lib/variant.h56
-rw-r--r--src/lib/verify_dcp_job.cc4
-rw-r--r--src/lib/verify_dcp_job.h6
-rw-r--r--src/lib/video_content.cc64
-rw-r--r--src/lib/video_content.h4
-rw-r--r--src/lib/video_decoder.cc111
-rw-r--r--src/lib/video_decoder.h2
-rw-r--r--src/lib/video_encoder.cc64
-rw-r--r--src/lib/video_encoder.h69
-rw-r--r--src/lib/video_encoding.cc58
-rw-r--r--src/lib/video_encoding.h42
-rw-r--r--src/lib/video_mxf_content.cc35
-rw-r--r--src/lib/video_mxf_content.h11
-rw-r--r--src/lib/video_mxf_decoder.cc18
-rw-r--r--src/lib/video_mxf_decoder.h8
-rw-r--r--src/lib/video_mxf_examiner.cc8
-rw-r--r--src/lib/writer.cc74
-rw-r--r--src/lib/writer.h14
-rw-r--r--src/lib/wscript32
244 files changed, 18337 insertions, 11590 deletions
diff --git a/src/lib/analytics.cc b/src/lib/analytics.cc
index 39c80330f..9dcfdcd31 100644
--- a/src/lib/analytics.cc
+++ b/src/lib/analytics.cc
@@ -22,6 +22,7 @@
#include "analytics.h"
#include "compose.hpp"
#include "exceptions.h"
+#include "variant.h"
#include <dcp/filesystem.h>
#include <dcp/raw_convert.h>
#include <dcp/warnings.h>
@@ -61,18 +62,18 @@ Analytics::successful_dcp_encode ()
boost::bind(
boost::ref(Message),
_("Congratulations!"),
- String::compose (_(
- "<h2>You have made %1 DCPs with DCP-o-matic!</h2>"
+ String::compose(_(
+ "<h2>You have made %1 DCPs with %2!</h2>"
"<img width=\"20%%\" src=\"memory:me.jpg\" align=\"center\">"
"<font size=\"+1\">"
"<p>Hello. I'm Carl and I'm the "
- "developer of DCP-o-matic. I work on it in my spare time (with the help "
+ "developer of %3. I work on it in my spare time (with the help "
"of a fine volunteer team of testers and translators) and I release it "
"as free software."
- "<p>If you find DCP-o-matic useful, please consider a donation to the "
+ "<p>If you find %4 useful, please consider a donation to the "
"project. Financial support will help me to spend more "
- "time developing DCP-o-matic and making it better!"
+ "time developing %5 and making it better!"
"<p><ul>"
"<li><a href=\"https://dcpomatic.com/donate_amount?amount=40\">Go to Paypal to donate €40</a>"
@@ -81,7 +82,12 @@ Analytics::successful_dcp_encode ()
"</ul>"
"<p>Thank you!"
- "</font>"), _successful_dcp_encodes
+ "</font>"),
+ _successful_dcp_encodes,
+ variant::dcpomatic(),
+ variant::dcpomatic(),
+ variant::dcpomatic(),
+ variant::dcpomatic()
)
)
);
@@ -95,8 +101,8 @@ Analytics::write () const
xmlpp::Document doc;
auto root = doc.create_root_node ("Analytics");
- root->add_child("Version")->add_child_text(raw_convert<string>(_current_version));
- root->add_child("SuccessfulDCPEncodes")->add_child_text(raw_convert<string>(_successful_dcp_encodes));
+ cxml::add_text_child(root, "Version", raw_convert<string>(_current_version));
+ cxml::add_text_child(root, "SuccessfulDCPEncodes", raw_convert<string>(_successful_dcp_encodes));
try {
doc.write_to_file_formatted(write_path("analytics.xml").string());
diff --git a/src/lib/atmos_content.cc b/src/lib/atmos_content.cc
index ada304dad..22bd431a2 100644
--- a/src/lib/atmos_content.cc
+++ b/src/lib/atmos_content.cc
@@ -63,10 +63,10 @@ AtmosContent::from_xml (Content* parent, cxml::ConstNodePtr node)
void
-AtmosContent::as_xml (xmlpp::Node* node) const
+AtmosContent::as_xml(xmlpp::Element* element) const
{
- node->add_child("AtmosLength")->add_child_text(dcp::raw_convert<string>(_length));
- node->add_child("AtmosEditRate")->add_child_text(_edit_rate.as_string());
+ cxml::add_text_child(element, "AtmosLength", dcp::raw_convert<string>(_length));
+ cxml::add_text_child(element, "AtmosEditRate", _edit_rate.as_string());
}
diff --git a/src/lib/atmos_content.h b/src/lib/atmos_content.h
index afa3c75a2..ffa181497 100644
--- a/src/lib/atmos_content.h
+++ b/src/lib/atmos_content.h
@@ -42,7 +42,7 @@ public:
static std::shared_ptr<AtmosContent> from_xml (Content* parent, cxml::ConstNodePtr node);
- void as_xml (xmlpp::Node* node) const;
+ void as_xml(xmlpp::Element* element) const;
void set_length (Frame len);
diff --git a/src/lib/atmos_mxf_content.cc b/src/lib/atmos_mxf_content.cc
index 82c20e88f..403f98933 100644
--- a/src/lib/atmos_mxf_content.cc
+++ b/src/lib/atmos_mxf_content.cc
@@ -37,6 +37,7 @@ using std::list;
using std::make_shared;
using std::string;
using std::shared_ptr;
+using boost::optional;
using namespace dcpomatic;
@@ -47,8 +48,8 @@ AtmosMXFContent::AtmosMXFContent (boost::filesystem::path path)
}
-AtmosMXFContent::AtmosMXFContent (cxml::ConstNodePtr node, int)
- : Content (node)
+AtmosMXFContent::AtmosMXFContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int)
+ : Content(node, film_directory)
{
atmos = AtmosContent::from_xml (this, node);
}
@@ -98,11 +99,11 @@ AtmosMXFContent::summary () const
void
-AtmosMXFContent::as_xml (xmlpp::Node* node, bool with_paths) const
+AtmosMXFContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
- node->add_child("Type")->add_child_text("AtmosMXF");
- Content::as_xml (node, with_paths);
- atmos->as_xml (node);
+ cxml::add_text_child(element, "Type", "AtmosMXF");
+ Content::as_xml(element, with_paths, path_behaviour, film_directory);
+ atmos->as_xml(element);
}
diff --git a/src/lib/atmos_mxf_content.h b/src/lib/atmos_mxf_content.h
index 57f041774..b0bdeb92f 100644
--- a/src/lib/atmos_mxf_content.h
+++ b/src/lib/atmos_mxf_content.h
@@ -27,7 +27,7 @@ class AtmosMXFContent : public Content
{
public:
AtmosMXFContent (boost::filesystem::path path);
- AtmosMXFContent (cxml::ConstNodePtr node, int version);
+ AtmosMXFContent (cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version);
std::shared_ptr<AtmosMXFContent> shared_from_this () {
return std::dynamic_pointer_cast<AtmosMXFContent> (Content::shared_from_this());
@@ -39,7 +39,14 @@ public:
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job> job) override;
std::string summary () const override;
- void as_xml (xmlpp::Node* node, bool with_path) const override;
+
+ void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const override;
+
dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override;
dcpomatic::DCPTime approximate_length () const override;
diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc
index b8c2e072d..ac990ee18 100644
--- a/src/lib/audio_analysis.cc
+++ b/src/lib/audio_analysis.cc
@@ -84,11 +84,8 @@ AudioAnalysis::AudioAnalysis (boost::filesystem::path filename)
}
for (auto i: f.node_children ("SamplePeak")) {
- _sample_peak.push_back (
- PeakTime(
- dcp::raw_convert<float>(i->content()), DCPTime(i->number_attribute<Frame>("Time"))
- )
- );
+ auto const time = number_attribute<Frame>(i, "Time", "time");
+ _sample_peak.push_back(PeakTime(dcp::raw_convert<float>(i->content()), DCPTime(time)));
}
for (auto i: f.node_children("TruePeak")) {
@@ -141,44 +138,44 @@ void
AudioAnalysis::write (boost::filesystem::path filename)
{
auto doc = make_shared<xmlpp::Document>();
- xmlpp::Element* root = doc->create_root_node ("AudioAnalysis");
+ auto root = doc->create_root_node("AudioAnalysis");
- root->add_child("Version")->add_child_text(raw_convert<string>(_current_state_version));
+ cxml::add_text_child(root, "Version", raw_convert<string>(_current_state_version));
for (auto& i: _data) {
- auto channel = root->add_child ("Channel");
+ auto channel = cxml::add_child(root, "Channel");
for (auto& j: i) {
- j.as_xml (channel->add_child ("Point"));
+ j.as_xml(cxml::add_child(channel, "Point"));
}
}
for (size_t i = 0; i < _sample_peak.size(); ++i) {
- auto n = root->add_child("SamplePeak");
+ auto n = cxml::add_child(root, "SamplePeak");
n->add_child_text (raw_convert<string> (_sample_peak[i].peak));
- n->set_attribute ("Time", raw_convert<string> (_sample_peak[i].time.get()));
+ n->set_attribute("time", raw_convert<string> (_sample_peak[i].time.get()));
}
for (auto i: _true_peak) {
- root->add_child("TruePeak")->add_child_text (raw_convert<string> (i));
+ cxml::add_text_child(root, "TruePeak", raw_convert<string>(i));
}
if (_integrated_loudness) {
- root->add_child("IntegratedLoudness")->add_child_text (raw_convert<string> (_integrated_loudness.get ()));
+ cxml::add_text_child(root, "IntegratedLoudness", raw_convert<string>(_integrated_loudness.get()));
}
if (_loudness_range) {
- root->add_child("LoudnessRange")->add_child_text (raw_convert<string> (_loudness_range.get ()));
+ cxml::add_text_child(root, "LoudnessRange", raw_convert<string>(_loudness_range.get()));
}
if (_analysis_gain) {
- root->add_child("AnalysisGain")->add_child_text (raw_convert<string> (_analysis_gain.get ()));
+ cxml::add_text_child(root, "AnalysisGain", raw_convert<string>(_analysis_gain.get()));
}
- root->add_child("SamplesPerPoint")->add_child_text (raw_convert<string> (_samples_per_point));
- root->add_child("SampleRate")->add_child_text (raw_convert<string> (_sample_rate));
+ cxml::add_text_child(root, "SamplesPerPoint", raw_convert<string>(_samples_per_point));
+ cxml::add_text_child(root, "SampleRate", raw_convert<string>(_sample_rate));
if (_leqm) {
- root->add_child("Leqm")->add_child_text(raw_convert<string>(*_leqm));
+ cxml::add_text_child(root, "Leqm", raw_convert<string>(*_leqm));
}
doc->write_to_file_formatted (filename.string ());
diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc
index 16f2bd5f1..2569e1cf0 100644
--- a/src/lib/audio_content.cc
+++ b/src/lib/audio_content.cc
@@ -124,14 +124,14 @@ AudioContent::AudioContent (Content* parent, vector<shared_ptr<Content>> c)
void
-AudioContent::as_xml (xmlpp::Node* node) const
+AudioContent::as_xml(xmlpp::Element* element) const
{
boost::mutex::scoped_lock lm (_mutex);
- node->add_child("AudioGain")->add_child_text(raw_convert<string>(_gain));
- node->add_child("AudioDelay")->add_child_text(raw_convert<string>(_delay));
- node->add_child("AudioFadeIn")->add_child_text(raw_convert<string>(_fade_in.get()));
- node->add_child("AudioFadeOut")->add_child_text(raw_convert<string>(_fade_out.get()));
- node->add_child("AudioUseSameFadesAsVideo")->add_child_text(_use_same_fades_as_video ? "1" : "0");
+ cxml::add_text_child(element, "AudioGain", raw_convert<string>(_gain));
+ cxml::add_text_child(element, "AudioDelay", raw_convert<string>(_delay));
+ cxml::add_text_child(element, "AudioFadeIn", raw_convert<string>(_fade_in.get()));
+ cxml::add_text_child(element, "AudioFadeOut", raw_convert<string>(_fade_out.get()));
+ cxml::add_text_child(element, "AudioUseSameFadesAsVideo", _use_same_fades_as_video ? "1" : "0");
}
diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h
index 084871c8b..2a140b3e4 100644
--- a/src/lib/audio_content.h
+++ b/src/lib/audio_content.h
@@ -56,7 +56,7 @@ public:
AudioContent (Content* parent, std::vector<std::shared_ptr<Content>>);
AudioContent (Content* parent, cxml::ConstNodePtr);
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
std::string technical_summary () const;
void take_settings_from (std::shared_ptr<const AudioContent> c);
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc
index 61ff5d265..60b0f07ad 100644
--- a/src/lib/audio_decoder.cc
+++ b/src/lib/audio_decoder.cc
@@ -64,9 +64,10 @@ AudioDecoder::emit(shared_ptr<const Film> film, AudioStreamPtr stream, shared_pt
}
/* Amount of error we will tolerate on audio timestamps; see comment below.
- * We'll use 1 24fps video frame as this seems to be roughly how ffplay does it.
+ * ffplay seems to use 1 24fps video frame, but I was sent a file that played
+ * fine in VLC but not here until the slack was increased to 4 frames @ 24fps.
*/
- Frame const slack_frames = resampled_rate / 24;
+ Frame const slack_frames = 4 * resampled_rate / 24;
/* first_since_seek is set to true if this is the first data we have
received since initialisation or seek. We'll set the position based
@@ -83,10 +84,11 @@ AudioDecoder::emit(shared_ptr<const Film> film, AudioStreamPtr stream, shared_pt
if (need_reset) {
LOG_GENERAL (
- "Reset audio position: was %1, new data at %2, slack: %3 frames",
+ "Reset audio position: was %1, new data at %2, slack: %3 frames (more than threshold %4)",
_positions[stream],
time.frames_round(resampled_rate),
- std::abs(_positions[stream] - time.frames_round(resampled_rate))
+ std::abs(_positions[stream] - time.frames_round(resampled_rate)),
+ slack_frames
);
}
diff --git a/src/lib/audio_filter_graph.cc b/src/lib/audio_filter_graph.cc
index 4e3052d57..55a26cdb2 100644
--- a/src/lib/audio_filter_graph.cc
+++ b/src/lib/audio_filter_graph.cc
@@ -48,11 +48,7 @@ AudioFilterGraph::AudioFilterGraph (int sample_rate, int channels)
/* FFmpeg doesn't know any channel layouts for any counts between 8 and 16,
so we need to tell it we're using 16 channels if we are using more than 8.
*/
- if (_channels > 8) {
- _channel_layout = av_get_default_channel_layout (16);
- } else {
- _channel_layout = av_get_default_channel_layout (_channels);
- }
+ av_channel_layout_default(&_channel_layout, _channels > 8 ? 16 : _channels);
_in_frame = av_frame_alloc ();
if (_in_frame == nullptr) {
@@ -69,7 +65,7 @@ string
AudioFilterGraph::src_parameters () const
{
char layout[64];
- av_get_channel_layout_string (layout, sizeof(layout), 0, _channel_layout);
+ av_channel_layout_describe(&_channel_layout, layout, sizeof(layout));
char buffer[256];
snprintf (
@@ -88,8 +84,9 @@ AudioFilterGraph::set_parameters (AVFilterContext* context) const
int r = av_opt_set_int_list (context, "sample_fmts", sample_fmts, AV_SAMPLE_FMT_NONE, AV_OPT_SEARCH_CHILDREN);
DCPOMATIC_ASSERT (r >= 0);
- int64_t channel_layouts[] = { _channel_layout, -1 };
- r = av_opt_set_int_list (context, "channel_layouts", channel_layouts, -1, AV_OPT_SEARCH_CHILDREN);
+ char ch_layout[64];
+ av_channel_layout_describe(&_channel_layout, ch_layout, sizeof(ch_layout));
+ r = av_opt_set(context, "ch_layouts", ch_layout, AV_OPT_SEARCH_CHILDREN);
DCPOMATIC_ASSERT (r >= 0);
int sample_rates[] = { _sample_rate, -1 };
@@ -114,7 +111,7 @@ void
AudioFilterGraph::process (shared_ptr<AudioBuffers> buffers)
{
DCPOMATIC_ASSERT (buffers->frames() > 0);
- int const process_channels = av_get_channel_layout_nb_channels (_channel_layout);
+ int const process_channels = _channel_layout.nb_channels;
DCPOMATIC_ASSERT (process_channels >= buffers->channels());
if (buffers->channels() < process_channels) {
@@ -144,8 +141,7 @@ AudioFilterGraph::process (shared_ptr<AudioBuffers> buffers)
_in_frame->nb_samples = buffers->frames ();
_in_frame->format = AV_SAMPLE_FMT_FLTP;
_in_frame->sample_rate = _sample_rate;
- _in_frame->channel_layout = _channel_layout;
- _in_frame->channels = process_channels;
+ _in_frame->ch_layout = _channel_layout;
int r = av_buffersrc_write_frame (_buffer_src_context, _in_frame);
diff --git a/src/lib/audio_filter_graph.h b/src/lib/audio_filter_graph.h
index e5c55fa27..6d09f15be 100644
--- a/src/lib/audio_filter_graph.h
+++ b/src/lib/audio_filter_graph.h
@@ -26,6 +26,7 @@
#include "filter_graph.h"
extern "C" {
#include <libavfilter/buffersink.h>
+#include <libavutil/channel_layout.h>
}
class AudioBuffers;
@@ -47,7 +48,7 @@ protected:
private:
int _sample_rate;
int _channels;
- int64_t _channel_layout;
+ AVChannelLayout _channel_layout;
AVFrame* _in_frame;
};
diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc
index b8aa6249f..37929001d 100644
--- a/src/lib/audio_mapping.cc
+++ b/src/lib/audio_mapping.cc
@@ -24,6 +24,7 @@
#include "constants.h"
#include "dcpomatic_assert.h"
#include "digester.h"
+#include "util.h"
#include <dcp/raw_convert.h>
#include <dcp/warnings.h>
#include <libcxml/cxml.h>
@@ -169,8 +170,8 @@ AudioMapping::AudioMapping (cxml::ConstNodePtr node, int state_version)
);
} else {
set (
- i->number_attribute<int>("Input"),
- i->number_attribute<int>("Output"),
+ number_attribute<int>(i, "Input", "input"),
+ number_attribute<int>(i, "Output", "output"),
raw_convert<float>(i->content())
);
}
@@ -219,19 +220,19 @@ AudioMapping::get (int input_channel, int output_channel) const
void
-AudioMapping::as_xml (xmlpp::Node* node) const
+AudioMapping::as_xml(xmlpp::Element* element) const
{
auto const input = input_channels();
auto const output = output_channels();
- node->add_child("InputChannels")->add_child_text(raw_convert<string>(input));
- node->add_child("OutputChannels")->add_child_text(raw_convert<string>(output));
+ cxml::add_text_child(element, "InputChannels", raw_convert<string>(input));
+ cxml::add_text_child(element, "OutputChannels", raw_convert<string>(output));
for (int c = 0; c < input; ++c) {
for (int d = 0; d < output; ++d) {
- auto t = node->add_child ("Gain");
- t->set_attribute ("Input", raw_convert<string> (c));
- t->set_attribute ("Output", raw_convert<string> (d));
+ auto t = cxml::add_child(element, "Gain");
+ t->set_attribute("input", raw_convert<string>(c));
+ t->set_attribute("output", raw_convert<string>(d));
t->add_child_text (raw_convert<string> (get (c, d)));
}
}
diff --git a/src/lib/audio_mapping.h b/src/lib/audio_mapping.h
index fe9a79789..68487d908 100644
--- a/src/lib/audio_mapping.h
+++ b/src/lib/audio_mapping.h
@@ -52,7 +52,7 @@ public:
/* Default copy constructor is fine */
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
void make_zero ();
void make_default (AudioProcessor const * processor, boost::optional<boost::filesystem::path> filename = boost::optional<boost::filesystem::path>());
diff --git a/src/lib/audio_point.cc b/src/lib/audio_point.cc
index 1f32d25fc..036904520 100644
--- a/src/lib/audio_point.cc
+++ b/src/lib/audio_point.cc
@@ -72,6 +72,6 @@ AudioPoint::operator= (AudioPoint const & other)
void
AudioPoint::as_xml (xmlpp::Element* parent) const
{
- parent->add_child("Peak")->add_child_text(raw_convert<string>(_data[PEAK]));
- parent->add_child("RMS")->add_child_text(raw_convert<string>(_data[RMS]));
+ cxml::add_text_child(parent, "Peak", raw_convert<string>(_data[PEAK]));
+ cxml::add_text_child(parent, "RMS", raw_convert<string>(_data[RMS]));
}
diff --git a/src/lib/butler.cc b/src/lib/butler.cc
index b2fbc6c60..dd9874587 100644
--- a/src/lib/butler.cc
+++ b/src/lib/butler.cc
@@ -138,7 +138,7 @@ Butler::should_run () const
{
if (_video.size() >= MAXIMUM_VIDEO_READAHEAD * 10) {
/* This is way too big */
- optional<DCPTime> pos = _audio.peek();
+ auto pos = _audio.peek();
if (pos) {
throw ProgrammingError
(__FILE__, __LINE__, String::compose ("Butler video buffers reached %1 frames (audio is %2 at %3)", _video.size(), _audio.size(), pos->get()));
diff --git a/src/lib/check_content_job.cc b/src/lib/check_content_job.cc
index f37890abf..2028b01ac 100644
--- a/src/lib/check_content_job.cc
+++ b/src/lib/check_content_job.cc
@@ -70,7 +70,7 @@ CheckContentJob::run ()
std::vector<shared_ptr<Content>> changed;
std::copy_if (content.begin(), content.end(), std::back_inserter(changed), [](shared_ptr<Content> c) { return c->changed(); });
- if (_film->last_written_by_earlier_than(2, 16, 15)) {
+ if (_film->last_written_by_earlier_than(2, 17, 17)) {
for (auto c: content) {
if (auto stf = dynamic_pointer_cast<StringTextFileContent>(c)) {
stf->check_font_ids();
diff --git a/src/lib/cinema.cc b/src/lib/cinema.cc
deleted file mode 100644
index 3b4b9d7b6..000000000
--- a/src/lib/cinema.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
-
- This file is part of DCP-o-matic.
-
- DCP-o-matic is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- DCP-o-matic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-
-#include "cinema.h"
-#include "screen.h"
-#include "dcpomatic_assert.h"
-#include <libcxml/cxml.h>
-#include <dcp/raw_convert.h>
-#include <libxml++/libxml++.h>
-
-
-using std::make_shared;
-using std::shared_ptr;
-using std::string;
-using dcp::raw_convert;
-using dcpomatic::Screen;
-
-
-Cinema::Cinema (cxml::ConstNodePtr node)
- : name (node->string_child ("Name"))
- , notes (node->optional_string_child("Notes").get_value_or(""))
-{
- for (auto i: node->node_children("Email")) {
- emails.push_back (i->content ());
- }
-
- if (node->optional_number_child<int>("UTCOffset")) {
- _utc_offset_hour = node->number_child<int>("UTCOffset");
- } else {
- _utc_offset_hour = node->optional_number_child<int>("UTCOffsetHour").get_value_or (0);
- }
-
- _utc_offset_minute = node->optional_number_child<int>("UTCOffsetMinute").get_value_or (0);
-}
-
-/* This is necessary so that we can use shared_from_this in add_screen (which cannot be done from
- a constructor)
-*/
-void
-Cinema::read_screens (cxml::ConstNodePtr node)
-{
- for (auto i: node->node_children("Screen")) {
- add_screen (make_shared<Screen>(i));
- }
-}
-
-void
-Cinema::as_xml (xmlpp::Element* parent) const
-{
- parent->add_child("Name")->add_child_text (name);
-
- for (auto i: emails) {
- parent->add_child("Email")->add_child_text (i);
- }
-
- parent->add_child("Notes")->add_child_text (notes);
-
- parent->add_child("UTCOffsetHour")->add_child_text (raw_convert<string> (_utc_offset_hour));
- parent->add_child("UTCOffsetMinute")->add_child_text (raw_convert<string> (_utc_offset_minute));
-
- for (auto i: _screens) {
- i->as_xml (parent->add_child ("Screen"));
- }
-}
-
-void
-Cinema::add_screen (shared_ptr<Screen> s)
-{
- s->cinema = shared_from_this ();
- _screens.push_back (s);
-}
-
-void
-Cinema::remove_screen (shared_ptr<Screen> s)
-{
- auto iter = std::find(_screens.begin(), _screens.end(), s);
- if (iter != _screens.end()) {
- _screens.erase(iter);
- }
-}
-
-void
-Cinema::set_utc_offset_hour (int h)
-{
- DCPOMATIC_ASSERT (h >= -11 && h <= 12);
- _utc_offset_hour = h;
-}
-
-void
-Cinema::set_utc_offset_minute (int m)
-{
- DCPOMATIC_ASSERT (m >= 0 && m <= 59);
- _utc_offset_minute = m;
-}
diff --git a/src/lib/cinema.h b/src/lib/cinema.h
index 6c202a7bf..44f232f91 100644
--- a/src/lib/cinema.h
+++ b/src/lib/cinema.h
@@ -18,76 +18,35 @@
*/
+
/** @file src/lib/cinema.h
* @brief Cinema class.
*/
-#include <libcxml/cxml.h>
+#include <dcp/utc_offset.h>
#include <memory>
+#include <string>
+#include <vector>
-namespace xmlpp {
- class Element;
-}
-
-namespace dcpomatic {
- class Screen;
-}
-
/** @class Cinema
* @brief A description of a Cinema for KDM generation.
*
- * This is a cinema name, some metadata and a list of
- * Screen objects.
+ * This is a cinema name and some metadata.
*/
-class Cinema : public std::enable_shared_from_this<Cinema>
+class Cinema
{
public:
- Cinema(std::string const & name_, std::vector<std::string> const & e, std::string notes_, int utc_offset_hour, int utc_offset_minute)
+ Cinema(std::string const & name_, std::vector<std::string> const & e, std::string notes_, dcp::UTCOffset utc_offset_)
: name (name_)
, emails (e)
, notes (notes_)
- , _utc_offset_hour (utc_offset_hour)
- , _utc_offset_minute (utc_offset_minute)
+ , utc_offset(std::move(utc_offset_))
{}
- explicit Cinema (cxml::ConstNodePtr);
-
- void read_screens (cxml::ConstNodePtr);
-
- void as_xml (xmlpp::Element *) const;
-
- void add_screen (std::shared_ptr<dcpomatic::Screen>);
- void remove_screen (std::shared_ptr<dcpomatic::Screen>);
-
- void set_utc_offset_hour (int h);
- void set_utc_offset_minute (int m);
-
std::string name;
std::vector<std::string> emails;
std::string notes;
-
- int utc_offset_hour () const {
- return _utc_offset_hour;
- }
-
- int utc_offset_minute () const {
- return _utc_offset_minute;
- }
-
- std::vector<std::shared_ptr<dcpomatic::Screen>> screens() const {
- return _screens;
- }
-
-private:
- std::vector<std::shared_ptr<dcpomatic::Screen>> _screens;
- /** Offset such that the equivalent time in UTC can be determined
- by subtracting the offset from the local time.
- */
- int _utc_offset_hour;
- /** Additional minutes to add to _utc_offset_hour if _utc_offset_hour is
- positive, or to subtract if _utc_offset_hour is negative.
- */
- int _utc_offset_minute;
+ dcp::UTCOffset utc_offset;
};
diff --git a/src/lib/cinema_list.cc b/src/lib/cinema_list.cc
new file mode 100644
index 000000000..41b9dbab3
--- /dev/null
+++ b/src/lib/cinema_list.cc
@@ -0,0 +1,466 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "cinema.h"
+#include "cinema_list.h"
+#include "config.h"
+#include "dcpomatic_assert.h"
+#include "exceptions.h"
+#include "screen.h"
+#include "sqlite_statement.h"
+#include "sqlite_transaction.h"
+#include "util.h"
+#include <dcp/certificate.h>
+#include <sqlite3.h>
+#include <boost/algorithm/string.hpp>
+#include <iostream>
+#include <numeric>
+
+
+using std::pair;
+using std::make_pair;
+using std::string;
+using std::vector;
+using boost::optional;
+
+
+CinemaList::CinemaList()
+ : _cinemas("cinemas")
+ , _screens("screens")
+ , _trusted_devices("trusted_devices")
+{
+ setup_tables();
+ setup(Config::instance()->cinemas_file());
+}
+
+
+CinemaList::CinemaList(boost::filesystem::path db_file)
+ : _cinemas("cinemas")
+ , _screens("screens")
+ , _trusted_devices("trusted_devices")
+{
+ setup_tables();
+ setup(db_file);
+}
+
+
+void
+CinemaList::setup_tables()
+{
+ _cinemas.add_column("name", "TEXT");
+ _cinemas.add_column("emails", "TEXT");
+ _cinemas.add_column("notes", "TEXT");
+ _cinemas.add_column("utc_offset_hour", "INTEGER");
+ _cinemas.add_column("utc_offset_minute", "INTEGER");
+
+ _screens.add_column("cinema", "INTEGER");
+ _screens.add_column("name", "TEXT");
+ _screens.add_column("notes", "TEXT");
+ _screens.add_column("recipient", "TEXT");
+ _screens.add_column("recipient_file", "TEXT");
+
+ _trusted_devices.add_column("screen", "INTEGER");
+ _trusted_devices.add_column("certificate_or_thumbprint", "TEXT");
+}
+
+
+void
+CinemaList::read_legacy_file(boost::filesystem::path xml_file)
+{
+ cxml::Document doc("Cinemas");
+ doc.read_file(xml_file);
+ read_legacy_document(doc);
+}
+
+
+void
+CinemaList::read_legacy_string(std::string const& xml)
+{
+ cxml::Document doc("Cinemas");
+ doc.read_string(xml);
+ read_legacy_document(doc);
+}
+
+
+void
+CinemaList::read_legacy_document(cxml::Document const& doc)
+{
+ for (auto cinema_node: doc.node_children("Cinema")) {
+ vector<string> emails;
+ for (auto email_node: cinema_node->node_children("Email")) {
+ emails.push_back(email_node->content());
+ }
+
+ int hour = 0;
+ if (cinema_node->optional_number_child<int>("UTCOffset")) {
+ hour = cinema_node->number_child<int>("UTCOffset");
+ } else {
+ hour = cinema_node->optional_number_child<int>("UTCOffsetHour").get_value_or(0);
+ }
+
+ int minute = cinema_node->optional_number_child<int>("UTCOffsetMinute").get_value_or(0);
+
+ Cinema cinema(
+ cinema_node->string_child("Name"),
+ emails,
+ cinema_node->string_child("Notes"),
+ dcp::UTCOffset(hour, minute)
+ );
+
+ auto cinema_id = add_cinema(cinema);
+
+ for (auto screen_node: cinema_node->node_children("Screen")) {
+ optional<dcp::Certificate> recipient;
+ if (auto recipient_string = screen_node->optional_string_child("Recipient")) {
+ recipient = dcp::Certificate(*recipient_string);
+ }
+ vector<TrustedDevice> trusted_devices;
+ for (auto trusted_device_node: screen_node->node_children("TrustedDevice")) {
+ trusted_devices.push_back(TrustedDevice(trusted_device_node->content()));
+ }
+ dcpomatic::Screen screen(
+ screen_node->string_child("Name"),
+ screen_node->string_child("Notes"),
+ recipient,
+ screen_node->optional_string_child("RecipientFile"),
+ trusted_devices
+ );
+ add_screen(cinema_id, screen);
+ }
+ }
+}
+
+
+void
+CinemaList::clear()
+{
+ for (auto table: { "cinemas", "screens", "trusted_devices" }) {
+ SQLiteStatement sql(_db, String::compose("DELETE FROM %1", table));
+ sql.execute();
+ }
+}
+
+
+void
+CinemaList::setup(boost::filesystem::path db_file)
+{
+#ifdef DCPOMATIC_WINDOWS
+ auto rc = sqlite3_open16(db_file.c_str(), &_db);
+#else
+ auto rc = sqlite3_open(db_file.c_str(), &_db);
+#endif
+ if (rc != SQLITE_OK) {
+ throw FileError("Could not open SQLite database", db_file);
+ }
+
+ sqlite3_busy_timeout(_db, 500);
+
+ SQLiteStatement cinemas(_db, _cinemas.create());
+ cinemas.execute();
+
+ SQLiteStatement screens(_db, _screens.create());
+ screens.execute();
+
+ SQLiteStatement devices(_db, _trusted_devices.create());
+ devices.execute();
+}
+
+
+CinemaList::CinemaList(CinemaList&& other)
+ : _db(other._db)
+ , _cinemas(std::move(other._cinemas))
+ , _screens(std::move(other._screens))
+ , _trusted_devices(std::move(other._trusted_devices))
+{
+ other._db = nullptr;
+}
+
+
+CinemaList&
+CinemaList::operator=(CinemaList&& other)
+{
+ if (this != &other) {
+ _db = other._db;
+ other._db = nullptr;
+ }
+ return *this;
+}
+
+
+CinemaID
+CinemaList::add_cinema(Cinema const& cinema)
+{
+ SQLiteStatement statement(_db, _cinemas.insert());
+
+ statement.bind_text(1, cinema.name);
+ statement.bind_text(2, join_strings(cinema.emails));
+ statement.bind_text(3, cinema.notes);
+ statement.bind_int64(4, cinema.utc_offset.hour());
+ statement.bind_int64(5, cinema.utc_offset.minute());
+
+ statement.execute();
+
+ return sqlite3_last_insert_rowid(_db);
+}
+
+
+void
+CinemaList::update_cinema(CinemaID id, Cinema const& cinema)
+{
+ SQLiteStatement statement(_db, _cinemas.update("WHERE id=?"));
+
+ statement.bind_text(1, cinema.name);
+ statement.bind_text(2, join_strings(cinema.emails));
+ statement.bind_text(3, cinema.notes);
+ statement.bind_int64(4, cinema.utc_offset.hour());
+ statement.bind_int64(5, cinema.utc_offset.minute());
+ statement.bind_int64(6, id.get());
+
+ statement.execute();
+}
+
+
+void
+CinemaList::remove_cinema(CinemaID id)
+{
+ SQLiteStatement statement(_db, "DELETE FROM cinemas WHERE ID=?");
+ statement.bind_int64(1, id.get());
+ statement.execute();
+}
+
+
+CinemaList::~CinemaList()
+{
+ if (_db) {
+ sqlite3_close(_db);
+ }
+}
+
+
+static
+vector<pair<CinemaID, Cinema>>
+cinemas_from_result(SQLiteStatement& statement)
+{
+ vector<pair<CinemaID, Cinema>> output;
+
+ statement.execute([&output](SQLiteStatement& statement) {
+ DCPOMATIC_ASSERT(statement.data_count() == 6);
+ CinemaID const id = statement.column_int64(0);
+ auto const name = statement.column_text(1);
+ auto const join_strings = statement.column_text(2);
+ vector<string> emails;
+ boost::algorithm::split(emails, join_strings, boost::is_any_of(" "));
+ auto const notes = statement.column_text(3);
+ auto const utc_offset_hour = static_cast<int>(statement.column_int64(4));
+ auto const utc_offset_minute = static_cast<int>(statement.column_int64(5));
+ output.push_back(make_pair(id, Cinema(name, { emails }, notes, dcp::UTCOffset{utc_offset_hour, utc_offset_minute})));
+ });
+
+ return output;
+}
+
+
+vector<pair<CinemaID, Cinema>>
+CinemaList::cinemas() const
+{
+ SQLiteStatement statement(_db, _cinemas.select("ORDER BY name ASC"));
+ return cinemas_from_result(statement);
+}
+
+
+optional<Cinema>
+CinemaList::cinema(CinemaID id) const
+{
+ SQLiteStatement statement(_db, _cinemas.select("WHERE id=?"));
+ statement.bind_int64(1, id.get());
+ auto result = cinemas_from_result(statement);
+ if (result.empty()) {
+ return {};
+ }
+ return result[0].second;
+}
+
+ScreenID
+CinemaList::add_screen(CinemaID cinema_id, dcpomatic::Screen const& screen)
+{
+ SQLiteTransaction transaction(_db);
+
+ SQLiteStatement add_screen(_db, _screens.insert());
+
+ add_screen.bind_int64(1, cinema_id.get());
+ add_screen.bind_text(2, screen.name);
+ add_screen.bind_text(3, screen.notes);
+ add_screen.bind_text(4, screen.recipient->certificate(true));
+ add_screen.bind_text(5, screen.recipient_file.get_value_or(""));
+
+ add_screen.execute();
+
+ auto const screen_id = sqlite3_last_insert_rowid(_db);
+
+ for (auto device: screen.trusted_devices) {
+ SQLiteStatement add_device(_db, _trusted_devices.insert());
+ add_device.bind_int64(1, screen_id);
+ add_device.bind_text(2, device.as_string());
+ }
+
+ transaction.commit();
+
+ return screen_id;
+}
+
+
+dcpomatic::Screen
+CinemaList::screen_from_result(SQLiteStatement& statement, ScreenID screen_id) const
+{
+ auto certificate_string = statement.column_text(4);
+ optional<dcp::Certificate> certificate = certificate_string.empty() ? optional<dcp::Certificate>() : dcp::Certificate(certificate_string);
+ auto recipient_file_string = statement.column_text(5);
+ optional<string> recipient_file = recipient_file_string.empty() ? optional<string>() : recipient_file_string;
+
+ SQLiteStatement trusted_devices_statement(_db, _trusted_devices.select("WHERE screen=?"));
+ trusted_devices_statement.bind_int64(1, screen_id.get());
+ vector<TrustedDevice> trusted_devices;
+ trusted_devices_statement.execute([&trusted_devices](SQLiteStatement& statement) {
+ DCPOMATIC_ASSERT(statement.data_count() == 1);
+ auto description = statement.column_text(1);
+ if (boost::algorithm::starts_with(description, "-----BEGIN CERTIFICATE")) {
+ trusted_devices.push_back(TrustedDevice(dcp::Certificate(description)));
+ } else {
+ trusted_devices.push_back(TrustedDevice(description));
+ }
+ });
+
+ return dcpomatic::Screen(statement.column_text(2), statement.column_text(3), certificate, recipient_file, trusted_devices);
+}
+
+
+optional<dcpomatic::Screen>
+CinemaList::screen(ScreenID screen_id) const
+{
+ SQLiteStatement statement(_db, _screens.select("WHERE id=?"));
+ statement.bind_int64(1, screen_id.get());
+
+ optional<dcpomatic::Screen> output;
+
+ statement.execute([this, &output, screen_id](SQLiteStatement& statement) {
+ DCPOMATIC_ASSERT(statement.data_count() == 6);
+ output = screen_from_result(statement, screen_id);
+ });
+
+ return output;
+}
+
+
+
+vector<pair<ScreenID, dcpomatic::Screen>>
+CinemaList::screens_from_result(SQLiteStatement& statement) const
+{
+ vector<pair<ScreenID, dcpomatic::Screen>> output;
+
+ statement.execute([this, &output](SQLiteStatement& statement) {
+ DCPOMATIC_ASSERT(statement.data_count() == 6);
+ ScreenID const screen_id = statement.column_int64(0);
+ output.push_back({screen_id, screen_from_result(statement, screen_id)});
+ });
+
+ return output;
+}
+
+
+vector<pair<ScreenID, dcpomatic::Screen>>
+CinemaList::screens(CinemaID cinema_id) const
+{
+ SQLiteStatement statement(_db, _screens.select("WHERE cinema=?"));
+ statement.bind_int64(1, cinema_id.get());
+ return screens_from_result(statement);
+}
+
+
+vector<pair<ScreenID, dcpomatic::Screen>>
+CinemaList::screens_by_cinema_and_name(CinemaID id, std::string const& name) const
+{
+ SQLiteStatement statement(_db, _screens.select("WHERE cinema=? AND name=?"));
+ statement.bind_int64(1, id.get());
+ statement.bind_text(2, name);
+ return screens_from_result(statement);
+}
+
+
+optional<std::pair<CinemaID, Cinema>>
+CinemaList::cinema_by_name_or_email(std::string const& text) const
+{
+ SQLiteStatement statement(_db, _cinemas.select("WHERE name LIKE ? OR EMAILS LIKE ?"));
+ auto const wildcard = string("%") + text + "%";
+ statement.bind_text(1, wildcard);
+ statement.bind_text(2, wildcard);
+
+ auto all = cinemas_from_result(statement);
+ if (all.empty()) {
+ return {};
+ }
+ return all[0];
+}
+
+
+void
+CinemaList::update_screen(ScreenID id, dcpomatic::Screen const& screen)
+{
+ SQLiteStatement statement(_db, _screens.update("WHERE id=?"));
+
+ statement.bind_text(1, screen.name);
+ statement.bind_text(2, screen.notes);
+ statement.bind_text(3, screen.recipient->certificate(true));
+ statement.bind_text(4, screen.recipient_file.get_value_or(""));
+ statement.bind_int64(5, id.get());
+
+ statement.execute();
+}
+
+
+void
+CinemaList::remove_screen(ScreenID id)
+{
+ SQLiteStatement statement(_db, "DELETE FROM screens WHERE ID=?");
+ statement.bind_int64(1, id.get());
+ statement.execute();
+}
+
+
+optional<dcp::UTCOffset>
+CinemaList::unique_utc_offset(std::set<CinemaID> const& cinemas_to_check)
+{
+ optional<dcp::UTCOffset> offset;
+
+ for (auto const& cinema: cinemas()) {
+ if (cinemas_to_check.find(cinema.first) == cinemas_to_check.end()) {
+ continue;
+ }
+
+ if (!offset) {
+ offset = cinema.second.utc_offset;
+ } else if (cinema.second.utc_offset != *offset) {
+ return dcp::UTCOffset();
+ }
+ }
+
+ return offset;
+}
+
diff --git a/src/lib/cinema_list.h b/src/lib/cinema_list.h
new file mode 100644
index 000000000..c91f29476
--- /dev/null
+++ b/src/lib/cinema_list.h
@@ -0,0 +1,126 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_CINEMA_LIST_H
+#define DCPOMATIC_CINEMA_LIST_H
+
+
+#include "id.h"
+#include "sqlite_table.h"
+#include <libcxml/cxml.h>
+#include <dcp/utc_offset.h>
+#include <boost/filesystem.hpp>
+#include <boost/optional.hpp>
+#include <sqlite3.h>
+#include <set>
+
+
+class Cinema;
+namespace dcpomatic {
+ class Screen;
+}
+class SQLiteStatement;
+
+
+class CinemaID : public ID
+{
+public:
+ CinemaID(sqlite3_int64 id)
+ : ID(id) {}
+
+ bool operator<(CinemaID const& other) const {
+ return get() < other.get();
+ }
+};
+
+
+class ScreenID : public ID
+{
+public:
+ ScreenID(sqlite3_int64 id)
+ : ID(id) {}
+
+ bool operator==(ScreenID const& other) const {
+ return get() == other.get();
+ }
+
+ bool operator!=(ScreenID const& other) const {
+ return get() != other.get();
+ }
+
+ bool operator<(ScreenID const& other) const {
+ return get() < other.get();
+ }
+};
+
+
+class CinemaList
+{
+public:
+ CinemaList();
+ CinemaList(boost::filesystem::path db_file);
+ ~CinemaList();
+
+ CinemaList(CinemaList const&) = delete;
+ CinemaList& operator=(CinemaList const&) = delete;
+
+ CinemaList(CinemaList&& other);
+ CinemaList& operator=(CinemaList&& other);
+
+ void read_legacy_file(boost::filesystem::path xml_file);
+ void read_legacy_string(std::string const& xml);
+
+ void clear();
+
+ CinemaID add_cinema(Cinema const& cinema);
+ void update_cinema(CinemaID id, Cinema const& cinema);
+ void remove_cinema(CinemaID id);
+ std::vector<std::pair<CinemaID, Cinema>> cinemas() const;
+ boost::optional<Cinema> cinema(CinemaID id) const;
+ boost::optional<std::pair<CinemaID, Cinema>> cinema_by_partial_name(std::string const& text) const;
+ boost::optional<std::pair<CinemaID, Cinema>> cinema_by_name_or_email(std::string const& text) const;
+
+ ScreenID add_screen(CinemaID cinema_id, dcpomatic::Screen const& screen);
+ void update_screen(ScreenID id, dcpomatic::Screen const& screen);
+ void remove_screen(ScreenID id);
+ boost::optional<dcpomatic::Screen> screen(ScreenID screen_id) const;
+ std::vector<std::pair<ScreenID, dcpomatic::Screen>> screens(CinemaID cinema_id) const;
+ std::vector<std::pair<ScreenID, dcpomatic::Screen>> screens_by_cinema_and_name(CinemaID id, std::string const& name) const;
+
+ boost::optional<dcp::UTCOffset> unique_utc_offset(std::set<CinemaID> const& cinemas);
+
+private:
+ dcpomatic::Screen screen_from_result(SQLiteStatement& statement, ScreenID screen_id) const;
+ std::vector<std::pair<ScreenID, dcpomatic::Screen>> screens_from_result(SQLiteStatement& statement) const;
+ void setup_tables();
+ void setup(boost::filesystem::path db_file);
+ void read_legacy_document(cxml::Document const& doc);
+
+ sqlite3* _db = nullptr;
+ SQLiteTable _cinemas;
+ SQLiteTable _screens;
+ SQLiteTable _trusted_devices;
+};
+
+
+
+#endif
+
diff --git a/src/lib/colour_conversion.cc b/src/lib/colour_conversion.cc
index bd1b47cb1..f1e625812 100644
--- a/src/lib/colour_conversion.cc
+++ b/src/lib/colour_conversion.cc
@@ -151,41 +151,40 @@ ColourConversion::from_xml (cxml::NodePtr node, int version)
}
void
-ColourConversion::as_xml (xmlpp::Node* node) const
+ColourConversion::as_xml(xmlpp::Element* element) const
{
- auto in_node = node->add_child ("InputTransferFunction");
+ auto in_node = cxml::add_child(element, "InputTransferFunction");
if (dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in)) {
auto tf = dynamic_pointer_cast<const dcp::GammaTransferFunction> (_in);
- in_node->add_child("Type")->add_child_text ("Gamma");
- in_node->add_child("Gamma")->add_child_text (raw_convert<string> (tf->gamma ()));
+ cxml::add_text_child(in_node, "Type", "Gamma");
+ cxml::add_text_child(in_node, "Gamma", raw_convert<string>(tf->gamma()));
} else if (dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in)) {
auto tf = dynamic_pointer_cast<const dcp::ModifiedGammaTransferFunction> (_in);
- in_node->add_child("Type")->add_child_text ("ModifiedGamma");
- in_node->add_child("Power")->add_child_text (raw_convert<string> (tf->power ()));
- in_node->add_child("Threshold")->add_child_text (raw_convert<string> (tf->threshold ()));
- in_node->add_child("A")->add_child_text (raw_convert<string> (tf->A ()));
- in_node->add_child("B")->add_child_text (raw_convert<string> (tf->B ()));
- } else if (dynamic_pointer_cast<const dcp::SGamut3TransferFunction> (_in)) {
- in_node->add_child("Type")->add_child_text ("SGamut3");
+ cxml::add_text_child(in_node, "Type", "ModifiedGamma");
+ cxml::add_text_child(in_node, "Power", raw_convert<string>(tf->power ()));
+ cxml::add_text_child(in_node, "Threshold", raw_convert<string>(tf->threshold ()));
+ cxml::add_text_child(in_node, "A", raw_convert<string>(tf->A()));
+ cxml::add_text_child(in_node, "B", raw_convert<string>(tf->B()));
+ } else if (dynamic_pointer_cast<const dcp::SGamut3TransferFunction>(_in)) {
+ cxml::add_text_child(in_node, "Type", "SGamut3");
}
- node->add_child("YUVToRGB")->add_child_text (raw_convert<string> (static_cast<int> (_yuv_to_rgb)));
- node->add_child("RedX")->add_child_text (raw_convert<string> (_red.x));
- node->add_child("RedY")->add_child_text (raw_convert<string> (_red.y));
- node->add_child("GreenX")->add_child_text (raw_convert<string> (_green.x));
- node->add_child("GreenY")->add_child_text (raw_convert<string> (_green.y));
- node->add_child("BlueX")->add_child_text (raw_convert<string> (_blue.x));
- node->add_child("BlueY")->add_child_text (raw_convert<string> (_blue.y));
- node->add_child("WhiteX")->add_child_text (raw_convert<string> (_white.x));
- node->add_child("WhiteY")->add_child_text (raw_convert<string> (_white.y));
+ cxml::add_text_child(element, "YUVToRGB", raw_convert<string>(static_cast<int>(_yuv_to_rgb)));
+ cxml::add_text_child(element, "RedX", raw_convert<string>(_red.x));
+ cxml::add_text_child(element, "RedY", raw_convert<string>(_red.y));
+ cxml::add_text_child(element, "GreenX", raw_convert<string>(_green.x));
+ cxml::add_text_child(element, "GreenY", raw_convert<string>(_green.y));
+ cxml::add_text_child(element, "BlueX", raw_convert<string>(_blue.x));
+ cxml::add_text_child(element, "BlueY", raw_convert<string>(_blue.y));
+ cxml::add_text_child(element, "WhiteX", raw_convert<string>(_white.x));
+ cxml::add_text_child(element, "WhiteY", raw_convert<string>(_white.y));
if (_adjusted_white) {
- node->add_child("AdjustedWhiteX")->add_child_text (raw_convert<string> (_adjusted_white.get().x));
- node->add_child("AdjustedWhiteY")->add_child_text (raw_convert<string> (_adjusted_white.get().y));
+ cxml::add_text_child(element, "AdjustedWhiteX", raw_convert<string>(_adjusted_white.get().x));
+ cxml::add_text_child(element, "AdjustedWhiteY", raw_convert<string>(_adjusted_white.get().y));
}
- if (dynamic_pointer_cast<const dcp::GammaTransferFunction> (_out)) {
- shared_ptr<const dcp::GammaTransferFunction> gf = dynamic_pointer_cast<const dcp::GammaTransferFunction> (_out);
- node->add_child("OutputGamma")->add_child_text (raw_convert<string> (gf->gamma ()));
+ if (auto gf = dynamic_pointer_cast<const dcp::GammaTransferFunction>(_out)) {
+ cxml::add_text_child(element, "OutputGamma", raw_convert<string>(gf->gamma()));
}
}
diff --git a/src/lib/colour_conversion.h b/src/lib/colour_conversion.h
index 73b6ad23c..0c07ddbac 100644
--- a/src/lib/colour_conversion.h
+++ b/src/lib/colour_conversion.h
@@ -41,7 +41,7 @@ public:
ColourConversion (cxml::NodePtr, int version);
virtual ~ColourConversion () {}
- virtual void as_xml (xmlpp::Node *) const;
+ virtual void as_xml(xmlpp::Element*) const;
std::string identifier () const;
boost::optional<size_t> preset () const;
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 5dafd5785..cd285abd1 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -19,20 +19,21 @@
*/
-#include "cinema.h"
+#include "cinema_list.h"
#include "colour_conversion.h"
#include "compose.hpp"
#include "config.h"
#include "constants.h"
#include "cross.h"
#include "dcp_content_type.h"
-#include "dkdm_recipient.h"
+#include "dkdm_recipient_list.h"
#include "dkdm_wrapper.h"
#include "film.h"
#include "filter.h"
#include "log.h"
#include "ratio.h"
#include "unzipper.h"
+#include "variant.h"
#include "zipper.h"
#include <dcp/certificate_chain.h>
#include <dcp/name_format.h>
@@ -107,7 +108,8 @@ Config::set_defaults ()
_default_still_length = 10;
_default_dcp_content_type = DCPContentType::from_isdcf_name ("FTR");
_default_dcp_audio_channels = 8;
- _default_j2k_bandwidth = 150000000;
+ _default_video_bit_rate[VideoEncoding::JPEG2000] = 150000000;
+ _default_video_bit_rate[VideoEncoding::MPEG2] = 5000000;
_default_audio_delay = 0;
_default_interop = false;
_default_metadata.clear ();
@@ -126,7 +128,8 @@ Config::set_defaults ()
_notification_bcc = "";
_check_for_updates = false;
_check_for_test_updates = false;
- _maximum_j2k_bandwidth = 250000000;
+ _maximum_video_bit_rate[VideoEncoding::JPEG2000] = 250000000;
+ _maximum_video_bit_rate[VideoEncoding::MPEG2] = 50000000;
_log_types = LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR | LogEntry::TYPE_DISK;
_analyse_ebur128 = true;
_automatic_audio_analysis = false;
@@ -136,8 +139,8 @@ Config::set_defaults ()
/* At the moment we don't write these files anywhere new after a version change, so they will be read from
* ~/.config/dcpomatic2 (or equivalent) and written back there.
*/
- _cinemas_file = read_path ("cinemas.xml");
- _dkdm_recipients_file = read_path ("dkdm_recipients.xml");
+ _cinemas_file = read_path("cinemas.sqlite3");
+ _dkdm_recipients_file = read_path("dkdm_recipients.sqlite3");
_show_hints_before_make_dcp = true;
_confirm_kdm_email = true;
_kdm_container_name_format = dcp::NameFormat("KDM_%f_%c");
@@ -177,6 +180,8 @@ Config::set_defaults ()
_gdc_username = optional<string>();
_gdc_password = optional<string>();
_player_mode = PLAYER_MODE_WINDOW;
+ _player_restricted_menus = false;
+ _playlist_editor_restricted_menus = false;
_image_display = 0;
_video_view_type = VIDEO_VIEW_SIMPLE;
_respect_kdm_validity_periods = true;
@@ -198,6 +203,8 @@ Config::set_defaults ()
_initial_paths["CinemaDatabasePath"] = boost::none;
_initial_paths["ConfigFilePath"] = boost::none;
_initial_paths["Preferences"] = boost::none;
+ _initial_paths["SaveVerificationReport"] = boost::none;
+ _initial_paths["CopySettingsPath"] = boost::none;
_use_isdcf_name_by_default = true;
_write_kdms_to_disk = true;
_email_kdms = false;
@@ -207,6 +214,9 @@ Config::set_defaults ()
_last_release_notes_version = boost::none;
_allow_smpte_bv20 = false;
_isdcf_name_part_length = 14;
+ _enable_player_http_server = false;
+ _player_http_server_port = 8080;
+ _relative_paths = false;
_allowed_dcp_frame_rates.clear ();
_allowed_dcp_frame_rates.push_back (24);
@@ -220,6 +230,10 @@ Config::set_defaults ()
set_notification_email_to_default ();
set_cover_sheet_to_default ();
+#ifdef DCPOMATIC_GROK
+ _grok = boost::none;
+#endif
+
_main_divider_sash_position = {};
_main_content_divider_sash_position = {};
@@ -266,7 +280,7 @@ Config::backup ()
copy_file(path_to_copy, add_number(path_to_copy, n), ec);
};
- /* Make a backup copy of any config.xml, cinemas.xml, dkdm_recipients.xml that we might be about
+ /* Make a backup copy of any config.xml, cinemas.sqlite3, dkdm_recipients.sqlite3 that we might be about
* to write over. This is more intended for the situation where we have a corrupted config.xml,
* and decide to overwrite it with a new one (possibly losing important details in the corrupted
* file). But we might as well back up the other files while we're about it.
@@ -286,15 +300,6 @@ Config::backup ()
void
Config::read ()
-{
- read_config();
- read_cinemas();
- read_dkdm_recipients();
-}
-
-
-void
-Config::read_config()
try
{
cxml::Document f ("Config");
@@ -367,7 +372,12 @@ try
_dcp_j2k_comment = f.optional_string_child("DCPJ2KComment").get_value_or("");
_default_still_length = f.optional_number_child<int>("DefaultStillLength").get_value_or (10);
- _default_j2k_bandwidth = f.optional_number_child<int>("DefaultJ2KBandwidth").get_value_or (200000000);
+ if (auto j2k = f.optional_number_child<int>("DefaultJ2KBandwidth")) {
+ _default_video_bit_rate[VideoEncoding::JPEG2000] = *j2k;
+ } else {
+ _default_video_bit_rate[VideoEncoding::JPEG2000] = f.optional_number_child<int64_t>("DefaultJ2KVideoBitRate").get_value_or(200000000);
+ }
+ _default_video_bit_rate[VideoEncoding::MPEG2] = f.optional_number_child<int64_t>("DefaultMPEG2VideoBitRate").get_value_or(5000000);
_default_audio_delay = f.optional_number_child<int>("DefaultAudioDelay").get_value_or (0);
_default_interop = f.optional_bool_child("DefaultInterop").get_value_or (false);
@@ -391,11 +401,6 @@ try
_default_kdm_directory = f.optional_string_child("DefaultKDMDirectory");
- /* Read any cinemas that are still lying around in the config file
- * from an old version.
- */
- read_cinemas (f);
-
_mail_server = f.string_child ("MailServer");
_mail_port = f.optional_number_child<int> ("MailPort").get_value_or (25);
@@ -426,7 +431,7 @@ try
_kdm_bcc = f.optional_string_child ("KDMBCC").get_value_or ("");
_kdm_email = f.string_child ("KDMEmail");
- _notification_subject = f.optional_string_child("NotificationSubject").get_value_or(_("DCP-o-matic notification"));
+ _notification_subject = f.optional_string_child("NotificationSubject").get_value_or(variant::insert_dcpomatic(_("%1 notification")));
_notification_from = f.optional_string_child("NotificationFrom").get_value_or("");
_notification_to = f.optional_string_child("NotificationTo").get_value_or("");
for (auto i: f.node_children("NotificationCC")) {
@@ -442,7 +447,12 @@ try
_check_for_updates = f.optional_bool_child("CheckForUpdates").get_value_or (false);
_check_for_test_updates = f.optional_bool_child("CheckForTestUpdates").get_value_or (false);
- _maximum_j2k_bandwidth = f.optional_number_child<int> ("MaximumJ2KBandwidth").get_value_or (250000000);
+ if (auto j2k = f.optional_number_child<int>("MaximumJ2KBandwidth")) {
+ _maximum_video_bit_rate[VideoEncoding::JPEG2000] = *j2k;
+ } else {
+ _maximum_video_bit_rate[VideoEncoding::JPEG2000] = f.optional_number_child<int64_t>("MaximumJ2KVideoBitRate").get_value_or(250000000);
+ }
+ _maximum_video_bit_rate[VideoEncoding::MPEG2] = f.optional_number_child<int64_t>("MaximumMPEG2VideoBitRate").get_value_or(50000000);
_allow_any_dcp_frame_rate = f.optional_bool_child ("AllowAnyDCPFrameRate").get_value_or (false);
_allow_any_container = f.optional_bool_child ("AllowAnyContainer").get_value_or (false);
_allow_96khz_audio = f.optional_bool_child("Allow96kHzAudio").get_value_or(false);
@@ -494,7 +504,7 @@ try
of the nags.
*/
for (auto i: f.node_children("Nagged")) {
- auto const id = i->number_attribute<int>("Id");
+ auto const id = number_attribute<int>(i, "Id", "id");
if (id >= 0 && id < NAG_COUNT) {
_nagged[id] = raw_convert<int>(i->content());
}
@@ -528,8 +538,8 @@ try
_dkdms->add (DKDMBase::read (i));
}
}
- _cinemas_file = f.optional_string_child("CinemasFile").get_value_or(read_path("cinemas.xml").string());
- _dkdm_recipients_file = f.optional_string_child("DKDMRecipientsFile").get_value_or(read_path("dkdm_recipients.xml").string());
+ _cinemas_file = f.optional_string_child("CinemasFile").get_value_or(read_path("cinemas.sqlite3").string());
+ _dkdm_recipients_file = f.optional_string_child("DKDMRecipientsFile").get_value_or(read_path("dkdm_recipients.sqlite3").string());
_show_hints_before_make_dcp = f.optional_bool_child("ShowHintsBeforeMakeDCP").get_value_or (true);
_confirm_kdm_email = f.optional_bool_child("ConfirmKDMEmail").get_value_or (true);
_kdm_container_name_format = dcp::NameFormat (f.optional_string_child("KDMContainerNameFormat").get_value_or ("KDM %f %c"));
@@ -566,7 +576,7 @@ try
_default_notify = f.optional_bool_child("DefaultNotify").get_value_or(false);
for (auto i: f.node_children("Notification")) {
- int const id = i->number_attribute<int>("Id");
+ int const id = number_attribute<int>(i, "Id", "id");
if (id >= 0 && id < NOTIFICATION_COUNT) {
_notification[id] = raw_convert<int>(i->content());
}
@@ -588,6 +598,9 @@ try
_player_mode = PLAYER_MODE_DUAL;
}
+ _player_restricted_menus = f.optional_bool_child("PlayerRestrictedMenus").get_value_or(false);
+ _playlist_editor_restricted_menus = f.optional_bool_child("PlaylistEditorRestrictedMenus").get_value_or(false);
+
_image_display = f.optional_number_child<int>("ImageDisplay").get_value_or(0);
auto vc = f.optional_string_child("VideoViewType");
if (vc && *vc == "opengl") {
@@ -641,6 +654,15 @@ try
_allow_smpte_bv20 = f.optional_bool_child("AllowSMPTEBv20").get_value_or(false);
_isdcf_name_part_length = f.optional_number_child<int>("ISDCFNamePartLength").get_value_or(14);
+ _enable_player_http_server = f.optional_bool_child("EnablePlayerHTTPServer").get_value_or(false);
+ _player_http_server_port = f.optional_number_child<int>("PlayerHTTPServerPort").get_value_or(8080);
+ _relative_paths = f.optional_bool_child("RelativePaths").get_value_or(false);
+
+#ifdef DCPOMATIC_GROK
+ if (auto grok = f.optional_node_child("Grok")) {
+ _grok = Grok(grok);
+ }
+#endif
_export.read(f.optional_node_child("Export"));
}
@@ -659,40 +681,6 @@ catch (...) {
}
-void
-Config::read_cinemas()
-{
- if (dcp::filesystem::exists(_cinemas_file)) {
- try {
- cxml::Document f("Cinemas");
- f.read_file(dcp::filesystem::fix_long_path(_cinemas_file));
- read_cinemas(f);
- } catch (...) {
- backup();
- FailedToLoad(LoadFailure::CINEMAS);
- write_cinemas();
- }
- }
-}
-
-
-void
-Config::read_dkdm_recipients()
-{
- if (dcp::filesystem::exists(_dkdm_recipients_file)) {
- try {
- cxml::Document f("DKDMRecipients");
- f.read_file(dcp::filesystem::fix_long_path(_dkdm_recipients_file));
- read_dkdm_recipients(f);
- } catch (...) {
- backup();
- FailedToLoad(LoadFailure::DKDM_RECIPIENTS);
- write_dkdm_recipients();
- }
- }
-}
-
-
/** @return Singleton instance */
Config *
Config::instance ()
@@ -700,6 +688,32 @@ Config::instance ()
if (_instance == nullptr) {
_instance = new Config;
_instance->read ();
+
+ auto cinemas_file = _instance->cinemas_file();
+ if (cinemas_file.extension() == ".xml") {
+ auto sqlite = cinemas_file;
+ sqlite.replace_extension(".sqlite3");
+ bool const had_sqlite = dcp::filesystem::exists(sqlite);
+
+ _instance->set_cinemas_file(sqlite);
+
+ if (dcp::filesystem::exists(cinemas_file) && !had_sqlite) {
+ CinemaList cinemas;
+ cinemas.read_legacy_file(cinemas_file);
+ }
+ }
+
+ auto dkdm_recipients_file = _instance->dkdm_recipients_file();
+ if (dkdm_recipients_file.extension() == ".xml") {
+ auto sqlite = dkdm_recipients_file;
+ sqlite.replace_extension(".sqlite3");
+
+ if (dcp::filesystem::exists(dkdm_recipients_file) && !dcp::filesystem::exists(sqlite)) {
+ _instance->set_dkdm_recipients_file(sqlite);
+ DKDMRecipientList recipients;
+ recipients.read_legacy_file(dkdm_recipients_file);
+ }
+ }
}
return _instance;
@@ -710,8 +724,6 @@ void
Config::write () const
{
write_config ();
- write_cinemas ();
- write_dkdm_recipients ();
}
void
@@ -721,218 +733,199 @@ Config::write_config () const
auto root = doc.create_root_node ("Config");
/* [XML] Version The version number of the configuration file format. */
- root->add_child("Version")->add_child_text (raw_convert<string>(_current_version));
+ cxml::add_text_child(root, "Version", raw_convert<string>(_current_version));
/* [XML] MasterEncodingThreads Number of encoding threads to use when running as master. */
- root->add_child("MasterEncodingThreads")->add_child_text (raw_convert<string> (_master_encoding_threads));
+ cxml::add_text_child(root, "MasterEncodingThreads", raw_convert<string>(_master_encoding_threads));
/* [XML] ServerEncodingThreads Number of encoding threads to use when running as server. */
- root->add_child("ServerEncodingThreads")->add_child_text (raw_convert<string> (_server_encoding_threads));
+ cxml::add_text_child(root, "ServerEncodingThreads", raw_convert<string>(_server_encoding_threads));
if (_default_directory) {
/* [XML:opt] DefaultDirectory Default directory when creating a new film in the GUI. */
- root->add_child("DefaultDirectory")->add_child_text (_default_directory->string ());
+ cxml::add_text_child(root, "DefaultDirectory", _default_directory->string());
}
/* [XML] ServerPortBase Port number to use for frame encoding requests. <code>ServerPortBase</code> + 1 and
<code>ServerPortBase</code> + 2 are used for querying servers. <code>ServerPortBase</code> + 3 is used
by the batch converter to listen for job requests.
*/
- root->add_child("ServerPortBase")->add_child_text (raw_convert<string> (_server_port_base));
+ cxml::add_text_child(root, "ServerPortBase", raw_convert<string>(_server_port_base));
/* [XML] UseAnyServers 1 to broadcast to look for encoding servers to use, 0 to use only those configured. */
- root->add_child("UseAnyServers")->add_child_text (_use_any_servers ? "1" : "0");
+ cxml::add_text_child(root, "UseAnyServers", _use_any_servers ? "1" : "0");
for (auto i: _servers) {
/* [XML:opt] Server IP address or hostname of an encoding server to use; you can use as many of these tags
as you like.
*/
- root->add_child("Server")->add_child_text (i);
+ cxml::add_text_child(root, "Server", i);
}
/* [XML] OnlyServersEncode 1 to set the master to do decoding of source content no JPEG2000 encoding; all encoding
is done by the encoding servers. 0 to set the master to do some encoding as well as coordinating the job.
*/
- root->add_child("OnlyServersEncode")->add_child_text (_only_servers_encode ? "1" : "0");
+ cxml::add_text_child(root, "OnlyServersEncode", _only_servers_encode ? "1" : "0");
/* [XML] TMSProtocol Protocol to use to copy files to a TMS; 0 to use SCP, 1 for FTP. */
- root->add_child("TMSProtocol")->add_child_text (raw_convert<string> (static_cast<int> (_tms_protocol)));
+ cxml::add_text_child(root, "TMSProtocol", raw_convert<string>(static_cast<int>(_tms_protocol)));
/* [XML] TMSPassive True to use PASV mode with TMS FTP connections. */
- root->add_child("TMSPassive")->add_child_text(_tms_passive ? "1" : "0");
+ cxml::add_text_child(root, "TMSPassive", _tms_passive ? "1" : "0");
/* [XML] TMSIP IP address of TMS. */
- root->add_child("TMSIP")->add_child_text (_tms_ip);
+ cxml::add_text_child(root, "TMSIP", _tms_ip);
/* [XML] TMSPath Path on the TMS to copy files to. */
- root->add_child("TMSPath")->add_child_text (_tms_path);
+ cxml::add_text_child(root, "TMSPath", _tms_path);
/* [XML] TMSUser Username to log into the TMS with. */
- root->add_child("TMSUser")->add_child_text (_tms_user);
+ cxml::add_text_child(root, "TMSUser", _tms_user);
/* [XML] TMSPassword Password to log into the TMS with. */
- root->add_child("TMSPassword")->add_child_text (_tms_password);
+ cxml::add_text_child(root, "TMSPassword", _tms_password);
if (_language) {
/* [XML:opt] Language Language to use in the GUI e.g. <code>fr_FR</code>. */
- root->add_child("Language")->add_child_text (_language.get());
- }
- if (_default_dcp_content_type) {
- /* [XML:opt] DefaultDCPContentType Default content type to use when creating new films (<code>FTR</code>, <code>SHR</code>,
- <code>TLR</code>, <code>TST</code>, <code>XSN</code>, <code>RTG</code>, <code>TSR</code>, <code>POL</code>,
- <code>PSA</code> or <code>ADV</code>). */
- root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ());
+ cxml::add_text_child(root, "Language", _language.get());
}
- /* [XML] DefaultDCPAudioChannels Default number of audio channels to use when creating new films. */
- root->add_child("DefaultDCPAudioChannels")->add_child_text (raw_convert<string> (_default_dcp_audio_channels));
/* [XML] DCPIssuer Issuer text to write into CPL files. */
- root->add_child("DCPIssuer")->add_child_text (_dcp_issuer);
+ cxml::add_text_child(root, "DCPIssuer", _dcp_issuer);
/* [XML] DCPCreator Creator text to write into CPL files. */
- root->add_child("DCPCreator")->add_child_text (_dcp_creator);
+ cxml::add_text_child(root, "DCPCreator", _dcp_creator);
/* [XML] Company name to write into MXF files. */
- root->add_child("DCPCompanyName")->add_child_text (_dcp_company_name);
+ cxml::add_text_child(root, "DCPCompanyName", _dcp_company_name);
/* [XML] Product name to write into MXF files. */
- root->add_child("DCPProductName")->add_child_text (_dcp_product_name);
+ cxml::add_text_child(root, "DCPProductName", _dcp_product_name);
/* [XML] Product version to write into MXF files. */
- root->add_child("DCPProductVersion")->add_child_text (_dcp_product_version);
+ cxml::add_text_child(root, "DCPProductVersion", _dcp_product_version);
/* [XML] Comment to write into JPEG2000 data. */
- root->add_child("DCPJ2KComment")->add_child_text (_dcp_j2k_comment);
+ cxml::add_text_child(root, "DCPJ2KComment", _dcp_j2k_comment);
/* [XML] UploadAfterMakeDCP 1 to upload to a TMS after making a DCP, 0 for no upload. */
- root->add_child("UploadAfterMakeDCP")->add_child_text (_upload_after_make_dcp ? "1" : "0");
+ cxml::add_text_child(root, "UploadAfterMakeDCP", _upload_after_make_dcp ? "1" : "0");
/* [XML] DefaultStillLength Default length (in seconds) for still images in new films. */
- root->add_child("DefaultStillLength")->add_child_text (raw_convert<string> (_default_still_length));
- /* [XML] DefaultJ2KBandwidth Default bitrate (in bits per second) for JPEG2000 data in new films. */
- root->add_child("DefaultJ2KBandwidth")->add_child_text (raw_convert<string> (_default_j2k_bandwidth));
+ cxml::add_text_child(root, "DefaultStillLength", raw_convert<string>(_default_still_length));
/* [XML] DefaultAudioDelay Default delay to apply to audio (positive moves audio later) in milliseconds. */
- root->add_child("DefaultAudioDelay")->add_child_text (raw_convert<string> (_default_audio_delay));
- /* [XML] DefaultInterop 1 to default new films to Interop, 0 for SMPTE. */
- root->add_child("DefaultInterop")->add_child_text (_default_interop ? "1" : "0");
+ cxml::add_text_child(root, "DefaultAudioDelay", raw_convert<string>(_default_audio_delay));
if (_default_audio_language) {
/* [XML] DefaultAudioLanguage Default audio language to use for new films */
- root->add_child("DefaultAudioLanguage")->add_child_text(_default_audio_language->to_string());
- }
- if (_default_territory) {
- /* [XML] DefaultTerritory Default territory to use for new films */
- root->add_child("DefaultTerritory")->add_child_text(_default_territory->subtag());
- }
- for (auto const& i: _default_metadata) {
- auto c = root->add_child("DefaultMetadata");
- c->set_attribute("key", i.first);
- c->add_child_text(i.second);
+ cxml::add_text_child(root, "DefaultAudioLanguage", _default_audio_language->to_string());
}
if (_default_kdm_directory) {
/* [XML:opt] DefaultKDMDirectory Default directory to write KDMs to. */
- root->add_child("DefaultKDMDirectory")->add_child_text (_default_kdm_directory->string ());
+ cxml::add_text_child(root, "DefaultKDMDirectory", _default_kdm_directory->string ());
}
- _default_kdm_duration.as_xml(root->add_child("DefaultKDMDuration"));
+ _default_kdm_duration.as_xml(cxml::add_child(root, "DefaultKDMDuration"));
/* [XML] MailServer Hostname of SMTP server to use. */
- root->add_child("MailServer")->add_child_text (_mail_server);
+ cxml::add_text_child(root, "MailServer", _mail_server);
/* [XML] MailPort Port number to use on SMTP server. */
- root->add_child("MailPort")->add_child_text (raw_convert<string> (_mail_port));
+ cxml::add_text_child(root, "MailPort", raw_convert<string>(_mail_port));
/* [XML] MailProtocol Protocol to use on SMTP server (Auto, Plain, STARTTLS or SSL) */
switch (_mail_protocol) {
case EmailProtocol::AUTO:
- root->add_child("MailProtocol")->add_child_text("Auto");
+ cxml::add_text_child(root, "MailProtocol", "Auto");
break;
case EmailProtocol::PLAIN:
- root->add_child("MailProtocol")->add_child_text("Plain");
+ cxml::add_text_child(root, "MailProtocol", "Plain");
break;
case EmailProtocol::STARTTLS:
- root->add_child("MailProtocol")->add_child_text("STARTTLS");
+ cxml::add_text_child(root, "MailProtocol", "STARTTLS");
break;
case EmailProtocol::SSL:
- root->add_child("MailProtocol")->add_child_text("SSL");
+ cxml::add_text_child(root, "MailProtocol", "SSL");
break;
}
/* [XML] MailUser Username to use on SMTP server. */
- root->add_child("MailUser")->add_child_text (_mail_user);
+ cxml::add_text_child(root, "MailUser", _mail_user);
/* [XML] MailPassword Password to use on SMTP server. */
- root->add_child("MailPassword")->add_child_text (_mail_password);
+ cxml::add_text_child(root, "MailPassword", _mail_password);
/* [XML] KDMSubject Subject to use for KDM emails. */
- root->add_child("KDMSubject")->add_child_text (_kdm_subject);
+ cxml::add_text_child(root, "KDMSubject", _kdm_subject);
/* [XML] KDMFrom From address to use for KDM emails. */
- root->add_child("KDMFrom")->add_child_text (_kdm_from);
+ cxml::add_text_child(root, "KDMFrom", _kdm_from);
for (auto i: _kdm_cc) {
/* [XML] KDMCC CC address to use for KDM emails; you can use as many of these tags as you like. */
- root->add_child("KDMCC")->add_child_text (i);
+ cxml::add_text_child(root, "KDMCC", i);
}
/* [XML] KDMBCC BCC address to use for KDM emails. */
- root->add_child("KDMBCC")->add_child_text (_kdm_bcc);
+ cxml::add_text_child(root, "KDMBCC", _kdm_bcc);
/* [XML] KDMEmail Text of KDM email. */
- root->add_child("KDMEmail")->add_child_text (_kdm_email);
+ cxml::add_text_child(root, "KDMEmail", _kdm_email);
/* [XML] NotificationSubject Subject to use for notification emails. */
- root->add_child("NotificationSubject")->add_child_text (_notification_subject);
+ cxml::add_text_child(root, "NotificationSubject", _notification_subject);
/* [XML] NotificationFrom From address to use for notification emails. */
- root->add_child("NotificationFrom")->add_child_text (_notification_from);
+ cxml::add_text_child(root, "NotificationFrom", _notification_from);
/* [XML] NotificationFrom To address to use for notification emails. */
- root->add_child("NotificationTo")->add_child_text (_notification_to);
+ cxml::add_text_child(root, "NotificationTo", _notification_to);
for (auto i: _notification_cc) {
/* [XML] NotificationCC CC address to use for notification emails; you can use as many of these tags as you like. */
- root->add_child("NotificationCC")->add_child_text (i);
+ cxml::add_text_child(root, "NotificationCC", i);
}
/* [XML] NotificationBCC BCC address to use for notification emails. */
- root->add_child("NotificationBCC")->add_child_text (_notification_bcc);
+ cxml::add_text_child(root, "NotificationBCC", _notification_bcc);
/* [XML] NotificationEmail Text of notification email. */
- root->add_child("NotificationEmail")->add_child_text (_notification_email);
+ cxml::add_text_child(root, "NotificationEmail", _notification_email);
/* [XML] CheckForUpdates 1 to check dcpomatic.com for new versions, 0 to check only on request. */
- root->add_child("CheckForUpdates")->add_child_text (_check_for_updates ? "1" : "0");
+ cxml::add_text_child(root, "CheckForUpdates", _check_for_updates ? "1" : "0");
/* [XML] CheckForUpdates 1 to check dcpomatic.com for new text versions, 0 to check only on request. */
- root->add_child("CheckForTestUpdates")->add_child_text (_check_for_test_updates ? "1" : "0");
+ cxml::add_text_child(root, "CheckForTestUpdates", _check_for_test_updates ? "1" : "0");
- /* [XML] MaximumJ2KBandwidth Maximum J2K bandwidth (in bits per second) that can be specified in the GUI. */
- root->add_child("MaximumJ2KBandwidth")->add_child_text (raw_convert<string> (_maximum_j2k_bandwidth));
+ /* [XML] MaximumJ2KVideoBitRate Maximum video bit rate (in bits per second) that can be specified in the GUI for JPEG2000 encodes. */
+ cxml::add_text_child(root, "MaximumJ2KVideoBitRate", raw_convert<string>(_maximum_video_bit_rate[VideoEncoding::JPEG2000]));
+ /* [XML] MaximumMPEG2VideoBitRate Maximum video bit rate (in bits per second) that can be specified in the GUI for MPEG2 encodes. */
+ cxml::add_text_child(root, "MaximumMPEG2VideoBitRate", raw_convert<string>(_maximum_video_bit_rate[VideoEncoding::MPEG2]));
/* [XML] AllowAnyDCPFrameRate 1 to allow users to specify any frame rate when creating DCPs, 0 to limit the GUI to standard rates. */
- root->add_child("AllowAnyDCPFrameRate")->add_child_text (_allow_any_dcp_frame_rate ? "1" : "0");
+ cxml::add_text_child(root, "AllowAnyDCPFrameRate", _allow_any_dcp_frame_rate ? "1" : "0");
/* [XML] AllowAnyContainer 1 to allow users to user any container ratio for their DCP, 0 to limit the GUI to DCI Flat/Scope */
- root->add_child("AllowAnyContainer")->add_child_text (_allow_any_container ? "1" : "0");
+ cxml::add_text_child(root, "AllowAnyContainer", _allow_any_container ? "1" : "0");
/* [XML] Allow96kHzAudio 1 to allow users to make DCPs with 96kHz audio, 0 to always make 48kHz DCPs */
- root->add_child("Allow96kHzAudio")->add_child_text(_allow_96khz_audio ? "1" : "0");
+ cxml::add_text_child(root, "Allow96kHzAudio", _allow_96khz_audio ? "1" : "0");
/* [XML] UseAllAudioChannels 1 to allow users to map audio to all 16 DCP channels, 0 to limit to the channels used in standard DCPs */
- root->add_child("UseAllAudioChannels")->add_child_text(_use_all_audio_channels ? "1" : "0");
+ cxml::add_text_child(root, "UseAllAudioChannels", _use_all_audio_channels ? "1" : "0");
/* [XML] ShowExperimentalAudioProcessors 1 to offer users the (experimental) audio upmixer processors, 0 to hide them */
- root->add_child("ShowExperimentalAudioProcessors")->add_child_text (_show_experimental_audio_processors ? "1" : "0");
+ cxml::add_text_child(root, "ShowExperimentalAudioProcessors", _show_experimental_audio_processors ? "1" : "0");
/* [XML] LogTypes Types of logging to write; a bitfield where 1 is general notes, 2 warnings, 4 errors, 8 debug information related
to 3D, 16 debug information related to encoding, 32 debug information for timing purposes, 64 debug information related
to sending email, 128 debug information related to the video view, 256 information about disk writing, 512 debug information
related to the player, 1024 debug information related to audio analyses.
*/
- root->add_child("LogTypes")->add_child_text (raw_convert<string> (_log_types));
+ cxml::add_text_child(root, "LogTypes", raw_convert<string> (_log_types));
/* [XML] AnalyseEBUR128 1 to do EBUR128 analyses when analysing audio, otherwise 0. */
- root->add_child("AnalyseEBUR128")->add_child_text (_analyse_ebur128 ? "1" : "0");
+ cxml::add_text_child(root, "AnalyseEBUR128", _analyse_ebur128 ? "1" : "0");
/* [XML] AutomaticAudioAnalysis 1 to run audio analysis automatically when audio content is added to the film, otherwise 0. */
- root->add_child("AutomaticAudioAnalysis")->add_child_text (_automatic_audio_analysis ? "1" : "0");
+ cxml::add_text_child(root, "AutomaticAudioAnalysis", _automatic_audio_analysis ? "1" : "0");
#ifdef DCPOMATIC_WINDOWS
if (_win32_console) {
/* [XML] Win32Console 1 to open a console when running on Windows, otherwise 0.
* We only write this if it's true, which is a bit of a hack to allow unit tests to work
* more easily on Windows (without a platform-specific reference in config_write_utf8_test)
*/
- root->add_child("Win32Console")->add_child_text ("1");
+ cxml::add_text_child(root, "Win32Console", "1");
}
#endif
/* [XML] Signer Certificate chain and private key to use when signing DCPs and KDMs. Should contain <code>&lt;Certificate&gt;</code>
tags in order and a <code>&lt;PrivateKey&gt;</code> tag all containing PEM-encoded certificates or private keys as appropriate.
*/
- auto signer = root->add_child ("Signer");
+ auto signer = cxml::add_child(root, "Signer");
DCPOMATIC_ASSERT (_signer_chain);
for (auto const& i: _signer_chain->unordered()) {
- signer->add_child("Certificate")->add_child_text (i.certificate (true));
+ cxml::add_text_child(signer, "Certificate", i.certificate (true));
}
- signer->add_child("PrivateKey")->add_child_text (_signer_chain->key().get ());
+ cxml::add_text_child(signer, "PrivateKey", _signer_chain->key().get ());
/* [XML] Decryption Certificate chain and private key to use when decrypting KDMs */
- auto decryption = root->add_child ("Decryption");
+ auto decryption = cxml::add_child(root, "Decryption");
DCPOMATIC_ASSERT (_decryption_chain);
for (auto const& i: _decryption_chain->unordered()) {
- decryption->add_child("Certificate")->add_child_text (i.certificate (true));
+ cxml::add_text_child(decryption, "Certificate", i.certificate (true));
}
- decryption->add_child("PrivateKey")->add_child_text (_decryption_chain->key().get ());
+ cxml::add_text_child(decryption, "PrivateKey", _decryption_chain->key().get());
/* [XML] History Filename of DCP to present in the <guilabel>File</guilabel> menu of the GUI; there can be more than one
of these tags.
*/
for (auto i: _history) {
- root->add_child("History")->add_child_text (i.string ());
+ cxml::add_text_child(root, "History", i.string());
}
/* [XML] History Filename of DCP to present in the <guilabel>File</guilabel> menu of the player; there can be more than one
of these tags.
*/
for (auto i: _player_history) {
- root->add_child("PlayerHistory")->add_child_text (i.string ());
+ cxml::add_text_child(root, "PlayerHistory", i.string());
}
/* [XML] DKDMGroup A group of DKDMs, each with a <code>Name</code> attribute, containing other <code>&lt;DKDMGroup&gt;</code>
@@ -942,53 +935,53 @@ Config::write_config () const
_dkdms->as_xml (root);
/* [XML] CinemasFile Filename of cinemas list file. */
- root->add_child("CinemasFile")->add_child_text (_cinemas_file.string());
+ cxml::add_text_child(root, "CinemasFile", _cinemas_file.string());
/* [XML] DKDMRecipientsFile Filename of DKDM recipients list file. */
- root->add_child("DKDMRecipientsFile")->add_child_text (_dkdm_recipients_file.string());
+ cxml::add_text_child(root, "DKDMRecipientsFile", _dkdm_recipients_file.string());
/* [XML] ShowHintsBeforeMakeDCP 1 to show hints in the GUI before making a DCP, otherwise 0. */
- root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0");
+ cxml::add_text_child(root, "ShowHintsBeforeMakeDCP", _show_hints_before_make_dcp ? "1" : "0");
/* [XML] ConfirmKDMEmail 1 to confirm before sending KDM emails in the GUI, otherwise 0. */
- root->add_child("ConfirmKDMEmail")->add_child_text (_confirm_kdm_email ? "1" : "0");
+ cxml::add_text_child(root, "ConfirmKDMEmail", _confirm_kdm_email ? "1" : "0");
/* [XML] KDMFilenameFormat Format for KDM filenames. */
- root->add_child("KDMFilenameFormat")->add_child_text (_kdm_filename_format.specification ());
+ cxml::add_text_child(root, "KDMFilenameFormat", _kdm_filename_format.specification());
/* [XML] KDMFilenameFormat Format for DKDM filenames. */
- root->add_child("DKDMFilenameFormat")->add_child_text(_dkdm_filename_format.specification());
+ cxml::add_text_child(root, "DKDMFilenameFormat", _dkdm_filename_format.specification());
/* [XML] KDMContainerNameFormat Format for KDM containers (directories or ZIP files). */
- root->add_child("KDMContainerNameFormat")->add_child_text (_kdm_container_name_format.specification ());
+ cxml::add_text_child(root, "KDMContainerNameFormat", _kdm_container_name_format.specification());
/* [XML] DCPMetadataFilenameFormat Format for DCP metadata filenames. */
- root->add_child("DCPMetadataFilenameFormat")->add_child_text (_dcp_metadata_filename_format.specification ());
+ cxml::add_text_child(root, "DCPMetadataFilenameFormat", _dcp_metadata_filename_format.specification());
/* [XML] DCPAssetFilenameFormat Format for DCP asset filenames. */
- root->add_child("DCPAssetFilenameFormat")->add_child_text (_dcp_asset_filename_format.specification ());
+ cxml::add_text_child(root, "DCPAssetFilenameFormat", _dcp_asset_filename_format.specification());
/* [XML] JumpToSelected 1 to make the GUI jump to the start of content when it is selected, otherwise 0. */
- root->add_child("JumpToSelected")->add_child_text (_jump_to_selected ? "1" : "0");
+ cxml::add_text_child(root, "JumpToSelected", _jump_to_selected ? "1" : "0");
/* [XML] Nagged 1 if a particular nag screen has been shown and should not be shown again, otherwise 0. */
for (int i = 0; i < NAG_COUNT; ++i) {
- xmlpp::Element* e = root->add_child ("Nagged");
- e->set_attribute ("Id", raw_convert<string>(i));
+ auto e = cxml::add_child(root, "Nagged");
+ e->set_attribute("id", raw_convert<string>(i));
e->add_child_text (_nagged[i] ? "1" : "0");
}
/* [XML] PreviewSound 1 to use sound in the GUI preview and player, otherwise 0. */
- root->add_child("PreviewSound")->add_child_text (_sound ? "1" : "0");
+ cxml::add_text_child(root, "PreviewSound", _sound ? "1" : "0");
if (_sound_output) {
/* [XML:opt] PreviewSoundOutput Name of the audio output to use. */
- root->add_child("PreviewSoundOutput")->add_child_text (_sound_output.get());
+ cxml::add_text_child(root, "PreviewSoundOutput", _sound_output.get());
}
/* [XML] CoverSheet Text of the cover sheet to write when making DCPs. */
- root->add_child("CoverSheet")->add_child_text (_cover_sheet);
+ cxml::add_text_child(root, "CoverSheet", _cover_sheet);
if (_last_player_load_directory) {
- root->add_child("LastPlayerLoadDirectory")->add_child_text(_last_player_load_directory->string());
+ cxml::add_text_child(root, "LastPlayerLoadDirectory", _last_player_load_directory->string());
}
/* [XML] LastKDMWriteType Last type of KDM-write: <code>flat</code> for a flat file, <code>folder</code> for a folder or <code>zip</code> for a ZIP file. */
if (_last_kdm_write_type) {
switch (_last_kdm_write_type.get()) {
case KDM_WRITE_FLAT:
- root->add_child("LastKDMWriteType")->add_child_text("flat");
+ cxml::add_text_child(root, "LastKDMWriteType", "flat");
break;
case KDM_WRITE_FOLDER:
- root->add_child("LastKDMWriteType")->add_child_text("folder");
+ cxml::add_text_child(root, "LastKDMWriteType", "folder");
break;
case KDM_WRITE_ZIP:
- root->add_child("LastKDMWriteType")->add_child_text("zip");
+ cxml::add_text_child(root, "LastKDMWriteType", "zip");
break;
}
}
@@ -996,58 +989,58 @@ Config::write_config () const
if (_last_dkdm_write_type) {
switch (_last_dkdm_write_type.get()) {
case DKDM_WRITE_INTERNAL:
- root->add_child("LastDKDMWriteType")->add_child_text("internal");
+ cxml::add_text_child(root, "LastDKDMWriteType", "internal");
break;
case DKDM_WRITE_FILE:
- root->add_child("LastDKDMWriteType")->add_child_text("file");
+ cxml::add_text_child(root, "LastDKDMWriteType", "file");
break;
}
}
/* [XML] FramesInMemoryMultiplier value to multiply the encoding threads count by to get the maximum number of
frames to be held in memory at once.
*/
- root->add_child("FramesInMemoryMultiplier")->add_child_text(raw_convert<string>(_frames_in_memory_multiplier));
+ cxml::add_text_child(root, "FramesInMemoryMultiplier", raw_convert<string>(_frames_in_memory_multiplier));
/* [XML] DecodeReduction power of 2 to reduce DCP images by before decoding in the player. */
if (_decode_reduction) {
- root->add_child("DecodeReduction")->add_child_text(raw_convert<string>(_decode_reduction.get()));
+ cxml::add_text_child(root, "DecodeReduction", raw_convert<string>(_decode_reduction.get()));
}
/* [XML] DefaultNotify 1 to default jobs to notify when complete, otherwise 0. */
- root->add_child("DefaultNotify")->add_child_text(_default_notify ? "1" : "0");
+ cxml::add_text_child(root, "DefaultNotify", _default_notify ? "1" : "0");
/* [XML] Notification 1 if a notification type is enabled, otherwise 0. */
for (int i = 0; i < NOTIFICATION_COUNT; ++i) {
- xmlpp::Element* e = root->add_child ("Notification");
- e->set_attribute ("Id", raw_convert<string>(i));
+ auto e = cxml::add_child(root, "Notification");
+ e->set_attribute ("id", raw_convert<string>(i));
e->add_child_text (_notification[i] ? "1" : "0");
}
if (_barco_username) {
/* [XML] BarcoUsername Username for logging into Barco's servers when downloading server certificates. */
- root->add_child("BarcoUsername")->add_child_text(*_barco_username);
+ cxml::add_text_child(root, "BarcoUsername", *_barco_username);
}
if (_barco_password) {
/* [XML] BarcoPassword Password for logging into Barco's servers when downloading server certificates. */
- root->add_child("BarcoPassword")->add_child_text(*_barco_password);
+ cxml::add_text_child(root, "BarcoPassword", *_barco_password);
}
if (_christie_username) {
/* [XML] ChristieUsername Username for logging into Christie's servers when downloading server certificates. */
- root->add_child("ChristieUsername")->add_child_text(*_christie_username);
+ cxml::add_text_child(root, "ChristieUsername", *_christie_username);
}
if (_christie_password) {
/* [XML] ChristiePassword Password for logging into Christie's servers when downloading server certificates. */
- root->add_child("ChristiePassword")->add_child_text(*_christie_password);
+ cxml::add_text_child(root, "ChristiePassword", *_christie_password);
}
if (_gdc_username) {
/* [XML] GDCUsername Username for logging into GDC's servers when downloading server certificates. */
- root->add_child("GDCUsername")->add_child_text(*_gdc_username);
+ cxml::add_text_child(root, "GDCUsername", *_gdc_username);
}
if (_gdc_password) {
/* [XML] GDCPassword Password for logging into GDC's servers when downloading server certificates. */
- root->add_child("GDCPassword")->add_child_text(*_gdc_password);
+ cxml::add_text_child(root, "GDCPassword", *_gdc_password);
}
/* [XML] PlayerMode <code>window</code> for a single window, <code>full</code> for full-screen and <code>dual</code> for full screen playback
@@ -1055,80 +1048,100 @@ Config::write_config () const
*/
switch (_player_mode) {
case PLAYER_MODE_WINDOW:
- root->add_child("PlayerMode")->add_child_text("window");
+ cxml::add_text_child(root, "PlayerMode", "window");
break;
case PLAYER_MODE_FULL:
- root->add_child("PlayerMode")->add_child_text("full");
+ cxml::add_text_child(root, "PlayerMode", "full");
break;
case PLAYER_MODE_DUAL:
- root->add_child("PlayerMode")->add_child_text("dual");
+ cxml::add_text_child(root, "PlayerMode", "dual");
break;
}
+ if (_player_restricted_menus) {
+ cxml::add_text_child(root, "PlayerRestrictedMenus", "1");
+ }
+
+ if (_playlist_editor_restricted_menus) {
+ cxml::add_text_child(root, "PlaylistEditorRestrictedMenus", "1");
+ }
+
/* [XML] ImageDisplay Screen number to put image on in dual-screen player mode. */
- root->add_child("ImageDisplay")->add_child_text(raw_convert<string>(_image_display));
+ cxml::add_text_child(root, "ImageDisplay", raw_convert<string>(_image_display));
switch (_video_view_type) {
case VIDEO_VIEW_SIMPLE:
- root->add_child("VideoViewType")->add_child_text("simple");
+ cxml::add_text_child(root, "VideoViewType", "simple");
break;
case VIDEO_VIEW_OPENGL:
- root->add_child("VideoViewType")->add_child_text("opengl");
+ cxml::add_text_child(root, "VideoViewType", "opengl");
break;
}
/* [XML] RespectKDMValidityPeriods 1 to refuse to use KDMs that are out of date, 0 to ignore KDM dates. */
- root->add_child("RespectKDMValidityPeriods")->add_child_text(_respect_kdm_validity_periods ? "1" : "0");
+ cxml::add_text_child(root, "RespectKDMValidityPeriods", _respect_kdm_validity_periods ? "1" : "0");
if (_player_debug_log_file) {
/* [XML] PlayerLogFile Filename to use for player debug logs. */
- root->add_child("PlayerDebugLogFile")->add_child_text(_player_debug_log_file->string());
+ cxml::add_text_child(root, "PlayerDebugLogFile", _player_debug_log_file->string());
}
if (_player_content_directory) {
/* [XML] PlayerContentDirectory Directory to use for player content in the dual-screen mode. */
- root->add_child("PlayerContentDirectory")->add_child_text(_player_content_directory->string());
+ cxml::add_text_child(root, "PlayerContentDirectory", _player_content_directory->string());
}
if (_player_playlist_directory) {
/* [XML] PlayerPlaylistDirectory Directory to use for player playlists in the dual-screen mode. */
- root->add_child("PlayerPlaylistDirectory")->add_child_text(_player_playlist_directory->string());
+ cxml::add_text_child(root, "PlayerPlaylistDirectory", _player_playlist_directory->string());
}
if (_player_kdm_directory) {
/* [XML] PlayerKDMDirectory Directory to use for player KDMs in the dual-screen mode. */
- root->add_child("PlayerKDMDirectory")->add_child_text(_player_kdm_directory->string());
+ cxml::add_text_child(root, "PlayerKDMDirectory", _player_kdm_directory->string());
}
if (_audio_mapping) {
- _audio_mapping->as_xml (root->add_child("AudioMapping"));
+ _audio_mapping->as_xml(cxml::add_child(root, "AudioMapping"));
}
for (auto const& i: _custom_languages) {
- root->add_child("CustomLanguage")->add_child_text(i.to_string());
+ cxml::add_text_child(root, "CustomLanguage", i.to_string());
}
for (auto const& initial: _initial_paths) {
if (initial.second) {
- root->add_child(initial.first)->add_child_text(initial.second->string());
+ cxml::add_text_child(root, initial.first, initial.second->string());
}
}
- root->add_child("UseISDCFNameByDefault")->add_child_text(_use_isdcf_name_by_default ? "1" : "0");
- root->add_child("WriteKDMsToDisk")->add_child_text(_write_kdms_to_disk ? "1" : "0");
- root->add_child("EmailKDMs")->add_child_text(_email_kdms ? "1" : "0");
- root->add_child("DefaultKDMType")->add_child_text(dcp::formulation_to_string(_default_kdm_type));
- root->add_child("AutoCropThreshold")->add_child_text(raw_convert<string>(_auto_crop_threshold));
+ cxml::add_text_child(root, "UseISDCFNameByDefault", _use_isdcf_name_by_default ? "1" : "0");
+ cxml::add_text_child(root, "WriteKDMsToDisk", _write_kdms_to_disk ? "1" : "0");
+ cxml::add_text_child(root, "EmailKDMs", _email_kdms ? "1" : "0");
+ cxml::add_text_child(root, "DefaultKDMType", dcp::formulation_to_string(_default_kdm_type));
+ cxml::add_text_child(root, "AutoCropThreshold", raw_convert<string>(_auto_crop_threshold));
if (_last_release_notes_version) {
- root->add_child("LastReleaseNotesVersion")->add_child_text(*_last_release_notes_version);
+ cxml::add_text_child(root, "LastReleaseNotesVersion", *_last_release_notes_version);
}
if (_main_divider_sash_position) {
- root->add_child("MainDividerSashPosition")->add_child_text(raw_convert<string>(*_main_divider_sash_position));
+ cxml::add_text_child(root, "MainDividerSashPosition", raw_convert<string>(*_main_divider_sash_position));
}
if (_main_content_divider_sash_position) {
- root->add_child("MainContentDividerSashPosition")->add_child_text(raw_convert<string>(*_main_content_divider_sash_position));
+ cxml::add_text_child(root, "MainContentDividerSashPosition", raw_convert<string>(*_main_content_divider_sash_position));
}
- root->add_child("DefaultAddFileLocation")->add_child_text(
+ cxml::add_text_child(root, "DefaultAddFileLocation",
_default_add_file_location == DefaultAddFileLocation::SAME_AS_LAST_TIME ? "last" : "project"
);
/* [XML] AllowSMPTEBv20 1 to allow the user to choose SMPTE (Bv2.0 only) as a standard, otherwise 0 */
- root->add_child("AllowSMPTEBv20")->add_child_text(_allow_smpte_bv20 ? "1" : "0");
+ cxml::add_text_child(root, "AllowSMPTEBv20", _allow_smpte_bv20 ? "1" : "0");
/* [XML] ISDCFNamePartLength Maximum length of the "name" part of an ISDCF name, which should be 14 according to the standard */
- root->add_child("ISDCFNamePartLength")->add_child_text(raw_convert<string>(_isdcf_name_part_length));
+ cxml::add_text_child(root, "ISDCFNamePartLength", raw_convert<string>(_isdcf_name_part_length));
+ /* [XML] EnablePlayerHTTPServer 1 to enable a HTTP server to control the player, otherwise 0 */
+ cxml::add_text_child(root, "EnablePlayerHTTPServer", _enable_player_http_server ? "1" : "0");
+ /* [XML] PlayerHTTPServerPort Port to use for player HTTP server (if enabled) */
+ cxml::add_text_child(root, "PlayerHTTPServerPort", raw_convert<string>(_player_http_server_port));
+ /* [XML] RelativePaths 1 to write relative paths to project metadata files, 0 to use absolute paths */
+ cxml::add_text_child(root, "RelativePaths", _relative_paths ? "1" : "0");
+
+#ifdef DCPOMATIC_GROK
+ if (_grok) {
+ _grok->as_xml(cxml::add_child(root, "Grok"));
+ }
+#endif
- _export.write(root->add_child("Export"));
+ _export.write(cxml::add_child(root, "Export"));
auto target = config_write_file();
@@ -1157,10 +1170,10 @@ write_file (string root_node, string node, string version, list<shared_ptr<T>> t
{
xmlpp::Document doc;
auto root = doc.create_root_node (root_node);
- root->add_child("Version")->add_child_text(version);
+ cxml::add_text_child(root, "Version", version);
for (auto i: things) {
- i->as_xml (root->add_child(node));
+ i->as_xml(cxml::add_child(root, node));
}
try {
@@ -1175,20 +1188,6 @@ write_file (string root_node, string node, string version, list<shared_ptr<T>> t
}
-void
-Config::write_cinemas () const
-{
- write_file ("Cinemas", "Cinema", "1", _cinemas, _cinemas_file);
-}
-
-
-void
-Config::write_dkdm_recipients () const
-{
- write_file ("DKDMRecipients", "DKDMRecipient", "1", _dkdm_recipients, _dkdm_recipients_file);
-}
-
-
boost::filesystem::path
Config::default_directory_or (boost::filesystem::path a) const
{
@@ -1235,20 +1234,20 @@ Config::set_kdm_email_to_default ()
{
_kdm_subject = _("KDM delivery: $CPL_NAME");
- _kdm_email = _(
+ _kdm_email = variant::insert_dcpomatic(_(
"Dear Projectionist\n\n"
"Please find attached KDMs for $CPL_NAME.\n\n"
"Cinema: $CINEMA_NAME\n"
"Screen(s): $SCREENS\n\n"
"The KDMs are valid from $START_TIME until $END_TIME.\n\n"
- "Best regards,\nDCP-o-matic"
- );
+ "Best regards,\n%1"
+ ));
}
void
Config::set_notification_email_to_default ()
{
- _notification_subject = _("DCP-o-matic notification");
+ _notification_subject = variant::insert_dcpomatic(_("%1 notification"));
_notification_email = _(
"$JOB_NAME: $JOB_STATUS"
@@ -1319,7 +1318,7 @@ Config::add_to_history_internal (vector<boost::filesystem::path>& h, boost::file
h.insert (h.begin (), p);
if (h.size() > HISTORY_SIZE) {
- h.pop_back ();
+ h.resize(HISTORY_SIZE);
}
changed (HISTORY);
@@ -1350,20 +1349,6 @@ Config::have_existing (string file)
void
-Config::read_cinemas (cxml::Document const & f)
-{
- _cinemas.clear ();
- for (auto i: f.node_children("Cinema")) {
- /* Slightly grotty two-part construction of Cinema here so that we can use
- shared_from_this.
- */
- auto cinema = make_shared<Cinema>(i);
- cinema->read_screens (i);
- _cinemas.push_back (cinema);
- }
-}
-
-void
Config::set_cinemas_file (boost::filesystem::path file)
{
if (file == _cinemas_file) {
@@ -1372,25 +1357,27 @@ Config::set_cinemas_file (boost::filesystem::path file)
_cinemas_file = file;
- if (dcp::filesystem::exists(_cinemas_file)) {
- /* Existing file; read it in */
- cxml::Document f ("Cinemas");
- f.read_file(dcp::filesystem::fix_long_path(_cinemas_file));
- read_cinemas (f);
- }
-
- changed (CINEMAS);
changed (OTHER);
}
void
-Config::read_dkdm_recipients (cxml::Document const & f)
+Config::set_dkdm_recipients_file(boost::filesystem::path file)
{
- _dkdm_recipients.clear ();
- for (auto i: f.node_children("DKDMRecipient")) {
- _dkdm_recipients.push_back (make_shared<DKDMRecipient>(i));
+ if (file == _dkdm_recipients_file) {
+ return;
}
+
+ _dkdm_recipients_file = file;
+
+ changed(OTHER);
+}
+
+
+void
+Config::save_default_template(shared_ptr<const Film> film) const
+{
+ film->write_template(write_path("default.xml"));
}
@@ -1401,14 +1388,14 @@ Config::save_template (shared_ptr<const Film> film, string name) const
}
-list<string>
+vector<string>
Config::templates () const
{
if (!dcp::filesystem::exists(read_path("templates"))) {
return {};
}
- list<string> n;
+ vector<string> n;
for (auto const& i: dcp::filesystem::directory_iterator(read_path("templates"))) {
n.push_back (i.path().filename().string());
}
@@ -1430,6 +1417,18 @@ Config::template_read_path (string name) const
boost::filesystem::path
+Config::default_template_read_path() const
+{
+ if (!boost::filesystem::exists(read_path("default.xml"))) {
+ auto film = std::make_shared<const Film>(optional<boost::filesystem::path>());
+ save_default_template(film);
+ }
+
+ return read_path("default.xml");
+}
+
+
+boost::filesystem::path
Config::template_write_path (string name) const
{
return write_path("templates") / tidy_for_filename (name);
@@ -1500,7 +1499,7 @@ void
Config::link (boost::filesystem::path new_file) const
{
xmlpp::Document doc;
- doc.create_root_node("Config")->add_child("Link")->add_child_text(new_file.string());
+ cxml::add_text_child(doc.create_root_node("Config"), "Link", new_file.string());
try {
doc.write_to_file_formatted(write_path("config.xml").string());
} catch (xmlpp::exception& e) {
@@ -1623,10 +1622,10 @@ save_all_config_as_zip (boost::filesystem::path zip_file)
auto config = Config::instance();
zipper.add ("config.xml", dcp::file_to_string(config->config_read_file()));
if (dcp::filesystem::exists(config->cinemas_file())) {
- zipper.add ("cinemas.xml", dcp::file_to_string(config->cinemas_file()));
+ zipper.add("cinemas.sqlite3", dcp::file_to_string(config->cinemas_file()));
}
if (dcp::filesystem::exists(config->dkdm_recipients_file())) {
- zipper.add ("dkdm_recipients.xml", dcp::file_to_string(config->dkdm_recipients_file()));
+ zipper.add("dkdm_recipients.sqlite3", dcp::file_to_string(config->dkdm_recipients_file()));
}
zipper.close ();
@@ -1634,22 +1633,58 @@ save_all_config_as_zip (boost::filesystem::path zip_file)
void
-Config::load_from_zip(boost::filesystem::path zip_file)
+Config::load_from_zip(boost::filesystem::path zip_file, CinemasAction action)
{
+ backup();
+
+ auto const current_cinemas = cinemas_file();
+ /* This is (unfortunately) a full path, and the user can't change it, so
+ * we always want to use that same path in the future no matter what is in the
+ * config.xml that we are about to load.
+ */
+ auto const current_dkdm_recipients = dkdm_recipients_file();
+
Unzipper unzipper(zip_file);
dcp::write_string_to_file(unzipper.get("config.xml"), config_write_file());
- try {
- dcp::write_string_to_file(unzipper.get("cinemas.xml"), cinemas_file());
- dcp::write_string_to_file(unzipper.get("dkdm_recipient.xml"), dkdm_recipients_file());
- } catch (std::runtime_error&) {}
+ if (action == CinemasAction::WRITE_TO_PATH_IN_ZIPPED_CONFIG) {
+ /* Read the zipped config, so that the cinemas file path is the new one and
+ * we write the cinemas to it.
+ */
+ read();
+ boost::filesystem::create_directories(cinemas_file().parent_path());
+ set_dkdm_recipients_file(current_dkdm_recipients);
+ }
- read();
+ if (unzipper.contains("cinemas.xml") && action != CinemasAction::IGNORE) {
+ CinemaList cinemas;
+ cinemas.clear();
+ cinemas.read_legacy_string(unzipper.get("cinemas.xml"));
+ }
+
+ if (unzipper.contains("dkdm_recipients.xml")) {
+ DKDMRecipientList recipients;
+ recipients.clear();
+ recipients.read_legacy_string(unzipper.get("dkdm_recipients.xml"));
+ }
+
+ if (unzipper.contains("cinemas.sqlite3") && action != CinemasAction::IGNORE) {
+ dcp::write_string_to_file(unzipper.get("cinemas.sqlite3"), cinemas_file());
+ }
+
+ if (unzipper.contains("dkdm_recipients.sqlite3")) {
+ dcp::write_string_to_file(unzipper.get("dkdm_recipients.sqlite3"), dkdm_recipients_file());
+ }
+
+ if (action != CinemasAction::WRITE_TO_PATH_IN_ZIPPED_CONFIG) {
+ /* Read the zipped config, then reset the cinemas file to be the old one */
+ read();
+ set_cinemas_file(current_cinemas);
+ set_dkdm_recipients_file(current_dkdm_recipients);
+ }
changed(Property::USE_ANY_SERVERS);
changed(Property::SERVERS);
- changed(Property::CINEMAS);
- changed(Property::DKDM_RECIPIENTS);
changed(Property::SOUND);
changed(Property::SOUND_OUTPUT);
changed(Property::PLAYER_CONTENT_DIRECTORY);
@@ -1685,3 +1720,57 @@ Config::initial_path(string id) const
return iter->second;
}
+
+bool
+Config::zip_contains_cinemas(boost::filesystem::path zip)
+{
+ Unzipper unzipper(zip);
+ return unzipper.contains("cinemas.sqlite3") || unzipper.contains("cinemas.xml");
+}
+
+
+boost::filesystem::path
+Config::cinemas_file_from_zip(boost::filesystem::path zip)
+{
+ Unzipper unzipper(zip);
+ DCPOMATIC_ASSERT(unzipper.contains("config.xml"));
+ cxml::Document document("Config");
+ document.read_string(unzipper.get("config.xml"));
+ return document.string_child("CinemasFile");
+}
+
+
+#ifdef DCPOMATIC_GROK
+
+Config::Grok::Grok(cxml::ConstNodePtr node)
+ : enable(node->bool_child("Enable"))
+ , binary_location(node->string_child("BinaryLocation"))
+ , selected(node->number_child<int>("Selected"))
+ , licence_server(node->string_child("LicenceServer"))
+ , licence_port(node->number_child<int>("LicencePort"))
+ , licence(node->string_child("Licence"))
+{
+
+}
+
+
+void
+Config::Grok::as_xml(xmlpp::Element* node) const
+{
+ node->add_child("BinaryLocation")->add_child_text(binary_location.string());
+ node->add_child("Enable")->add_child_text((enable ? "1" : "0"));
+ node->add_child("Selected")->add_child_text(raw_convert<string>(selected));
+ node->add_child("LicenceServer")->add_child_text(licence_server);
+ node->add_child("LicencePort")->add_child_text(raw_convert<string>(licence_port));
+ node->add_child("Licence")->add_child_text(licence);
+}
+
+
+void
+Config::set_grok(Grok const& grok)
+{
+ _grok = grok;
+ changed(GROK);
+}
+
+#endif
diff --git a/src/lib/config.h b/src/lib/config.h
index 9e6b747a2..52fe47b3f 100644
--- a/src/lib/config.h
+++ b/src/lib/config.h
@@ -28,9 +28,11 @@
#include "audio_mapping.h"
+#include "enum_indexed_vector.h"
#include "export_config.h"
#include "rough_duration.h"
#include "state.h"
+#include "video_encoding.h"
#include <dcp/name_format.h>
#include <dcp/certificate_chain.h>
#include <dcp/encrypted_kdm.h>
@@ -48,6 +50,8 @@ class DKDMRecipient;
class Film;
class Ratio;
+#undef IGNORE
+
extern void save_all_config_as_zip (boost::filesystem::path zip_file);
@@ -79,13 +83,28 @@ public:
boost::filesystem::path default_directory_or (boost::filesystem::path a) const;
boost::filesystem::path default_kdm_directory_or (boost::filesystem::path a) const;
- void load_from_zip(boost::filesystem::path zip_file);
+ enum class CinemasAction
+ {
+ /** Copy the cinemas.{xml,sqlite3} in the ZIP file to the path
+ * specified in the current config, overwriting whatever is there,
+ * and use that path.
+ */
+ WRITE_TO_CURRENT_PATH,
+ /** Copy the cinemas.{xml,sqlite3} in the ZIP file over the path
+ * specified in the config.xml from the ZIP, overwriting whatever
+ * is there and creating any required directories, and use
+ * that path.
+ */
+ WRITE_TO_PATH_IN_ZIPPED_CONFIG,
+ /** Do nothing with the cinemas.{xml,sqlite3} in the ZIP file */
+ IGNORE
+ };
+
+ void load_from_zip(boost::filesystem::path zip_file, CinemasAction action);
enum Property {
USE_ANY_SERVERS,
SERVERS,
- CINEMAS,
- DKDM_RECIPIENTS,
SOUND,
SOUND_OUTPUT,
PLAYER_CONTENT_DIRECTORY,
@@ -97,6 +116,10 @@ public:
AUTO_CROP_THRESHOLD,
ALLOW_SMPTE_BV20,
ISDCF_NAME_PART_LENGTH,
+ ALLOW_ANY_CONTAINER,
+#ifdef DCPOMATIC_GROK
+ GROK,
+#endif
OTHER
};
@@ -157,14 +180,6 @@ public:
return _tms_password;
}
- std::list<std::shared_ptr<Cinema>> cinemas () const {
- return _cinemas;
- }
-
- std::list<std::shared_ptr<DKDMRecipient>> dkdm_recipients () const {
- return _dkdm_recipients;
- }
-
std::list<int> allowed_dcp_frame_rates () const {
return _allowed_dcp_frame_rates;
}
@@ -229,8 +244,8 @@ public:
return _dcp_j2k_comment;
}
- int default_j2k_bandwidth () const {
- return _default_j2k_bandwidth;
+ int64_t default_video_bit_rate(VideoEncoding encoding) const {
+ return _default_video_bit_rate[encoding];
}
int default_audio_delay () const {
@@ -345,8 +360,8 @@ public:
return _check_for_test_updates;
}
- int maximum_j2k_bandwidth () const {
- return _maximum_j2k_bandwidth;
+ int64_t maximum_video_bit_rate(VideoEncoding encoding) const {
+ return _maximum_video_bit_rate[encoding];
}
int log_types () const {
@@ -531,6 +546,14 @@ public:
return _player_mode;
}
+ bool player_restricted_menus() const {
+ return _player_restricted_menus;
+ }
+
+ bool playlist_editor_restricted_menus() const {
+ return _playlist_editor_restricted_menus;
+ }
+
int image_display () const {
return _image_display;
}
@@ -621,10 +644,44 @@ public:
return _allow_smpte_bv20;
}
+#ifdef DCPOMATIC_GROK
+ class Grok
+ {
+ public:
+ Grok() = default;
+ Grok(cxml::ConstNodePtr node);
+
+ void as_xml(xmlpp::Element* node) const;
+
+ bool enable = false;
+ boost::filesystem::path binary_location;
+ int selected = 0;
+ std::string licence_server;
+ int licence_port = 5000;
+ std::string licence;
+ };
+
+ boost::optional<Grok> grok() const {
+ return _grok;
+ }
+#endif
+
int isdcf_name_part_length() const {
return _isdcf_name_part_length;
}
+ bool enable_player_http_server() const {
+ return _enable_player_http_server;
+ }
+
+ int player_http_server_port() const {
+ return _player_http_server_port;
+ }
+
+ bool relative_paths() const {
+ return _relative_paths;
+ }
+
/* SET (mostly) */
void set_master_encoding_threads (int n) {
@@ -680,26 +737,6 @@ public:
maybe_set (_tms_password, p);
}
- void add_cinema (std::shared_ptr<Cinema> c) {
- _cinemas.push_back (c);
- changed (CINEMAS);
- }
-
- void remove_cinema (std::shared_ptr<Cinema> c) {
- _cinemas.remove (c);
- changed (CINEMAS);
- }
-
- void add_dkdm_recipient (std::shared_ptr<DKDMRecipient> c) {
- _dkdm_recipients.push_back (c);
- changed (DKDM_RECIPIENTS);
- }
-
- void remove_dkdm_recipient (std::shared_ptr<DKDMRecipient> c) {
- _dkdm_recipients.remove (c);
- changed (DKDM_RECIPIENTS);
- }
-
void set_allowed_dcp_frame_rates (std::list<int> const & r) {
maybe_set (_allowed_dcp_frame_rates, r);
}
@@ -709,7 +746,7 @@ public:
}
void set_allow_any_container (bool a) {
- maybe_set (_allow_any_container, a);
+ maybe_set(_allow_any_container, a, ALLOW_ANY_CONTAINER);
}
void set_allow_96hhz_audio (bool a) {
@@ -745,14 +782,6 @@ public:
maybe_set (_default_still_length, s);
}
- void set_default_dcp_content_type (DCPContentType const * t) {
- maybe_set (_default_dcp_content_type, t);
- }
-
- void set_default_dcp_audio_channels (int c) {
- maybe_set (_default_dcp_audio_channels, c);
- }
-
void set_dcp_issuer (std::string i) {
maybe_set (_dcp_issuer, i);
}
@@ -777,18 +806,10 @@ public:
maybe_set (_dcp_j2k_comment, c);
}
- void set_default_j2k_bandwidth (int b) {
- maybe_set (_default_j2k_bandwidth, b);
- }
-
void set_default_audio_delay (int d) {
maybe_set (_default_audio_delay, d);
}
- void set_default_interop (bool i) {
- maybe_set (_default_interop, i);
- }
-
void set_default_audio_language(dcp::LanguageTag tag) {
maybe_set(_default_audio_language, tag);
}
@@ -797,18 +818,6 @@ public:
maybe_set(_default_audio_language, boost::optional<dcp::LanguageTag>());
}
- void set_default_territory(dcp::LanguageTag::RegionSubtag tag) {
- maybe_set(_default_territory, tag);
- }
-
- void unset_default_territory() {
- maybe_set(_default_territory, boost::optional<dcp::LanguageTag::RegionSubtag>());
- }
-
- void set_default_metadata (std::map<std::string, std::string> const& metadata) {
- maybe_set (_default_metadata, metadata);
- }
-
void set_upload_after_make_dcp (bool u) {
maybe_set (_upload_after_make_dcp, u);
}
@@ -900,8 +909,8 @@ public:
maybe_set (_check_for_test_updates, c);
}
- void set_maximum_j2k_bandwidth (int b) {
- maybe_set (_maximum_j2k_bandwidth, b);
+ void set_maximum_video_bit_rate(VideoEncoding encoding, int64_t b) {
+ maybe_set(_maximum_video_bit_rate[encoding], b);
}
void set_log_types (int t) {
@@ -929,6 +938,8 @@ public:
void set_cinemas_file (boost::filesystem::path file);
+ void set_dkdm_recipients_file(boost::filesystem::path file);
+
void set_show_hints_before_make_dcp (bool s) {
maybe_set (_show_hints_before_make_dcp, s);
}
@@ -1202,10 +1213,27 @@ public:
maybe_set(_allow_smpte_bv20, allow, ALLOW_SMPTE_BV20);
}
+#ifdef DCPOMATIC_GROK
+ void set_grok(Grok const& grok);
+#endif
+
void set_isdcf_name_part_length(int length) {
maybe_set(_isdcf_name_part_length, length, ISDCF_NAME_PART_LENGTH);
}
+ void set_enable_player_http_server(bool enable) {
+ maybe_set(_enable_player_http_server, enable);
+ }
+
+ void set_player_http_server_port(int port) {
+ maybe_set(_player_http_server_port, port);
+ }
+
+ void set_relative_paths(bool relative) {
+ maybe_set(_relative_paths, relative);
+ }
+
+
void changed (Property p = OTHER);
boost::signals2::signal<void (Property)> Changed;
/** Emitted if read() failed on an existing Config file. There is nothing
@@ -1213,8 +1241,6 @@ public:
*/
enum class LoadFailure {
CONFIG,
- CINEMAS,
- DKDM_RECIPIENTS
};
static boost::signals2::signal<void (LoadFailure)> FailedToLoad;
/** Emitted if read() issued a warning which the user might want to know about */
@@ -1234,17 +1260,17 @@ public:
void write () const override;
void write_config () const;
- void write_cinemas () const;
- void write_dkdm_recipients () const;
void link (boost::filesystem::path new_file) const;
void copy_and_link (boost::filesystem::path new_file) const;
bool have_write_permission () const;
+ void save_default_template(std::shared_ptr<const Film> film) const;
void save_template (std::shared_ptr<const Film> film, std::string name) const;
bool existing_template (std::string name) const;
- std::list<std::string> templates () const;
+ /** @return Template names (not including the default) */
+ std::vector<std::string> templates() const;
boost::filesystem::path template_read_path (std::string name) const;
- boost::filesystem::path template_write_path (std::string name) const;
+ boost::filesystem::path default_template_read_path() const;
void rename_template (std::string old_name, std::string new_name) const;
void delete_template (std::string name) const;
@@ -1256,6 +1282,9 @@ public:
static bool have_existing (std::string);
static boost::filesystem::path config_read_file ();
static boost::filesystem::path config_write_file ();
+ static bool zip_contains_cinemas(boost::filesystem::path zip);
+ static boost::filesystem::path cinemas_file_from_zip(boost::filesystem::path zip);
+
template <class T>
void maybe_set (T& member, T new_value, Property prop = OTHER) {
@@ -1278,20 +1307,16 @@ public:
private:
Config ();
void read () override;
- void read_config();
- void read_cinemas();
- void read_dkdm_recipients();
void set_defaults ();
void set_kdm_email_to_default ();
void set_notification_email_to_default ();
void set_cover_sheet_to_default ();
- void read_cinemas (cxml::Document const & f);
- void read_dkdm_recipients (cxml::Document const & f);
std::shared_ptr<dcp::CertificateChain> create_certificate_chain ();
boost::filesystem::path directory_or (boost::optional<boost::filesystem::path> dir, boost::filesystem::path a) const;
void add_to_history_internal (std::vector<boost::filesystem::path>& h, boost::filesystem::path p);
void clean_history_internal (std::vector<boost::filesystem::path>& h);
void backup ();
+ boost::filesystem::path template_write_path(std::string name) const;
/** number of threads which a master DoM should use for J2K encoding on the local machine */
int _master_encoding_threads;
@@ -1342,7 +1367,7 @@ private:
std::string _dcp_product_name;
std::string _dcp_product_version;
std::string _dcp_j2k_comment;
- int _default_j2k_bandwidth;
+ EnumIndexedVector<int64_t, VideoEncoding> _default_video_bit_rate;
int _default_audio_delay;
bool _default_interop;
boost::optional<dcp::LanguageTag> _default_audio_language;
@@ -1353,8 +1378,6 @@ private:
*/
boost::optional<boost::filesystem::path> _default_kdm_directory;
bool _upload_after_make_dcp;
- std::list<std::shared_ptr<Cinema>> _cinemas;
- std::list<std::shared_ptr<DKDMRecipient>> _dkdm_recipients;
std::string _mail_server;
int _mail_port;
EmailProtocol _mail_protocol;
@@ -1379,8 +1402,8 @@ private:
/** true to check for updates on startup */
bool _check_for_updates;
bool _check_for_test_updates;
- /** maximum allowed J2K bandwidth in bits per second */
- int _maximum_j2k_bandwidth;
+ /** maximum allowed video bit rate in bits per second */
+ EnumIndexedVector<int64_t, VideoEncoding> _maximum_video_bit_rate;
int _log_types;
bool _analyse_ebur128;
bool _automatic_audio_analysis;
@@ -1419,6 +1442,8 @@ private:
boost::optional<std::string> _gdc_username;
boost::optional<std::string> _gdc_password;
PlayerMode _player_mode;
+ bool _player_restricted_menus = false;
+ bool _playlist_editor_restricted_menus = false;
int _image_display;
VideoViewType _video_view_type;
bool _respect_kdm_validity_periods;
@@ -1446,6 +1471,13 @@ private:
DefaultAddFileLocation _default_add_file_location;
bool _allow_smpte_bv20;
int _isdcf_name_part_length;
+ bool _enable_player_http_server;
+ int _player_http_server_port;
+ bool _relative_paths;
+
+#ifdef DCPOMATIC_GROK
+ boost::optional<Grok> _grok;
+#endif
ExportConfig _export;
diff --git a/src/lib/constants.h b/src/lib/constants.h
index 3b1871554..cfa156778 100644
--- a/src/lib/constants.h
+++ b/src/lib/constants.h
@@ -29,7 +29,6 @@
#define DCPOMATIC_HELLO "I mean really, Ray, it's used."
/** Number of films to keep in history */
#define HISTORY_SIZE 10
-#define REPORT_PROBLEM _("Please report this problem by using Help -> Report a problem or via email to carl@dcpomatic.com")
#define TEXT_FONT_ID "font"
/** Largest KDM size (in bytes) that will be accepted */
#define MAX_KDM_SIZE (256 * 1024)
@@ -47,6 +46,7 @@
#define MAX_CLOSED_CAPTION_XML_SIZE (256 * 1024)
#define MAX_CLOSED_CAPTION_XML_SIZE_TEXT "256KB"
#define CERTIFICATE_VALIDITY_PERIOD (10 * 365)
+#define SNAP_SUBDIVISION 64
#endif
diff --git a/src/lib/content.cc b/src/lib/content.cc
index f13201b93..be30ccf43 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -84,10 +84,14 @@ Content::Content (boost::filesystem::path p)
}
-Content::Content (cxml::ConstNodePtr node)
+Content::Content(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory)
{
for (auto i: node->node_children("Path")) {
- _paths.push_back (i->content());
+ if (film_directory) {
+ _paths.push_back(boost::filesystem::weakly_canonical(boost::filesystem::absolute(i->content(), *film_directory)));
+ } else {
+ _paths.push_back(i->content());
+ }
auto const mod = i->optional_number_attribute<time_t>("mtime");
if (mod) {
_last_write_times.push_back (*mod);
@@ -140,23 +144,28 @@ Content::Content (vector<shared_ptr<Content>> c)
void
-Content::as_xml (xmlpp::Node* node, bool with_paths) const
+Content::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
boost::mutex::scoped_lock lm (_mutex);
if (with_paths) {
for (size_t i = 0; i < _paths.size(); ++i) {
- auto p = node->add_child("Path");
- p->add_child_text (_paths[i].string());
+ auto path = _paths[i];
+ if (path_behaviour == PathBehaviour::MAKE_RELATIVE) {
+ DCPOMATIC_ASSERT(film_directory);
+ path = boost::filesystem::relative(path, *film_directory);
+ }
+ auto p = cxml::add_child(element, "Path");
+ p->add_child_text(path.string());
p->set_attribute ("mtime", raw_convert<string>(_last_write_times[i]));
}
}
- node->add_child("Digest")->add_child_text(_digest);
- node->add_child("Position")->add_child_text(raw_convert<string>(_position.get()));
- node->add_child("TrimStart")->add_child_text(raw_convert<string>(_trim_start.get()));
- node->add_child("TrimEnd")->add_child_text(raw_convert<string>(_trim_end.get()));
+ cxml::add_text_child(element, "Digest", _digest);
+ cxml::add_text_child(element, "Position", raw_convert<string>(_position.get()));
+ cxml::add_text_child(element, "TrimStart", raw_convert<string>(_trim_start.get()));
+ cxml::add_text_child(element, "TrimEnd", raw_convert<string>(_trim_end.get()));
if (_video_frame_rate) {
- node->add_child("VideoFrameRate")->add_child_text(raw_convert<string>(_video_frame_rate.get()));
+ cxml::add_text_child(element, "VideoFrameRate", raw_convert<string>(_video_frame_rate.get()));
}
}
@@ -285,16 +294,16 @@ Content::set_trim_end (ContentTime t)
shared_ptr<Content>
-Content::clone () const
+Content::clone() const
{
/* This is a bit naughty, but I can't think of a compelling reason not to do it ... */
xmlpp::Document doc;
auto node = doc.create_root_node ("Content");
- as_xml (node, true);
+ as_xml(node, true, PathBehaviour::KEEP_ABSOLUTE, {});
/* notes is unused here (we assume) */
list<string> notes;
- return content_factory (make_shared<cxml::Node>(node), Film::current_state_version, notes);
+ return content_factory(make_shared<cxml::Node>(node), {}, Film::current_state_version, notes);
}
@@ -355,7 +364,10 @@ Content::set_paths (vector<boost::filesystem::path> paths)
{
boost::mutex::scoped_lock lm (_mutex);
- _paths = paths;
+ _paths.clear();
+ for (auto path: paths) {
+ _paths.push_back(boost::filesystem::canonical(path));
+ }
_last_write_times.clear ();
for (auto i: _paths) {
boost::system::error_code ec;
@@ -550,7 +562,7 @@ void
Content::add_path (boost::filesystem::path p)
{
boost::mutex::scoped_lock lm (_mutex);
- _paths.push_back (p);
+ _paths.push_back(boost::filesystem::canonical(p));
boost::system::error_code ec;
auto last_write = dcp::filesystem::last_write_time(p, ec);
_last_write_times.push_back (ec ? 0 : last_write);
diff --git a/src/lib/content.h b/src/lib/content.h
index 540abdd8a..29dce2c9e 100644
--- a/src/lib/content.h
+++ b/src/lib/content.h
@@ -30,6 +30,7 @@
#include "change_signaller.h"
#include "dcpomatic_time.h"
+#include "path_behaviour.h"
#include "signaller.h"
#include "user_property.h"
#include "text_type.h"
@@ -75,7 +76,7 @@ public:
explicit Content ();
Content (dcpomatic::DCPTime);
Content (boost::filesystem::path);
- Content (cxml::ConstNodePtr);
+ Content (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> directory);
Content (std::vector<std::shared_ptr<Content>>);
virtual ~Content () {}
@@ -100,7 +101,13 @@ public:
*/
virtual std::string technical_summary () const;
- virtual void as_xml (xmlpp::Node *, bool with_paths) const;
+ virtual void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const;
+
virtual dcpomatic::DCPTime full_length (std::shared_ptr<const Film>) const = 0;
virtual dcpomatic::DCPTime approximate_length () const = 0;
virtual std::string identifier () const;
diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc
index dfa1ba55e..5d36c2aea 100644
--- a/src/lib/content_factory.cc
+++ b/src/lib/content_factory.cc
@@ -41,14 +41,13 @@
#include "compose.hpp"
#include <libcxml/cxml.h>
#include <dcp/filesystem.h>
-#include <dcp/smpte_subtitle_asset.h>
+#include <dcp/smpte_text_asset.h>
#include <boost/algorithm/string.hpp>
#include "i18n.h"
using std::list;
-using std::make_shared;
using std::shared_ptr;
using std::string;
using std::vector;
@@ -56,29 +55,30 @@ using std::vector;
/** Create a Content object from an XML node.
* @param node XML description.
+ * @param directory "Current" directory for any relative file paths mentioned in the XML.
* @param version XML state version.
* @param notes A list to which is added descriptions of any non-critial warnings / messages.
* @return Content object, or 0 if no content was recognised in the XML.
*/
shared_ptr<Content>
-content_factory (cxml::ConstNodePtr node, int version, list<string>& notes)
+content_factory(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes)
{
auto const type = node->string_child ("Type");
std::shared_ptr<Content> content;
if (type == "FFmpeg") {
- content = make_shared<FFmpegContent>(node, version, notes);
+ content = std::make_shared<FFmpegContent>(node, film_directory, version, notes);
} else if (type == "Image") {
- content = make_shared<ImageContent>(node, version);
+ content = std::make_shared<ImageContent>(node, film_directory, version);
} else if (type == "Sndfile") {
/* SndfileContent is now handled by the FFmpeg code rather than by
separate libsndfile-based code.
*/
- content = make_shared<FFmpegContent>(node, version, notes);
+ content = std::make_shared<FFmpegContent>(node, film_directory, version, notes);
content->audio->set_stream (
- make_shared<FFmpegAudioStream>(
+ std::make_shared<FFmpegAudioStream>(
"Stream", 0,
node->number_child<int> ("AudioFrameRate"),
node->number_child<Frame> ("AudioLength"),
@@ -88,15 +88,15 @@ content_factory (cxml::ConstNodePtr node, int version, list<string>& notes)
);
} else if (type == "SubRip" || type == "TextSubtitle") {
- content = make_shared<StringTextFileContent>(node, version, notes);
+ content = std::make_shared<StringTextFileContent>(node, film_directory, version, notes);
} else if (type == "DCP") {
- content = make_shared<DCPContent>(node, version);
+ content = std::make_shared<DCPContent>(node, film_directory, version);
} else if (type == "DCPSubtitle") {
- content = make_shared<DCPSubtitleContent>(node, version);
+ content = std::make_shared<DCPSubtitleContent>(node, film_directory, version);
} else if (type == "VideoMXF") {
- content = make_shared<VideoMXFContent>(node, version);
+ content = std::make_shared<VideoMXFContent>(node, film_directory, version);
} else if (type == "AtmosMXF") {
- content = make_shared<AtmosMXFContent>(node, version);
+ content = std::make_shared<AtmosMXFContent>(node, film_directory, version);
}
return content;
@@ -153,10 +153,10 @@ content_factory (boost::filesystem::path path)
}
if (image_files > 0 && sound_files == 0) {
- content.push_back (make_shared<ImageContent>(path));
+ content.push_back(std::make_shared<ImageContent>(path));
} else if (image_files == 0 && sound_files > 0) {
for (auto i: dcp::filesystem::directory_iterator(path)) {
- content.push_back (make_shared<FFmpegContent>(i.path()));
+ content.push_back(std::make_shared<FFmpegContent>(i.path()));
}
}
@@ -168,26 +168,26 @@ content_factory (boost::filesystem::path path)
transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
if (valid_image_file (path)) {
- single = make_shared<ImageContent>(path);
+ single = std::make_shared<ImageContent>(path);
} else if (ext == ".srt" || ext == ".ssa" || ext == ".ass" || ext == ".stl" || ext == ".vtt") {
- single = make_shared<StringTextFileContent>(path);
+ single = std::make_shared<StringTextFileContent>(path);
} else if (ext == ".xml") {
cxml::Document doc;
doc.read_file(dcp::filesystem::fix_long_path(path));
if (doc.root_name() == "DCinemaSecurityMessage") {
throw KDMAsContentError ();
}
- single = make_shared<DCPSubtitleContent>(path);
- } else if (ext == ".mxf" && dcp::SMPTESubtitleAsset::valid_mxf(path)) {
- single = make_shared<DCPSubtitleContent>(path);
+ single = std::make_shared<DCPSubtitleContent>(path);
+ } else if (ext == ".mxf" && dcp::SMPTETextAsset::valid_mxf(path)) {
+ single = std::make_shared<DCPSubtitleContent>(path);
} else if (ext == ".mxf" && VideoMXFContent::valid_mxf(path)) {
- single = make_shared<VideoMXFContent>(path);
+ single = std::make_shared<VideoMXFContent>(path);
} else if (ext == ".mxf" && AtmosMXFContent::valid_mxf(path)) {
- single = make_shared<AtmosMXFContent>(path);
+ single = std::make_shared<AtmosMXFContent>(path);
}
if (!single) {
- single = make_shared<FFmpegContent>(path);
+ single = std::make_shared<FFmpegContent>(path);
}
content.push_back (single);
diff --git a/src/lib/content_factory.h b/src/lib/content_factory.h
index 2cef84034..b4ce161fb 100644
--- a/src/lib/content_factory.h
+++ b/src/lib/content_factory.h
@@ -28,9 +28,8 @@
#include <vector>
-class Film;
class Content;
-extern std::shared_ptr<Content> content_factory (cxml::ConstNodePtr, int, std::list<std::string> &);
+extern std::shared_ptr<Content> content_factory(cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int, std::list<std::string> &);
extern std::vector<std::shared_ptr<Content>> content_factory (boost::filesystem::path);
diff --git a/src/lib/content_text.h b/src/lib/content_text.h
index 51d4e8009..4b59ac65f 100644
--- a/src/lib/content_text.h
+++ b/src/lib/content_text.h
@@ -27,7 +27,7 @@
#include "dcpomatic_time.h"
#include "rect.h"
#include "string_text.h"
-#include <dcp/subtitle_string.h>
+#include <dcp/text_string.h>
#include <vector>
diff --git a/src/lib/content_video.h b/src/lib/content_video.h
index 4fdab717a..1c145f602 100644
--- a/src/lib/content_video.h
+++ b/src/lib/content_video.h
@@ -23,6 +23,7 @@
#define DCPOMATIC_CONTENT_VIDEO_H
+#include "dcpomatic_time.h"
#include "types.h"
@@ -36,22 +37,22 @@ class ContentVideo
{
public:
ContentVideo ()
- : frame (0)
- , eyes (Eyes::LEFT)
+ : eyes (Eyes::LEFT)
, part (Part::WHOLE)
{}
- ContentVideo (std::shared_ptr<const ImageProxy> i, Frame f, Eyes e, Part p)
+ ContentVideo (std::shared_ptr<const ImageProxy> i, dcpomatic::ContentTime t, Eyes e, Part p)
: image (i)
- , frame (f)
+ , time (t)
, eyes (e)
, part (p)
{}
std::shared_ptr<const ImageProxy> image;
- Frame frame;
+ dcpomatic::ContentTime time;
Eyes eyes;
Part part;
};
+
#endif
diff --git a/src/lib/cpu_j2k_encoder_thread.cc b/src/lib/cpu_j2k_encoder_thread.cc
new file mode 100644
index 000000000..580facae9
--- /dev/null
+++ b/src/lib/cpu_j2k_encoder_thread.cc
@@ -0,0 +1,62 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "cpu_j2k_encoder_thread.h"
+#include "cross.h"
+#include "dcpomatic_log.h"
+#include "dcp_video.h"
+#include "j2k_encoder.h"
+#include "util.h"
+
+#include "i18n.h"
+
+
+using std::make_shared;
+using std::shared_ptr;
+
+
+CPUJ2KEncoderThread::CPUJ2KEncoderThread(J2KEncoder& encoder)
+ : J2KSyncEncoderThread(encoder)
+{
+
+}
+
+
+void
+CPUJ2KEncoderThread::log_thread_start() const
+{
+ start_of_thread("CPUJ2KEncoder");
+ LOG_TIMING("start-encoder-thread thread=%1 server=localhost", thread_id());
+}
+
+
+shared_ptr<dcp::ArrayData>
+CPUJ2KEncoderThread::encode(DCPVideo const& frame)
+{
+ try {
+ return make_shared<dcp::ArrayData>(frame.encode_locally());
+ } catch (std::exception& e) {
+ LOG_ERROR(N_("Local encode failed (%1)"), e.what());
+ }
+
+ return {};
+}
+
diff --git a/src/lib/cpu_j2k_encoder_thread.h b/src/lib/cpu_j2k_encoder_thread.h
new file mode 100644
index 000000000..fb138f484
--- /dev/null
+++ b/src/lib/cpu_j2k_encoder_thread.h
@@ -0,0 +1,16 @@
+#include "j2k_sync_encoder_thread.h"
+#include <dcp/data.h>
+
+
+class DCPVideo;
+
+
+class CPUJ2KEncoderThread : public J2KSyncEncoderThread
+{
+public:
+ CPUJ2KEncoderThread(J2KEncoder& encoder);
+
+ void log_thread_start() const override;
+ std::shared_ptr<dcp::ArrayData> encode(DCPVideo const& frame) override;
+};
+
diff --git a/src/lib/create_cli.cc b/src/lib/create_cli.cc
index 3f80c81f2..3fb978f7c 100644
--- a/src/lib/create_cli.cc
+++ b/src/lib/create_cli.cc
@@ -26,6 +26,7 @@
#include "dcpomatic_log.h"
#include "film.h"
#include "ratio.h"
+#include "variant.h"
#include <dcp/raw_convert.h>
#include <iostream>
#include <string>
@@ -40,8 +41,8 @@ using boost::optional;
string CreateCLI::_help =
- "\nSyntax: %1 [OPTION] <CONTENT> [OPTION] [<CONTENT> ...]\n"
- " -v, --version show DCP-o-matic version\n"
+ string("\nSyntax: %1 [OPTION] <CONTENT> [OPTION] [<CONTENT> ...]\n") +
+ variant::insert_dcpomatic(" -v, --version show %1 version\n") +
" -h, --help show this help\n"
" -n, --name <name> film name\n"
" -t, --template <name> template name\n"
@@ -132,7 +133,7 @@ CreateCLI::CreateCLI (int argc, char* argv[])
optional<string> standard_string;
int dcp_frame_rate_int = 0;
string template_name_string;
- int j2k_bandwidth_int = 0;
+ int64_t video_bit_rate_int = 0;
auto next_frame_type = VideoFrameType::TWO_D;
optional<dcp::Channel> channel;
optional<float> gain;
@@ -205,7 +206,7 @@ CreateCLI::CreateCLI (int argc, char* argv[])
argument_option(i, argc, argv, "", "--standard", &claimed, &error, &standard_string, string_to_string);
argument_option(i, argc, argv, "", "--config", &claimed, &error, &config_dir, string_to_path);
argument_option(i, argc, argv, "-o", "--output", &claimed, &error, &output_dir, string_to_path);
- argument_option(i, argc, argv, "", "--j2k-bandwidth", &claimed, &error, &j2k_bandwidth_int);
+ argument_option(i, argc, argv, "", "--video-bit-rate", &claimed, &error, &video_bit_rate_int);
std::function<optional<dcp::Channel> (string)> convert_channel = [](string channel) -> optional<dcp::Channel>{
if (channel == "L") {
@@ -273,8 +274,8 @@ CreateCLI::CreateCLI (int argc, char* argv[])
dcp_frame_rate = dcp_frame_rate_int;
}
- if (j2k_bandwidth_int) {
- _j2k_bandwidth = j2k_bandwidth_int * 1000000;
+ if (video_bit_rate_int) {
+ _video_bit_rate = video_bit_rate_int * 1000000;
}
if (dcp_content_type_string) {
@@ -321,8 +322,8 @@ CreateCLI::CreateCLI (int argc, char* argv[])
_name = content[0].path.filename().string();
}
- if (_j2k_bandwidth && (*_j2k_bandwidth < 10000000 || *_j2k_bandwidth > Config::instance()->maximum_j2k_bandwidth())) {
- error = String::compose("%1: j2k-bandwidth must be between 10 and %2 Mbit/s", argv[0], (Config::instance()->maximum_j2k_bandwidth() / 1000000));
+ if (_video_bit_rate && (*_video_bit_rate < 10000000 || *_video_bit_rate > Config::instance()->maximum_video_bit_rate(VideoEncoding::JPEG2000))) {
+ error = String::compose("%1: video-bit-rate must be between 10 and %2 Mbit/s", argv[0], (Config::instance()->maximum_video_bit_rate(VideoEncoding::JPEG2000) / 1000000));
return;
}
}
@@ -373,8 +374,8 @@ CreateCLI::make_film() const
if (_fourk) {
film->set_resolution(Resolution::FOUR_K);
}
- if (_j2k_bandwidth) {
- film->set_j2k_bandwidth(*_j2k_bandwidth);
+ if (_video_bit_rate) {
+ film->set_video_bit_rate(VideoEncoding::JPEG2000, *_video_bit_rate);
}
int channels = 6;
diff --git a/src/lib/create_cli.h b/src/lib/create_cli.h
index 782aaf974..850cddea9 100644
--- a/src/lib/create_cli.h
+++ b/src/lib/create_cli.h
@@ -72,7 +72,7 @@ private:
bool _no_use_isdcf_name = false;
bool _twok = false;
bool _fourk = false;
- boost::optional<int> _j2k_bandwidth;
+ boost::optional<int64_t> _video_bit_rate;
static std::string _help;
};
diff --git a/src/lib/crop.cc b/src/lib/crop.cc
index d2d020a9f..a6f7d4bac 100644
--- a/src/lib/crop.cc
+++ b/src/lib/crop.cc
@@ -42,12 +42,12 @@ Crop::Crop(shared_ptr<cxml::Node> node)
void
-Crop::as_xml(xmlpp::Node* node) const
+Crop::as_xml(xmlpp::Element* element) const
{
- node->add_child("LeftCrop")->add_child_text(raw_convert<string>(left));
- node->add_child("RightCrop")->add_child_text(raw_convert<string>(right));
- node->add_child("TopCrop")->add_child_text(raw_convert<string>(top));
- node->add_child("BottomCrop")->add_child_text(raw_convert<string>(bottom));
+ cxml::add_text_child(element, "LeftCrop", raw_convert<string>(left));
+ cxml::add_text_child(element, "RightCrop", raw_convert<string>(right));
+ cxml::add_text_child(element, "TopCrop", raw_convert<string>(top));
+ cxml::add_text_child(element, "BottomCrop", raw_convert<string>(bottom));
}
diff --git a/src/lib/crop.h b/src/lib/crop.h
index 00734d5e9..24330731d 100644
--- a/src/lib/crop.h
+++ b/src/lib/crop.h
@@ -65,7 +65,7 @@ struct Crop
return s;
}
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
};
diff --git a/src/lib/cross.h b/src/lib/cross.h
index 884f3c79c..78a73b13e 100644
--- a/src/lib/cross.h
+++ b/src/lib/cross.h
@@ -139,29 +139,19 @@ private:
void disk_write_finished ();
-struct OSXMediaPath
-{
- bool real; ///< true for a "real" disk, false for a synthesized APFS one
- std::vector<std::string> parts; ///< parts of the media path after the :
-};
-
-
struct OSXDisk
{
std::string device;
boost::optional<std::string> vendor;
boost::optional<std::string> model;
- OSXMediaPath media_path;
- bool whole;
std::vector<boost::filesystem::path> mount_points;
unsigned long size;
+ bool system;
+ bool writeable;
+ bool partition;
};
-boost::optional<OSXMediaPath> analyse_osx_media_path (std::string path);
-std::vector<Drive> osx_disks_to_drives (std::vector<OSXDisk> disks);
-
-
class ArgFixer
{
public:
diff --git a/src/lib/cross_common.cc b/src/lib/cross_common.cc
index b4d322096..1e145c8fc 100644
--- a/src/lib/cross_common.cc
+++ b/src/lib/cross_common.cc
@@ -40,9 +40,6 @@ using std::vector;
using boost::optional;
-auto constexpr MEDIA_PATH_REQUIRED_MATCHES = 3;
-
-
Drive::Drive (string xml)
{
cxml::Document doc;
@@ -62,16 +59,16 @@ Drive::as_xml () const
{
xmlpp::Document doc;
auto root = doc.create_root_node ("Drive");
- root->add_child("Device")->add_child_text(_device);
+ cxml::add_text_child(root, "Device", _device);
for (auto i: _mount_points) {
- root->add_child("MountPoint")->add_child_text(i.string());
+ cxml::add_text_child(root, "MountPoint", i.string());
}
- root->add_child("Size")->add_child_text(dcp::raw_convert<string>(_size));
+ cxml::add_text_child(root, "Size", dcp::raw_convert<string>(_size));
if (_vendor) {
- root->add_child("Vendor")->add_child_text(*_vendor);
+ cxml::add_text_child(root, "Vendor", *_vendor);
}
if (_model) {
- root->add_child("Model")->add_child_text(*_model);
+ cxml::add_text_child(root, "Model", *_model);
}
return doc.write_to_string("UTF-8");
@@ -122,97 +119,3 @@ Drive::log_summary () const
);
}
-
-
-/* This is in _common so we can use it in unit tests */
-optional<OSXMediaPath>
-analyse_osx_media_path (string path)
-{
- if (path.find("/IOHDIXController") != string::npos) {
- /* This is a disk image, so we completely ignore it */
- LOG_DISK_NC("Ignoring this as it seems to be a disk image");
- return {};
- }
-
- OSXMediaPath mp;
- vector<string> parts;
- split(parts, path, boost::is_any_of("/"));
- std::copy(parts.begin() + 1, parts.end(), back_inserter(mp.parts));
-
- if (!parts.empty() && parts[0] == "IODeviceTree:") {
- mp.real = true;
- if (mp.parts.size() < MEDIA_PATH_REQUIRED_MATCHES) {
- /* Later we expect at least MEDIA_PATH_REQUIRED_MATCHES parts in a IODeviceTree */
- LOG_DISK_NC("Ignoring this as it has a strange media path");
- return {};
- }
- } else if (!parts.empty() && parts[0] == "IOService:") {
- mp.real = false;
- } else {
- return {};
- }
-
- return mp;
-}
-
-
-/* Take some OSXDisk objects, representing disks that `DARegisterDiskAppearedCallback` told us about,
- * and find those drives that we could write a DCP to. The drives returned are "real" (not synthesized)
- * and are whole disks (not partitions). They may be mounted, or contain mounted partitions, in which
- * their mounted() method will return true.
- */
-vector<Drive>
-osx_disks_to_drives (vector<OSXDisk> disks)
-{
- using namespace boost::algorithm;
-
- /* Mark disks containing mounted partitions as themselves mounted */
- for (auto& i: disks) {
- if (!i.whole) {
- continue;
- }
- for (auto& j: disks) {
- if (&i != &j && !j.mount_points.empty() && starts_with(j.device, i.device)) {
- LOG_DISK("Marking %1 as mounted because %2 is", i.device, j.device);
- std::copy(j.mount_points.begin(), j.mount_points.end(), back_inserter(i.mount_points));
- }
- }
- }
-
- /* Mark containers of mounted synths as themselves mounted */
- for (auto& i: disks) {
- if (i.media_path.real) {
- for (auto& j: disks) {
- if (!j.media_path.real && !j.mount_points.empty()) {
- /* i is real, j is a mounted synth; if we see the first MEDIA_PATH_REQUIRED_MATCHES parts
- * of i anywhere in j we assume they are related and so i shares j's mount points.
- */
- bool one_missing = false;
- string all_parts;
- DCPOMATIC_ASSERT (i.media_path.parts.size() >= MEDIA_PATH_REQUIRED_MATCHES);
- for (auto k = 0; k < MEDIA_PATH_REQUIRED_MATCHES; ++k) {
- if (find(j.media_path.parts.begin(), j.media_path.parts.end(), i.media_path.parts[k]) == j.media_path.parts.end()) {
- one_missing = true;
- }
- all_parts += i.media_path.parts[k] + " ";
- }
-
- if (!one_missing) {
- LOG_DISK("Marking %1 as mounted because %2 is (found %3)", i.device, j.device, all_parts);
- std::copy(j.mount_points.begin(), j.mount_points.end(), back_inserter(i.mount_points));
- }
- }
- }
- }
- }
-
- vector<Drive> drives;
- for (auto const& i: disks) {
- if (i.whole && i.media_path.real) {
- drives.push_back(Drive(i.device, i.mount_points, i.size, i.vendor, i.model));
- LOG_DISK_NC(drives.back().log_summary());
- }
- }
-
- return drives;
-}
diff --git a/src/lib/cross_linux.cc b/src/lib/cross_linux.cc
index 015158aa8..be3233b32 100644
--- a/src/lib/cross_linux.cc
+++ b/src/lib/cross_linux.cc
@@ -85,7 +85,12 @@ cpu_info ()
boost::filesystem::path
resources_path ()
{
- return directory_containing_executable().parent_path() / "share" / "dcpomatic2";
+ auto installed = directory_containing_executable().parent_path() / "share" / "dcpomatic2";
+ if (boost::filesystem::exists(installed)) {
+ return installed;
+ }
+
+ return directory_containing_executable().parent_path().parent_path().parent_path();
}
diff --git a/src/lib/cross_osx.cc b/src/lib/cross_osx.cc
index 913b19103..6df2f959e 100644
--- a/src/lib/cross_osx.cc
+++ b/src/lib/cross_osx.cc
@@ -19,12 +19,13 @@
*/
-#include "cross.h"
#include "compose.hpp"
-#include "log.h"
-#include "dcpomatic_log.h"
#include "config.h"
+#include "cross.h"
+#include "dcpomatic_log.h"
#include "exceptions.h"
+#include "log.h"
+#include "variant.h"
#include <dcp/filesystem.h>
#include <dcp/raw_convert.h>
#include <glib.h>
@@ -168,6 +169,8 @@ Waker::~Waker ()
void
start_tool (string executable, string app)
{
+ boost::algorithm::replace_all(app, " ", "\\ ");
+
auto exe_path = directory_containing_executable();
exe_path = exe_path.parent_path(); // Contents
exe_path = exe_path.parent_path(); // DCP-o-matic 2.app
@@ -191,14 +194,14 @@ start_tool (string executable, string app)
void
start_batch_converter ()
{
- start_tool ("dcpomatic2_batch", "DCP-o-matic\\ 2\\ Batch\\ Converter.app");
+ start_tool("dcpomatic2_batch", variant::dcpomatic_batch_converter_app());
}
void
start_player ()
{
- start_tool ("dcpomatic2_player", "DCP-o-matic\\ 2\\ Player.app");
+ start_tool("dcpomatic2_player", variant::dcpomatic_player_app());
}
@@ -240,44 +243,6 @@ get_model (CFDictionaryRef& description)
}
-static optional<OSXMediaPath>
-analyse_media_path (CFDictionaryRef& description)
-{
- using namespace boost::algorithm;
-
- void const* str = CFDictionaryGetValue (description, kDADiskDescriptionMediaPathKey);
- if (!str) {
- LOG_DISK_NC("There is no MediaPathKey (no dictionary value)");
- return {};
- }
-
- auto path_key_cstr = CFStringGetCStringPtr((CFStringRef) str, kCFStringEncodingUTF8);
- if (!path_key_cstr) {
- LOG_DISK_NC("There is no MediaPathKey (no cstring)");
- return {};
- }
-
- string path(path_key_cstr);
- LOG_DISK("MediaPathKey is %1", path);
- return analyse_osx_media_path (path);
-}
-
-
-static bool
-is_whole_drive (DADiskRef& disk)
-{
- io_service_t service = DADiskCopyIOMedia (disk);
- CFTypeRef whole_media_ref = IORegistryEntryCreateCFProperty (service, CFSTR(kIOMediaWholeKey), kCFAllocatorDefault, 0);
- bool whole_media = false;
- if (whole_media_ref) {
- whole_media = CFBooleanGetValue((CFBooleanRef) whole_media_ref);
- CFRelease (whole_media_ref);
- }
- IOObjectRelease (service);
- return whole_media;
-}
-
-
static optional<boost::filesystem::path>
mount_point (CFDictionaryRef& description)
{
@@ -294,29 +259,17 @@ mount_point (CFDictionaryRef& description)
}
-/* Here follows some rather intricate and (probably) fragile code to find the list of available
- * "real" drives on macOS that we might want to write a DCP to.
- *
- * We use the Disk Arbitration framework to give us a series of mount_points (/dev/disk0, /dev/disk1,
- * /dev/disk1s1 and so on) and we use the API to gather useful information about these mount_points into
- * a vector of Disk structs.
- *
- * Then we read the Disks that we found and try to derive a list of drives that we should offer to the
- * user, with details of whether those drives are currently mounted or not.
- *
- * At the basic level we find the "disk"-level mount_points, looking at whether any of their partitions are mounted.
- *
- * This is complicated enormously by recent-ish macOS versions' habit of making `synthesized' volumes which
- * reflect data in `real' partitions. So, for example, we might have a real (physical) drive /dev/disk2 with
- * a partition /dev/disk2s2 whose content is made into a synthesized /dev/disk3, itself containing some partitions
- * which are mounted. /dev/disk2s2 is not considered to be mounted, in this case. So we need to know that
- * disk2s2 is related to disk3 so we can consider disk2s2 as mounted if any parts of disk3 are. In order to do
- * this I am taking the first two parts of the IODeviceTree and seeing if they exist anywhere in a
- * IOService identifier. If they do, I am assuming the IOService device is on the matching IODeviceTree device.
- *
- * Lots of this is guesswork and may be broken. In my defence the documentation that I have been able to
- * unearth is, to put it impolitely, crap.
- */
+static bool
+get_bool(CFDictionaryRef& description, void const* key)
+{
+ auto value = CFDictionaryGetValue(description, key);
+ if (!value) {
+ return false;
+ }
+
+ return CFBooleanGetValue(reinterpret_cast<CFBooleanRef>(value));
+}
+
static void
disk_appeared (DADiskRef disk, void* context)
@@ -339,32 +292,30 @@ disk_appeared (DADiskRef disk, void* context)
this_disk.model = get_model (description);
LOG_DISK("Vendor/model: %1 %2", this_disk.vendor.get_value_or("[none]"), this_disk.model.get_value_or("[none]"));
- auto media_path = analyse_media_path (description);
- if (!media_path) {
- LOG_DISK("Finding media path for %1 failed", bsd_name);
- return;
- }
-
- this_disk.media_path = *media_path;
- this_disk.whole = is_whole_drive (disk);
auto mp = mount_point (description);
if (mp) {
this_disk.mount_points.push_back (*mp);
}
- LOG_DISK(
- "%1 %2 mounted at %3",
- this_disk.media_path.real ? "Real" : "Synth",
- this_disk.whole ? "whole" : "part",
- mp ? mp->string() : "[nowhere]"
- );
-
auto media_size_cstr = CFDictionaryGetValue (description, kDADiskDescriptionMediaSizeKey);
if (!media_size_cstr) {
LOG_DISK_NC("Could not read media size");
return;
}
+ this_disk.system = get_bool(description, kDADiskDescriptionDeviceInternalKey) && !get_bool(description, kDADiskDescriptionMediaRemovableKey);
+ this_disk.writeable = get_bool(description, kDADiskDescriptionMediaWritableKey);
+ this_disk.partition = string(bsd_name).find("s", 5) != std::string::npos;
+
+ LOG_DISK(
+ "%1 %2 %3 %4 mounted at %5",
+ bsd_name,
+ this_disk.system ? "system" : "non-system",
+ this_disk.writeable ? "writeable" : "read-only",
+ this_disk.partition ? "partition" : "drive",
+ mp ? mp->string() : "[nowhere]"
+ );
+
CFNumberGetValue ((CFNumberRef) media_size_cstr, kCFNumberLongType, &this_disk.size);
CFRelease (description);
@@ -395,7 +346,12 @@ Drive::get ()
DAUnregisterCallback(session, (void *) disk_appeared, &disks);
CFRelease(session);
- auto drives = osx_disks_to_drives(disks);
+ vector<Drive> drives;
+ for (auto const& disk: disks) {
+ if (!disk.system && !disk.partition && disk.writeable) {
+ drives.push_back({disk.device, disk.mount_points, disk.size, disk.vendor, disk.model});
+ }
+ }
LOG_DISK("Drive::get() found %1 drives:", drives.size());
for (auto const& drive: drives) {
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc
index 6e573c639..6a6ed0b0c 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -36,9 +36,8 @@
#include <dcp/dcp.h>
#include <dcp/raw_convert.h>
#include <dcp/exceptions.h>
-#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_picture_asset.h>
-#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <dcp/reel.h>
#include <dcp/scope_guard.h>
#include <libxml++/libxml++.h>
@@ -90,8 +89,8 @@ DCPContent::DCPContent (boost::filesystem::path p)
set_default_colour_conversion ();
}
-DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+DCPContent::DCPContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content(node, film_directory)
{
video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
audio = AudioContent::from_xml (this, node, version);
@@ -139,6 +138,11 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
DCPOMATIC_ASSERT (false);
}
}
+
+ if (auto encoding = node->optional_string_child("VideoEncoding")) {
+ _video_encoding = video_encoding_from_string(*encoding);
+ }
+
_three_d = node->optional_bool_child("ThreeD").get_value_or (false);
auto ck = node->optional_string_child("ContentKind");
@@ -163,6 +167,13 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
}
_active_audio_channels = node->optional_number_child<int>("ActiveAudioChannels");
+
+ for (auto non_zero: node->node_children("HasNonZeroEntryPoint")) {
+ try {
+ auto type = string_to_text_type(non_zero->string_attribute("type"));
+ _has_non_zero_entry_point[type] = non_zero->content() == "1";
+ } catch (MetadataError&) {}
+ }
}
void
@@ -284,9 +295,23 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
new_text.push_back (c);
}
+ for (int i = 0; i < examiner->text_count(TextType::OPEN_CAPTION); ++i) {
+ auto c = make_shared<TextContent>(this, TextType::OPEN_CAPTION, TextType::OPEN_CAPTION);
+ c->set_language(examiner->open_caption_language());
+ examiner->add_fonts(c);
+ new_text.push_back(c);
+ }
+
+ for (int i = 0; i < examiner->text_count(TextType::CLOSED_SUBTITLE); ++i) {
+ auto c = make_shared<TextContent>(this, TextType::CLOSED_SUBTITLE, TextType::CLOSED_SUBTITLE);
+ c->set_dcp_track(examiner->dcp_subtitle_track(i));
+ examiner->add_fonts(c);
+ new_text.push_back(c);
+ }
+
for (int i = 0; i < examiner->text_count(TextType::CLOSED_CAPTION); ++i) {
auto c = make_shared<TextContent>(this, TextType::CLOSED_CAPTION, TextType::CLOSED_CAPTION);
- c->set_dcp_track (examiner->dcp_text_track(i));
+ c->set_dcp_track(examiner->dcp_caption_track(i));
examiner->add_fonts(c);
new_text.push_back (c);
}
@@ -299,6 +324,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
_needs_assets = examiner->needs_assets ();
_kdm_valid = examiner->kdm_valid ();
_standard = examiner->standard ();
+ _video_encoding = examiner->video_encoding();
_three_d = examiner->three_d ();
_content_kind = examiner->content_kind ();
_cpl = examiner->cpl ();
@@ -308,6 +334,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
}
_ratings = examiner->ratings ();
_content_versions = examiner->content_versions ();
+ _has_non_zero_entry_point = examiner->has_non_zero_entry_point();
}
if (needed_assets == needs_assets()) {
@@ -347,88 +374,99 @@ DCPContent::technical_summary () const
return s;
}
+
void
-DCPContent::as_xml (xmlpp::Node* node, bool with_paths) const
+DCPContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
- node->add_child("Type")->add_child_text ("DCP");
+ cxml::add_text_child(element, "Type", "DCP");
- Content::as_xml (node, with_paths);
+ Content::as_xml(element, with_paths, path_behaviour, film_directory);
if (video) {
- video->as_xml (node);
+ video->as_xml(element);
}
if (audio) {
- audio->as_xml (node);
- node->add_child("AudioFrameRate")->add_child_text (raw_convert<string> (audio->stream()->frame_rate()));
- node->add_child("AudioLength")->add_child_text (raw_convert<string> (audio->stream()->length()));
- audio->stream()->mapping().as_xml (node->add_child("AudioMapping"));
+ audio->as_xml(element);
+ cxml::add_text_child(element, "AudioFrameRate", raw_convert<string>(audio->stream()->frame_rate()));
+ cxml::add_text_child(element, "AudioLength", raw_convert<string>(audio->stream()->length()));
+ audio->stream()->mapping().as_xml(cxml::add_child(element, "AudioMapping"));
}
for (auto i: text) {
- i->as_xml (node);
+ i->as_xml(element);
}
if (atmos) {
- atmos->as_xml (node);
+ atmos->as_xml(element);
}
boost::mutex::scoped_lock lm (_mutex);
- node->add_child("Name")->add_child_text (_name);
- node->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0");
- node->add_child("NeedsAssets")->add_child_text (_needs_assets ? "1" : "0");
+ cxml::add_text_child(element, "Name", _name);
+ cxml::add_text_child(element, "Encrypted", _encrypted ? "1" : "0");
+ cxml::add_text_child(element, "NeedsAssets", _needs_assets ? "1" : "0");
if (_kdm) {
- node->add_child("KDM")->add_child_text (_kdm->as_xml ());
+ cxml::add_text_child(element, "KDM", _kdm->as_xml());
}
- node->add_child("KDMValid")->add_child_text (_kdm_valid ? "1" : "0");
- node->add_child("ReferenceVideo")->add_child_text (_reference_video ? "1" : "0");
- node->add_child("ReferenceAudio")->add_child_text (_reference_audio ? "1" : "0");
- node->add_child("ReferenceOpenSubtitle")->add_child_text(_reference_text[TextType::OPEN_SUBTITLE] ? "1" : "0");
- node->add_child("ReferenceClosedCaption")->add_child_text(_reference_text[TextType::CLOSED_CAPTION] ? "1" : "0");
+ cxml::add_text_child(element, "KDMValid", _kdm_valid ? "1" : "0");
+ cxml::add_text_child(element, "ReferenceVideo", _reference_video ? "1" : "0");
+ cxml::add_text_child(element, "ReferenceAudio", _reference_audio ? "1" : "0");
+ cxml::add_text_child(element, "ReferenceOpenSubtitle", _reference_text[TextType::OPEN_SUBTITLE] ? "1" : "0");
+ cxml::add_text_child(element, "ReferenceClosedCaption", _reference_text[TextType::CLOSED_CAPTION] ? "1" : "0");
if (_standard) {
switch (_standard.get ()) {
case dcp::Standard::INTEROP:
- node->add_child("Standard")->add_child_text ("Interop");
+ cxml::add_text_child(element, "Standard", "Interop");
break;
case dcp::Standard::SMPTE:
- node->add_child("Standard")->add_child_text ("SMPTE");
+ cxml::add_text_child(element, "Standard", "SMPTE");
break;
default:
DCPOMATIC_ASSERT (false);
}
}
- node->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0");
+ cxml::add_text_child(element, "VideoEncoding", video_encoding_to_string(_video_encoding));
+ cxml::add_text_child(element, "ThreeD", _three_d ? "1" : "0");
if (_content_kind) {
- node->add_child("ContentKind")->add_child_text(_content_kind->name());
+ cxml::add_text_child(element, "ContentKind", _content_kind->name());
}
if (_cpl) {
- node->add_child("CPL")->add_child_text (_cpl.get ());
+ cxml::add_text_child(element, "CPL", _cpl.get());
}
for (auto i: _reel_lengths) {
- node->add_child("ReelLength")->add_child_text (raw_convert<string> (i));
+ cxml::add_text_child(element, "ReelLength", raw_convert<string>(i));
}
for (auto const& i: _markers) {
- auto marker = node->add_child("Marker");
+ auto marker = cxml::add_child(element, "Marker");
marker->set_attribute("type", dcp::marker_to_string(i.first));
marker->add_child_text(raw_convert<string>(i.second.get()));
}
for (auto i: _ratings) {
- auto rating = node->add_child("Rating");
+ auto rating = cxml::add_child(element, "Rating");
i.as_xml (rating);
}
for (auto i: _content_versions) {
- node->add_child("ContentVersion")->add_child_text(i);
+ cxml::add_text_child(element, "ContentVersion", i);
}
if (_active_audio_channels) {
- node->add_child("ActiveAudioChannels")->add_child_text(raw_convert<string>(*_active_audio_channels));
+ cxml::add_text_child(element, "ActiveAudioChannels", raw_convert<string>(*_active_audio_channels));
+ }
+
+ for (auto i = 0; i < static_cast<int>(TextType::COUNT); ++i) {
+ if (_has_non_zero_entry_point[i]) {
+ auto has = cxml::add_child(element, "HasNonZeroEntryPoint");
+ has->add_child_text("1");
+ has->set_attribute("type", text_type_to_string(static_cast<TextType>(i)));
+ }
}
}
+
DCPTime
DCPContent::full_length (shared_ptr<const Film> film) const
{
@@ -612,7 +650,7 @@ DCPContent::reel_split_points (shared_ptr<const Film> film) const
}
bool
-DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_ptr<const Content>)> part, string overlapping, string& why_not) const
+DCPContent::can_reference_anything(shared_ptr<const Film> film, string& why_not) const
{
/* We must be using the same standard as the film */
if (_standard) {
@@ -658,15 +696,16 @@ DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_pt
}
}
- auto a = overlaps (film, film->content(), part, position(), end(film));
- if (a.size() != 1 || a.front().get() != this) {
- why_not = overlapping;
- return false;
- }
-
return true;
}
+bool
+DCPContent::overlaps(shared_ptr<const Film> film, function<bool (shared_ptr<const Content>)> part) const
+{
+ auto const a = dcpomatic::overlaps(film, film->content(), part, position(), end(film));
+ return a.size() != 1 || a.front().get() != this;
+}
+
bool
DCPContent::can_reference_video (shared_ptr<const Film> film, string& why_not) const
@@ -691,35 +730,23 @@ DCPContent::can_reference_video (shared_ptr<const Film> film, string& why_not) c
return false;
}
- /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
- return can_reference(
- film,
- [](shared_ptr<const Content> c) {
- return static_cast<bool>(c->video) && c->video->use();
- },
- _("it overlaps other video content; remove the other content."),
- why_not
- );
+ auto part = [](shared_ptr<const Content> c) {
+ return static_cast<bool>(c->video) && c->video->use();
+ };
+
+ if (overlaps(film, part)) {
+ /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+ why_not = _("it overlaps other video content.");
+ return false;
+ }
+
+ return can_reference_anything(film, why_not);
}
bool
DCPContent::can_reference_audio (shared_ptr<const Film> film, string& why_not) const
{
- shared_ptr<DCPDecoder> decoder;
- try {
- decoder = make_shared<DCPDecoder>(film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>());
- } catch (dcp::ReadError &) {
- /* We couldn't read the DCP, so it's probably missing */
- return false;
- } catch (DCPError &) {
- /* We couldn't read the DCP, so it's probably missing */
- return false;
- } catch (dcp::KDMDecryptionError &) {
- /* We have an incorrect KDM */
- return false;
- }
-
if (audio && audio->stream()) {
auto const channels = audio->stream()->channels();
if (channels != film->audio_channels()) {
@@ -728,51 +755,33 @@ DCPContent::can_reference_audio (shared_ptr<const Film> film, string& why_not) c
}
}
- /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
- return can_reference(
- film, [](shared_ptr<const Content> c) {
- return c->has_mapped_audio();
- },
- _("it overlaps other audio content; remove the other content."),
- why_not
- );
+ auto part = [](shared_ptr<const Content> c) {
+ return c->has_mapped_audio();
+ };
+
+ if (overlaps(film, part)) {
+ /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+ why_not = _("it overlaps other audio content.");
+ return false;
+ }
+
+ return can_reference_anything(film, why_not);
}
bool
DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, string& why_not) const
{
- shared_ptr<DCPDecoder> decoder;
- try {
- decoder = make_shared<DCPDecoder>(film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>());
- } catch (dcp::ReadError &) {
- /* We couldn't read the DCP, so it's probably missing */
- return false;
- } catch (DCPError &) {
- /* We couldn't read the DCP, so it's probably missing */
- return false;
- } catch (dcp::KDMDecryptionError &) {
- /* We have an incorrect KDM */
+ if (_has_non_zero_entry_point[TextType::OPEN_SUBTITLE]) {
+ /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+ why_not = _("one of its subtitle reels has a non-zero entry point so it must be re-written.");
return false;
}
- for (auto i: decoder->reels()) {
- if (type == TextType::OPEN_SUBTITLE) {
- if (i->main_subtitle() && i->main_subtitle()->entry_point().get_value_or(0) != 0) {
- /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
- why_not = _("one of its subtitle reels has a non-zero entry point so it must be re-written.");
- return false;
- }
- }
- if (type == TextType::CLOSED_CAPTION) {
- for (auto j: i->closed_captions()) {
- if (j->entry_point().get_value_or(0) != 0) {
- /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
- why_not = _("one of its closed caption has a non-zero entry point so it must be re-written.");
- return false;
- }
- }
- }
+ if (_has_non_zero_entry_point[TextType::CLOSED_CAPTION]) {
+ /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+ why_not = _("one of its closed caption has a non-zero entry point so it must be re-written.");
+ return false;
}
if (trim_start() != dcpomatic::ContentTime()) {
@@ -781,15 +790,17 @@ DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, stri
return false;
}
- /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
- return can_reference(
- film,
- [type](shared_ptr<const Content> c) {
- return std::find_if(c->text.begin(), c->text.end(), [type](shared_ptr<const TextContent> t) { return t->type() == type; }) != c->text.end();
- },
- _("they overlap other text content; remove the other content."),
- why_not
- );
+ auto part = [type](shared_ptr<const Content> c) {
+ return std::find_if(c->text.begin(), c->text.end(), [type](shared_ptr<const TextContent> t) { return t->type() == type; }) != c->text.end();
+ };
+
+ if (overlaps(film, part)) {
+ /// TRANSLATORS: this string will follow "Cannot reference this DCP: "
+ why_not = _("it overlaps other text content.");
+ return false;
+ }
+
+ return can_reference_anything(film, why_not);
}
void
@@ -853,8 +864,14 @@ DCPContent::check_font_ids()
return;
}
+ /* This might be called on a TextContent that already has some fonts
+ * (e.g. if run from a build with a LastWrittenBy containing only a git
+ * hash, or from a version between 2.16.15 and 2.17.17) so we'll get an
+ * error if we don't clear them out first.
+ */
+ text[0]->clear_fonts();
DCPExaminer examiner(shared_from_this(), true);
- examiner.add_fonts(text.front());
+ examiner.add_fonts(text[0]);
}
diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h
index 3753740a2..a866703f2 100644
--- a/src/lib/dcp_content.h
+++ b/src/lib/dcp_content.h
@@ -32,6 +32,7 @@
#include "enum_indexed_vector.h"
#include "font.h"
#include "resolution.h"
+#include "video_encoding.h"
#include <libcxml/cxml.h>
#include <dcp/content_kind.h>
#include <dcp/encrypted_kdm.h>
@@ -59,7 +60,7 @@ class DCPContent : public Content
{
public:
DCPContent (boost::filesystem::path p);
- DCPContent (cxml::ConstNodePtr, int version);
+ DCPContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int version);
std::shared_ptr<DCPContent> shared_from_this () {
return std::dynamic_pointer_cast<DCPContent> (Content::shared_from_this ());
@@ -75,7 +76,14 @@ public:
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override;
std::string summary () const override;
std::string technical_summary () const override;
- void as_xml (xmlpp::Node *, bool with_paths) const override;
+
+ void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const override;
+
std::string identifier () const override;
void take_settings_from (std::shared_ptr<const Content> c) override;
@@ -100,6 +108,8 @@ public:
bool needs_kdm () const;
bool needs_assets () const;
+ bool can_reference_anything(std::shared_ptr<const Film> film, std::string& why_not) const;
+
void set_reference_video (bool r);
bool reference_video () const {
@@ -158,6 +168,11 @@ public:
return _standard.get ();
}
+ VideoEncoding video_encoding() const {
+ boost::mutex::scoped_lock lm (_mutex);
+ return _video_encoding;
+ }
+
std::map<dcp::Marker, dcpomatic::ContentTime> markers () const {
return _markers;
}
@@ -186,12 +201,7 @@ private:
void read_directory (boost::filesystem::path);
void read_sub_directory (boost::filesystem::path);
std::list<dcpomatic::DCPTimePeriod> reels (std::shared_ptr<const Film> film) const;
- bool can_reference (
- std::shared_ptr<const Film> film,
- std::function <bool (std::shared_ptr<const Content>)>,
- std::string overlapping,
- std::string& why_not
- ) const;
+ bool overlaps(std::shared_ptr<const Film> film, std::function<bool (std::shared_ptr<const Content>)> part) const;
std::string _name;
/** true if our DCP is encrypted */
@@ -216,6 +226,7 @@ private:
EnumIndexedVector<bool, TextType> _reference_text;
boost::optional<dcp::Standard> _standard;
+ VideoEncoding _video_encoding;
boost::optional<dcp::ContentKind> _content_kind;
bool _three_d;
/** ID of the CPL to use; older metadata might not specify this: in that case
@@ -227,6 +238,7 @@ private:
std::map<dcp::Marker, dcpomatic::ContentTime> _markers;
std::vector<dcp::Rating> _ratings;
std::vector<std::string> _content_versions;
+ EnumIndexedVector<bool, TextType> _has_non_zero_entry_point;
boost::optional<int> _active_audio_channels;
};
diff --git a/src/lib/dcp_content_type.cc b/src/lib/dcp_content_type.cc
index bc9bf0d67..d689f138c 100644
--- a/src/lib/dcp_content_type.cc
+++ b/src/lib/dcp_content_type.cc
@@ -28,8 +28,9 @@
#include "i18n.h"
+using std::string;
+using std::vector;
using boost::optional;
-using namespace std;
vector<DCPContentType> DCPContentType::_dcp_content_types;
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc
index 727dcbf26..cd792c0b7 100644
--- a/src/lib/dcp_decoder.cc
+++ b/src/lib/dcp_decoder.cc
@@ -26,32 +26,35 @@
#include "constants.h"
#include "dcp_content.h"
#include "dcp_decoder.h"
+#include "dcpomatic_log.h"
#include "digester.h"
#include "ffmpeg_image_proxy.h"
#include "frame_interval_checker.h"
#include "image.h"
#include "j2k_image_proxy.h"
+#include "raw_image_proxy.h"
#include "text_decoder.h"
+#include "util.h"
#include "video_decoder.h"
#include <dcp/cpl.h>
#include <dcp/dcp.h>
#include <dcp/decrypted_kdm.h>
-#include <dcp/mono_picture_asset.h>
-#include <dcp/mono_picture_asset_reader.h>
-#include <dcp/mono_picture_frame.h>
+#include <dcp/mono_j2k_picture_asset.h>
+#include <dcp/mono_j2k_picture_asset_reader.h>
+#include <dcp/mono_j2k_picture_frame.h>
+#include <dcp/mono_mpeg2_picture_asset.h>
#include <dcp/reel.h>
#include <dcp/reel_atmos_asset.h>
-#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_picture_asset.h>
#include <dcp/reel_sound_asset.h>
-#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <dcp/search.h>
#include <dcp/sound_asset_reader.h>
#include <dcp/sound_frame.h>
-#include <dcp/stereo_picture_asset.h>
-#include <dcp/stereo_picture_asset_reader.h>
-#include <dcp/stereo_picture_frame.h>
-#include <dcp/subtitle_image.h>
+#include <dcp/stereo_j2k_picture_asset.h>
+#include <dcp/stereo_j2k_picture_asset_reader.h>
+#include <dcp/stereo_j2k_picture_frame.h>
+#include <dcp/text_image.h>
#include <iostream>
#include "i18n.h"
@@ -169,43 +172,60 @@ DCPDecoder::pass ()
*/
pass_texts (_next, picture_asset->size());
- if ((_mono_reader || _stereo_reader) && (_decode_referenced || !_dcp_content->reference_video())) {
+ if ((_j2k_mono_reader || _j2k_stereo_reader || _mpeg2_mono_reader) && (_decode_referenced || !_dcp_content->reference_video())) {
auto const entry_point = (*_reel)->main_picture()->entry_point().get_value_or(0);
- if (_mono_reader) {
+ if (_j2k_mono_reader) {
video->emit (
film(),
std::make_shared<J2KImageProxy>(
- _mono_reader->get_frame (entry_point + frame),
+ _j2k_mono_reader->get_frame(entry_point + frame),
picture_asset->size(),
AV_PIX_FMT_XYZ12LE,
_forced_reduction
),
- _offset + frame
+ ContentTime::from_frames(_offset + frame, vfr)
);
- } else {
+ } else if (_j2k_stereo_reader) {
video->emit (
film(),
std::make_shared<J2KImageProxy>(
- _stereo_reader->get_frame (entry_point + frame),
+ _j2k_stereo_reader->get_frame (entry_point + frame),
picture_asset->size(),
dcp::Eye::LEFT,
AV_PIX_FMT_XYZ12LE,
_forced_reduction
),
- _offset + frame
+ ContentTime::from_frames(_offset + frame, vfr)
);
video->emit (
film(),
std::make_shared<J2KImageProxy>(
- _stereo_reader->get_frame (entry_point + frame),
+ _j2k_stereo_reader->get_frame (entry_point + frame),
picture_asset->size(),
dcp::Eye::RIGHT,
AV_PIX_FMT_XYZ12LE,
_forced_reduction
),
- _offset + frame
+ ContentTime::from_frames(_offset + frame, vfr)
);
+ } else if (_mpeg2_mono_reader) {
+ /* XXX: got to flush this at some point */
+ try {
+ for (auto const& image: _mpeg2_decompressor->decompress_frame(_mpeg2_mono_reader->get_frame(entry_point + frame))) {
+ video->emit(
+ film(),
+ /* XXX: should this be PADDED? */
+ std::make_shared<RawImageProxy>(std::make_shared<Image>(image.frame(), Image::Alignment::COMPACT)),
+ /* XXX: this will be wrong */
+ ContentTime::from_frames(_offset + frame, vfr)
+ );
+ }
+ } catch (dcp::MPEG2DecompressionError& e) {
+ LOG_ERROR("Failed to decompress MPEG video frame %1 (%2)", entry_point + frame, e.what());
+ } catch (dcp::ReadError& e) {
+ LOG_ERROR("Failed to read MPEG2 video frame %1 (%2)", entry_point + frame, e.what());
+ }
}
}
@@ -214,15 +234,32 @@ DCPDecoder::pass ()
auto sf = _sound_reader->get_frame (entry_point + frame);
auto from = sf->data ();
- int const channels = _dcp_content->audio->stream()->channels ();
- int const frames = sf->size() / (3 * channels);
+ int const channels = _dcp_content->audio->stream()->channels();
+ int const frames = sf->size() / (sf->bits() * channels / 8);
auto data = make_shared<AudioBuffers>(channels, frames);
auto data_data = data->data();
- for (int i = 0; i < frames; ++i) {
- for (int j = 0; j < channels; ++j) {
- data_data[j][i] = static_cast<int> ((from[0] << 8) | (from[1] << 16) | (from[2] << 24)) / static_cast<float> (INT_MAX - 256);
- from += 3;
+
+ switch (sf->bits()) {
+ case 24:
+ {
+ for (int i = 0; i < frames; ++i) {
+ for (int j = 0; j < channels; ++j) {
+ data_data[j][i] = static_cast<int>((from[0] << 8) | (from[1] << 16) | (from[2] << 24)) / static_cast<float> (INT_MAX - 256);
+ from += 3;
+ }
+ }
+ break;
+ }
+ case 16:
+ {
+ for (int i = 0; i < frames; ++i) {
+ for (int j = 0; j < channels; ++j) {
+ data_data[j][i] = static_cast<int>(from[0] << 16 | (from[1] << 24)) / static_cast<float> (INT_MAX - 256);
+ from += 2;
+ }
}
+ break;
+ }
}
audio->emit (film(), _dcp_content->audio->stream(), data, ContentTime::from_frames (_offset, vfr) + _next);
@@ -280,7 +317,7 @@ DCPDecoder::pass_texts (ContentTime next, dcp::Size size)
void
DCPDecoder::pass_texts (
- ContentTime next, shared_ptr<dcp::SubtitleAsset> asset, bool reference, int64_t entry_point, shared_ptr<TextDecoder> decoder, dcp::Size size
+ ContentTime next, shared_ptr<dcp::TextAsset> asset, bool reference, int64_t entry_point, shared_ptr<TextDecoder> decoder, dcp::Size size
)
{
auto const vfr = _dcp_content->active_video_frame_rate (film());
@@ -288,16 +325,16 @@ DCPDecoder::pass_texts (
auto const frame = next.frames_round (vfr);
if (_decode_referenced || !reference) {
- auto subs = asset->subtitles_during (
+ auto subs = asset->texts_during(
dcp::Time (entry_point + frame, vfr, vfr),
dcp::Time (entry_point + frame + 1, vfr, vfr),
true
);
- vector<dcp::SubtitleString> strings;
+ vector<dcp::TextString> strings;
for (auto i: subs) {
- auto is = dynamic_pointer_cast<const dcp::SubtitleString>(i);
+ auto is = dynamic_pointer_cast<const dcp::TextString>(i);
if (is) {
if (!strings.empty() && (strings.back().in() != is->in() || strings.back().out() != is->out())) {
auto b = strings.back();
@@ -312,7 +349,7 @@ DCPDecoder::pass_texts (
strings.clear ();
}
- dcp::SubtitleString is_copy = *is;
+ auto is_copy = *is;
if (is_copy.font()) {
is_copy.set_font(_font_id_allocator.font_id(_reel - _reels.begin(), asset->id(), is_copy.font().get()));
} else {
@@ -325,7 +362,7 @@ DCPDecoder::pass_texts (
this would need to be done both here and in DCPSubtitleDecoder.
*/
- auto ii = dynamic_pointer_cast<const dcp::SubtitleImage>(i);
+ auto ii = dynamic_pointer_cast<const dcp::TextImage>(i);
if (ii) {
emit_subtitle_image (
ContentTimePeriod (
@@ -367,38 +404,40 @@ DCPDecoder::next_reel ()
void
DCPDecoder::get_readers ()
{
+ _j2k_mono_reader.reset();
+ _j2k_stereo_reader.reset();
+ _mpeg2_mono_reader.reset();
+ _sound_reader.reset();
+ _atmos_reader.reset();
+ _mpeg2_decompressor.reset();
+ _atmos_metadata = boost::none;
+
if (_reel == _reels.end() || !_dcp_content->can_be_played ()) {
- _mono_reader.reset ();
- _stereo_reader.reset ();
- _sound_reader.reset ();
- _atmos_reader.reset ();
return;
}
if (video && !video->ignore() && (*_reel)->main_picture()) {
auto asset = (*_reel)->main_picture()->asset ();
- auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset> (asset);
- auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset> (asset);
- DCPOMATIC_ASSERT (mono || stereo);
- if (mono) {
- _mono_reader = mono->start_read ();
- _mono_reader->set_check_hmac (false);
- _stereo_reader.reset ();
+ auto j2k_mono = dynamic_pointer_cast<dcp::MonoJ2KPictureAsset>(asset);
+ auto j2k_stereo = dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(asset);
+ auto mpeg2_mono = dynamic_pointer_cast<dcp::MonoMPEG2PictureAsset>(asset);
+ DCPOMATIC_ASSERT(j2k_mono || j2k_stereo || mpeg2_mono)
+ if (j2k_mono) {
+ _j2k_mono_reader = j2k_mono->start_read();
+ _j2k_mono_reader->set_check_hmac(false);
+ } else if (j2k_stereo) {
+ _j2k_stereo_reader = j2k_stereo->start_read();
+ _j2k_stereo_reader->set_check_hmac(false);
} else {
- _stereo_reader = stereo->start_read ();
- _stereo_reader->set_check_hmac (false);
- _mono_reader.reset ();
+ _mpeg2_mono_reader = mpeg2_mono->start_read();
+ _mpeg2_mono_reader->set_check_hmac(false);
+ _mpeg2_decompressor = std::make_shared<dcp::MPEG2Decompressor>();
}
- } else {
- _mono_reader.reset ();
- _stereo_reader.reset ();
}
if (audio && !audio->ignore() && (*_reel)->main_sound()) {
_sound_reader = (*_reel)->main_sound()->asset()->start_read ();
_sound_reader->set_check_hmac (false);
- } else {
- _sound_reader.reset ();
}
if ((*_reel)->atmos()) {
@@ -406,9 +445,6 @@ DCPDecoder::get_readers ()
_atmos_reader = asset->start_read();
_atmos_reader->set_check_hmac (false);
_atmos_metadata = AtmosMetadata (asset);
- } else {
- _atmos_reader.reset ();
- _atmos_metadata = boost::none;
}
}
diff --git a/src/lib/dcp_decoder.h b/src/lib/dcp_decoder.h
index 2c0cd8f41..56a13874b 100644
--- a/src/lib/dcp_decoder.h
+++ b/src/lib/dcp_decoder.h
@@ -27,10 +27,12 @@
#include "atmos_metadata.h"
#include "decoder.h"
#include "font_id_allocator.h"
-#include <dcp/mono_picture_asset_reader.h>
-#include <dcp/stereo_picture_asset_reader.h>
+#include <dcp/mono_j2k_picture_asset_reader.h>
+#include <dcp/stereo_j2k_picture_asset_reader.h>
+#include <dcp/mono_mpeg2_picture_asset_reader.h>
+#include <dcp/mpeg2_transcode.h>
#include <dcp/sound_asset_reader.h>
-#include <dcp/subtitle_asset.h>
+#include <dcp/text_asset.h>
namespace dcp {
@@ -77,7 +79,7 @@ private:
void pass_texts (dcpomatic::ContentTime next, dcp::Size size);
void pass_texts (
dcpomatic::ContentTime next,
- std::shared_ptr<dcp::SubtitleAsset> asset,
+ std::shared_ptr<dcp::TextAsset> asset,
bool reference,
int64_t entry_point,
std::shared_ptr<TextDecoder> decoder,
@@ -94,15 +96,19 @@ private:
std::vector<std::shared_ptr<dcp::Reel>>::iterator _reel;
/** Offset of _reel from the start of the content in frames */
int64_t _offset = 0;
- /** Reader for current mono picture asset, if applicable */
- std::shared_ptr<dcp::MonoPictureAssetReader> _mono_reader;
- /** Reader for current stereo picture asset, if applicable */
- std::shared_ptr<dcp::StereoPictureAssetReader> _stereo_reader;
+ /** Reader for current J2K mono picture asset, if applicable */
+ std::shared_ptr<dcp::MonoJ2KPictureAssetReader> _j2k_mono_reader;
+ /** Reader for current J2K stereo picture asset, if applicable */
+ std::shared_ptr<dcp::StereoJ2KPictureAssetReader> _j2k_stereo_reader;
+ /** Reader for current MPEG2 mono picture asset, if applicable */
+ std::shared_ptr<dcp::MonoMPEG2PictureAssetReader> _mpeg2_mono_reader;
/** Reader for current sound asset, if applicable */
std::shared_ptr<dcp::SoundAssetReader> _sound_reader;
std::shared_ptr<dcp::AtmosAssetReader> _atmos_reader;
boost::optional<AtmosMetadata> _atmos_metadata;
+ std::shared_ptr<dcp::MPEG2Decompressor> _mpeg2_decompressor;
+
bool _decode_referenced = false;
boost::optional<int> _forced_reduction;
diff --git a/src/lib/dcp_digest_file.cc b/src/lib/dcp_digest_file.cc
index eb243b60d..57e87bd6f 100644
--- a/src/lib/dcp_digest_file.cc
+++ b/src/lib/dcp_digest_file.cc
@@ -24,9 +24,9 @@
#include <dcp/mxf.h>
#include <dcp/reel.h>
#include <dcp/reel_picture_asset.h>
+#include <dcp/reel_smpte_text_asset.h>
#include <dcp/reel_sound_asset.h>
-#include <dcp/reel_subtitle_asset.h>
-#include <dcp/reel_smpte_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <libxml++/libxml++.h>
@@ -42,14 +42,14 @@ template <class R, class A>
void add_asset(string film_key, shared_ptr<R> reel_asset, shared_ptr<A> asset, xmlpp::Element* reel, string name)
{
if (asset) {
- auto out = reel->add_child(name);
- out->add_child("Id")->add_child_text("urn:uuid:" + asset->id());
+ auto out = cxml::add_child(reel, name);
+ cxml::add_text_child(out, "Id", "urn:uuid:" + asset->id());
if (reel_asset->annotation_text()) {
- out->add_child("AnnotationText")->add_child_text(reel_asset->annotation_text().get());
+ cxml::add_text_child(out, "AnnotationText", reel_asset->annotation_text().get());
}
if (asset->key_id()) {
- out->add_child("KeyId")->add_child_text("urn:uuid:" + asset->key_id().get());
- out->add_child("Key")->add_child_text(asset->key() ? asset->key()->hex() : film_key);
+ cxml::add_text_child(out, "KeyId", "urn:uuid:" + asset->key_id().get());
+ cxml::add_text_child(out, "Key", asset->key() ? asset->key()->hex() : film_key);
}
}
};
@@ -64,23 +64,23 @@ write_dcp_digest_file (
{
xmlpp::Document doc;
auto root = doc.create_root_node("FHG_DCP_DIGEST", "http://www.fhg.de/2009/04/02/dcpdig");
- root->add_child("InteropMode")->add_child_text(cpl->standard() == dcp::Standard::INTEROP ? "true" : "false");
- auto composition = root->add_child("CompositionList")->add_child("Composition");
- composition->add_child("Id")->add_child_text("urn:uuid:" + cpl->id());
- composition->add_child("AnnotationText")->add_child_text(cpl->annotation_text().get_value_or(""));
- composition->add_child("ContentTitleText")->add_child_text(cpl->content_title_text());
- auto reel_list = composition->add_child("ReelList");
+ cxml::add_text_child(root, "InteropMode", cpl->standard() == dcp::Standard::INTEROP ? "true" : "false");
+ auto composition = cxml::add_child(cxml::add_child(root, "CompositionList"), "Composition");
+ cxml::add_text_child(composition, "Id", "urn:uuid:" + cpl->id());
+ cxml::add_text_child(composition, "AnnotationText", cpl->annotation_text().get_value_or(""));
+ cxml::add_text_child(composition, "ContentTitleText", cpl->content_title_text());
+ auto reel_list = cxml::add_child(composition, "ReelList");
for (auto in_reel: cpl->reels()) {
- auto out_reel = reel_list->add_child("Reel");
- out_reel->add_child("Id")->add_child_text("urn:uuid:" + in_reel->id());
- out_reel->add_child("AnnotationText");
+ auto out_reel = cxml::add_child(reel_list, "Reel");
+ cxml::add_text_child(out_reel, "Id", "urn:uuid:" + in_reel->id());
+ cxml::add_child(out_reel, "AnnotationText");
if (in_reel->main_picture()) {
add_asset(film_key, in_reel->main_picture(), in_reel->main_picture()->asset(), out_reel, "MainPicture");
}
if (in_reel->main_sound()) {
add_asset(film_key, in_reel->main_sound(), in_reel->main_sound()->asset(), out_reel, "MainSound");
}
- if (auto smpte_sub = dynamic_pointer_cast<dcp::ReelSMPTESubtitleAsset>(in_reel->main_subtitle())) {
+ if (auto smpte_sub = dynamic_pointer_cast<dcp::ReelSMPTETextAsset>(in_reel->main_subtitle())) {
add_asset(film_key, smpte_sub, smpte_sub->smpte_asset(), out_reel, "MainSubtitle");
}
}
diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc
index ae5f9e9c0..3ee6dd99c 100644
--- a/src/lib/dcp_examiner.cc
+++ b/src/lib/dcp_examiner.cc
@@ -32,24 +32,25 @@
#include <dcp/cpl.h>
#include <dcp/dcp.h>
#include <dcp/decrypted_kdm.h>
-#include <dcp/mono_picture_asset.h>
-#include <dcp/mono_picture_asset_reader.h>
-#include <dcp/mono_picture_frame.h>
+#include <dcp/mono_j2k_picture_asset.h>
+#include <dcp/mono_j2k_picture_asset_reader.h>
+#include <dcp/mono_j2k_picture_frame.h>
+#include <dcp/mono_mpeg2_picture_asset.h>
+#include <dcp/mpeg2_transcode.h>
#include <dcp/reel.h>
#include <dcp/reel_atmos_asset.h>
-#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_markers_asset.h>
#include <dcp/reel_picture_asset.h>
#include <dcp/reel_sound_asset.h>
-#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <dcp/search.h>
#include <dcp/sound_asset.h>
#include <dcp/sound_asset.h>
#include <dcp/sound_asset_reader.h>
-#include <dcp/stereo_picture_asset.h>
-#include <dcp/stereo_picture_asset_reader.h>
-#include <dcp/stereo_picture_frame.h>
-#include <dcp/subtitle_asset.h>
+#include <dcp/stereo_j2k_picture_asset.h>
+#include <dcp/stereo_j2k_picture_asset_reader.h>
+#include <dcp/stereo_j2k_picture_frame.h>
+#include <dcp/text_asset.h>
#include <iostream>
#include "i18n.h"
@@ -94,6 +95,9 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
if (reel->main_subtitle() && !reel->main_subtitle()->asset_ref().resolved()) {
++unsatisfied;
}
+ if (reel->main_caption() && !reel->main_caption()->asset_ref().resolved()) {
+ ++unsatisfied;
+ }
if (reel->atmos() && !reel->atmos()->asset_ref().resolved()) {
++unsatisfied;
}
@@ -162,6 +166,10 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
} else if (_video_size.get() != asset->size ()) {
throw DCPError (_("Mismatched video sizes in DCP"));
}
+
+ if (dynamic_pointer_cast<dcp::MPEG2PictureAsset>(asset)) {
+ _video_range = VideoRange::VIDEO;
+ }
}
}
@@ -196,48 +204,72 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
}
}
- if (reel->main_subtitle()) {
- if (!reel->main_subtitle()->asset_ref().resolved()) {
- LOG_GENERAL("Main subtitle %1 of reel %2 is missing", reel->main_subtitle()->id(), reel->id());
- _needs_assets = true;
- } else {
- LOG_GENERAL("Main subtitle %1 of reel %2 found", reel->main_subtitle()->id(), reel->id());
+ auto read_main_text = [this, reel, reel_index, try_to_parse_language](
+ shared_ptr<dcp::ReelTextAsset> reel_asset, TextType type, string name, boost::optional<dcp::LanguageTag>& language
+ ) {
+
+ if (reel_asset) {
+ if (reel_asset->entry_point().get_value_or(0) != 0) {
+ _has_non_zero_entry_point[type] = true;
+ }
+ if (!reel_asset->asset_ref().resolved()) {
+ LOG_GENERAL("Main %1 %2 of reel %3 is missing", name, reel_asset->id(), reel->id());
+ _needs_assets = true;
+ } else {
+ LOG_GENERAL("Main %1 %2 of reel %3 found", name, reel_asset->id(), reel->id());
- _text_count[TextType::OPEN_SUBTITLE] = 1;
- _open_subtitle_language = try_to_parse_language(reel->main_subtitle()->language());
+ _text_count[type] = 1;
+ language = try_to_parse_language(reel_asset->language());
- auto asset = reel->main_subtitle()->asset();
- for (auto const& font: asset->font_data()) {
- _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)});
+ auto asset = reel_asset->asset();
+ for (auto const& font: asset->font_data()) {
+ _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)});
+ }
}
}
- }
- _text_count[TextType::CLOSED_CAPTION] = std::max(_text_count[TextType::CLOSED_CAPTION], static_cast<int>(reel->closed_captions().size()));
- if (_dcp_text_tracks.size() < reel->closed_captions().size()) {
- /* We only want to add 1 DCPTextTrack to _dcp_text_tracks per closed caption. I guess it's possible that different
- * reels have different numbers of tracks (though I don't think they should) so make sure that _dcp_text_tracks ends
- * up with the maximum.
- */
- _dcp_text_tracks.clear();
- for (auto ccap: reel->closed_captions()) {
- _dcp_text_tracks.push_back(DCPTextTrack(ccap->annotation_text().get_value_or(""), try_to_parse_language(ccap->language())));
+ };
+
+ read_main_text(reel->main_subtitle(), TextType::OPEN_SUBTITLE, "subtitle", _open_subtitle_language);
+ read_main_text(reel->main_caption(), TextType::OPEN_CAPTION, "caption", _open_caption_language);
+
+ auto read_closed_text = [this, reel, reel_index, try_to_parse_language](
+ vector<shared_ptr<dcp::ReelTextAsset>> reel_assets, TextType type, string name, vector<DCPTextTrack>& tracks
+ ) {
+
+ _text_count[type] = std::max(_text_count[type], static_cast<int>(reel_assets.size()));
+
+ if (tracks.size() < reel_assets.size()) {
+ /* We only want to add 1 DCPTextTrack to tracks per closed subtitle/caption. I guess it's possible that different
+ * reels have different numbers of tracks (though I don't think they should) so make sure that tracks ends
+ * up with the maximum.
+ */
+ tracks.clear();
+ for (auto subtitle: reel_assets) {
+ tracks.push_back(DCPTextTrack(subtitle->annotation_text().get_value_or(""), try_to_parse_language(subtitle->language())));
+ }
}
- }
- for (auto ccap: reel->closed_captions()) {
- if (!ccap->asset_ref().resolved()) {
- LOG_GENERAL("Closed caption %1 of reel %2 is missing", ccap->id(), reel->id());
- _needs_assets = true;
- } else {
- LOG_GENERAL("Closed caption %1 of reel %2 found", ccap->id(), reel->id());
+ for (auto text: reel_assets) {
+ if (text->entry_point().get_value_or(0) != 0) {
+ _has_non_zero_entry_point[type] = true;
+ }
+ if (!text->asset_ref().resolved()) {
+ LOG_GENERAL("Closed %1 %2 of reel %3 is missing", name, text->id(), reel->id());
+ _needs_assets = true;
+ } else {
+ LOG_GENERAL("Closed %1 %2 of reel %3 found", name, text->id(), reel->id());
- auto asset = ccap->asset();
- for (auto const& font: asset->font_data()) {
- _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)});
+ auto asset = text->asset();
+ for (auto const& font: asset->font_data()) {
+ _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)});
+ }
}
}
- }
+ };
+
+ read_closed_text(reel->closed_subtitles(), TextType::CLOSED_SUBTITLE, "subtitle", _dcp_subtitle_tracks);
+ read_closed_text(reel->closed_captions(), TextType::CLOSED_CAPTION, "caption", _dcp_caption_tracks);
if (reel->main_markers ()) {
auto rm = reel->main_markers()->get();
@@ -259,6 +291,10 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
_reel_lengths.push_back(reel->main_sound()->actual_duration());
} else if (reel->main_subtitle()) {
_reel_lengths.push_back(reel->main_subtitle()->actual_duration());
+ } else if (reel->main_caption()) {
+ _reel_lengths.push_back(reel->main_caption()->actual_duration());
+ } else if (!reel->closed_subtitles().empty()) {
+ _reel_lengths.push_back(reel->closed_subtitles().front()->actual_duration());
} else if (!reel->closed_captions().empty()) {
_reel_lengths.push_back(reel->closed_captions().front()->actual_duration());
} else if (!reel->atmos()) {
@@ -288,17 +324,26 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
LOG_GENERAL_NC ("Picture has no key");
break;
}
- auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset>(pic);
- auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset>(pic);
+ auto j2k_mono = dynamic_pointer_cast<dcp::MonoJ2KPictureAsset>(pic);
+ auto j2k_stereo = dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(pic);
+ auto mpeg2_mono = dynamic_pointer_cast<dcp::MonoMPEG2PictureAsset>(pic);
- if (mono) {
- auto reader = mono->start_read();
+ if (j2k_mono) {
+ auto reader = j2k_mono->start_read();
reader->set_check_hmac (false);
reader->get_frame(0)->xyz_image();
- } else {
- auto reader = stereo->start_read();
+ _video_encoding = VideoEncoding::JPEG2000;
+ } else if (j2k_stereo) {
+ auto reader = j2k_stereo->start_read();
reader->set_check_hmac (false);
reader->get_frame(0)->xyz_image(dcp::Eye::LEFT);
+ _video_encoding = VideoEncoding::JPEG2000;
+ } else if (mpeg2_mono) {
+ auto reader = mpeg2_mono->start_read();
+ reader->set_check_hmac(false);
+ dcp::MPEG2Decompressor decompressor;
+ decompressor.decompress_frame(reader->get_frame(0));
+ _video_encoding = VideoEncoding::MPEG2;
}
}
@@ -322,7 +367,18 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
LOG_GENERAL_NC ("Subtitle has no key");
break;
}
- sub->subtitles ();
+ sub->texts();
+ }
+
+ if (i->main_caption() && i->main_caption()->asset_ref().resolved()) {
+ auto cap = i->main_caption()->asset();
+ auto mxf_cap = dynamic_pointer_cast<dcp::MXF>(cap);
+ if (mxf_cap && mxf_cap->encrypted() && !mxf_cap->key()) {
+ _kdm_valid = false;
+ LOG_GENERAL_NC("Caption has no key");
+ break;
+ }
+ cap->texts();
}
if (i->atmos() && i->atmos()->asset_ref().resolved()) {
@@ -349,7 +405,7 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
_standard = selected_cpl->standard();
if (!selected_cpl->reels().empty()) {
auto first_reel = selected_cpl->reels()[0];
- _three_d = first_reel->main_picture() && first_reel->main_picture()->asset_ref().resolved() && dynamic_pointer_cast<dcp::StereoPictureAsset>(first_reel->main_picture()->asset());
+ _three_d = first_reel->main_picture() && first_reel->main_picture()->asset_ref().resolved() && dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(first_reel->main_picture()->asset());
}
_ratings = selected_cpl->ratings();
for (auto version: selected_cpl->content_versions()) {
diff --git a/src/lib/dcp_examiner.h b/src/lib/dcp_examiner.h
index 04fa31ea4..5e2a33361 100644
--- a/src/lib/dcp_examiner.h
+++ b/src/lib/dcp_examiner.h
@@ -61,7 +61,7 @@ public:
}
VideoRange range () const override {
- return VideoRange::FULL;
+ return _video_range;
}
PixelQuanta pixel_quanta () const override {
@@ -104,8 +104,7 @@ public:
return _audio_language;
}
- /** @param type TEXT_OPEN_SUBTITLE or TEXT_CLOSED_CAPTION.
- * @return the number of "streams" of this type in the DCP.
+ /* @return the number of "streams" of @type in the DCP.
* Reels do not affect the return value of this method: if a DCP
* has any subtitles, type=TEXT_OPEN_SUBTITLE will return 1.
*/
@@ -117,9 +116,18 @@ public:
return _open_subtitle_language;
}
- DCPTextTrack dcp_text_track (int i) const {
- DCPOMATIC_ASSERT (i >= 0 && i < static_cast<int>(_dcp_text_tracks.size()));
- return _dcp_text_tracks[i];
+ boost::optional<dcp::LanguageTag> open_caption_language() const {
+ return _open_caption_language;
+ }
+
+ DCPTextTrack dcp_subtitle_track(int i) const {
+ DCPOMATIC_ASSERT (i >= 0 && i < static_cast<int>(_dcp_subtitle_tracks.size()));
+ return _dcp_subtitle_tracks[i];
+ }
+
+ DCPTextTrack dcp_caption_track(int i) const {
+ DCPOMATIC_ASSERT (i >= 0 && i < static_cast<int>(_dcp_caption_tracks.size()));
+ return _dcp_caption_tracks[i];
}
bool kdm_valid () const {
@@ -130,6 +138,10 @@ public:
return _standard;
}
+ VideoEncoding video_encoding() const {
+ return _video_encoding;
+ }
+
bool three_d () const {
return _three_d;
}
@@ -171,6 +183,10 @@ public:
return _atmos_edit_rate;
}
+ EnumIndexedVector<bool, TextType> has_non_zero_entry_point() const {
+ return _has_non_zero_entry_point;
+ }
+
void add_fonts(std::shared_ptr<TextContent> content);
private:
@@ -190,12 +206,16 @@ private:
/** number of different assets of each type (OCAP/CCAP) */
EnumIndexedVector<int, TextType> _text_count;
boost::optional<dcp::LanguageTag> _open_subtitle_language;
- /** the DCPTextTracks for each of our CCAPs */
- std::vector<DCPTextTrack> _dcp_text_tracks;
+ boost::optional<dcp::LanguageTag> _open_caption_language;
+ /** the DCPTextTracks for each of our closed subtitles */
+ std::vector<DCPTextTrack> _dcp_subtitle_tracks;
+ /** the DCPTextTracks for each of our closed captions */
+ std::vector<DCPTextTrack> _dcp_caption_tracks;
bool _encrypted = false;
bool _needs_assets = false;
bool _kdm_valid = false;
boost::optional<dcp::Standard> _standard;
+ VideoEncoding _video_encoding = VideoEncoding::JPEG2000;
bool _three_d = false;
boost::optional<dcp::ContentKind> _content_kind;
std::string _cpl;
@@ -206,6 +226,8 @@ private:
bool _has_atmos = false;
Frame _atmos_length = 0;
dcp::Fraction _atmos_edit_rate;
+ EnumIndexedVector<bool, TextType> _has_non_zero_entry_point;
+ VideoRange _video_range = VideoRange::FULL;
struct Font
{
diff --git a/src/lib/dcp_encoder.cc b/src/lib/dcp_film_encoder.cc
index a4bc133f8..83da57756 100644
--- a/src/lib/dcp_encoder.cc
+++ b/src/lib/dcp_film_encoder.cc
@@ -18,38 +18,42 @@
*/
-/** @file src/dcp_encoder.cc
+
+/** @file src/dcp_film_encoder.cc
* @brief A class which takes a Film and some Options, then uses those to encode the film into a DCP.
*
* A decoder is selected according to the content type, and the encoder can be specified
* as a parameter to the constructor.
*/
-#include "dcp_encoder.h"
-#include "j2k_encoder.h"
-#include "film.h"
-#include "video_decoder.h"
+
#include "audio_decoder.h"
-#include "player.h"
-#include "job.h"
-#include "writer.h"
#include "compose.hpp"
+#include "dcp_film_encoder.h"
+#include "film.h"
+#include "j2k_encoder.h"
+#include "job.h"
+#include "mpeg2_encoder.h"
+#include "player.h"
+#include "player_video.h"
#include "referenced_reel_asset.h"
#include "text_content.h"
-#include "player_video.h"
+#include "video_decoder.h"
+#include "writer.h"
#include <boost/signals2.hpp>
#include <iostream>
#include "i18n.h"
-using std::string;
+
using std::cout;
+using std::dynamic_pointer_cast;
using std::list;
-using std::vector;
+using std::make_shared;
using std::shared_ptr;
+using std::string;
+using std::vector;
using std::weak_ptr;
-using std::dynamic_pointer_cast;
-using std::make_shared;
using boost::optional;
#if BOOST_VERSION >= 106100
using namespace boost::placeholders;
@@ -61,17 +65,30 @@ using namespace dcpomatic;
* @param film Film that we are encoding.
* @param job Job that this encoder is being used in.
*/
-DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job)
- : Encoder (film, job)
- , _writer(film, job)
- , _j2k_encoder(film, _writer)
+DCPFilmEncoder::DCPFilmEncoder(shared_ptr<const Film> film, weak_ptr<Job> job)
+ : FilmEncoder(film, job)
+ , _writer(film, job, film->dir(film->dcp_name()))
, _finishing (false)
, _non_burnt_subtitles (false)
{
- _player_video_connection = _player.Video.connect(bind(&DCPEncoder::video, this, _1, _2));
- _player_audio_connection = _player.Audio.connect(bind(&DCPEncoder::audio, this, _1, _2));
- _player_text_connection = _player.Text.connect(bind(&DCPEncoder::text, this, _1, _2, _3, _4));
- _player_atmos_connection = _player.Atmos.connect(bind(&DCPEncoder::atmos, this, _1, _2, _3));
+ switch (_film->video_encoding()) {
+ case VideoEncoding::JPEG2000:
+ _encoder.reset(new J2KEncoder(film, _writer));
+ break;
+ case VideoEncoding::MPEG2:
+ _encoder.reset(new MPEG2Encoder(film, _writer));
+ break;
+ case VideoEncoding::COUNT:
+ DCPOMATIC_ASSERT(false);
+ }
+
+ /* Now that we have a Writer we can clear out the assets directory */
+ clean_up_asset_directory(film->assets_path());
+
+ _player_video_connection = _player.Video.connect(bind(&DCPFilmEncoder::video, this, _1, _2));
+ _player_audio_connection = _player.Audio.connect(bind(&DCPFilmEncoder::audio, this, _1, _2));
+ _player_text_connection = _player.Text.connect(bind(&DCPFilmEncoder::text, this, _1, _2, _3, _4));
+ _player_atmos_connection = _player.Atmos.connect(bind(&DCPFilmEncoder::atmos, this, _1, _2, _3));
for (auto c: film->content ()) {
for (auto i: c->text) {
@@ -82,7 +99,7 @@ DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job)
}
}
-DCPEncoder::~DCPEncoder ()
+DCPFilmEncoder::~DCPFilmEncoder()
{
/* We must stop receiving more video data before we die */
_player_video_connection.release ();
@@ -92,10 +109,10 @@ DCPEncoder::~DCPEncoder ()
}
void
-DCPEncoder::go ()
+DCPFilmEncoder::go()
{
_writer.start();
- _j2k_encoder.begin();
+ _encoder->begin();
{
auto job = _job.lock ();
@@ -121,24 +138,38 @@ DCPEncoder::go ()
}
_finishing = true;
- _j2k_encoder.end();
- _writer.finish(_film->dir(_film->dcp_name()));
+ _encoder->end();
+ _writer.finish();
+}
+
+
+void
+DCPFilmEncoder::pause()
+{
+ _encoder->pause();
+}
+
+
+void
+DCPFilmEncoder::resume()
+{
+ _encoder->resume();
}
void
-DCPEncoder::video (shared_ptr<PlayerVideo> data, DCPTime time)
+DCPFilmEncoder::video(shared_ptr<PlayerVideo> data, DCPTime time)
{
- _j2k_encoder.encode(data, time);
+ _encoder->encode(data, time);
}
void
-DCPEncoder::audio (shared_ptr<AudioBuffers> data, DCPTime time)
+DCPFilmEncoder::audio(shared_ptr<AudioBuffers> data, DCPTime time)
{
_writer.write(data, time);
}
void
-DCPEncoder::text (PlayerText data, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period)
+DCPFilmEncoder::text(PlayerText data, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period)
{
if (type == TextType::CLOSED_CAPTION || _non_burnt_subtitles) {
_writer.write(data, type, track, period);
@@ -147,20 +178,20 @@ DCPEncoder::text (PlayerText data, TextType type, optional<DCPTextTrack> track,
void
-DCPEncoder::atmos (shared_ptr<const dcp::AtmosFrame> data, DCPTime time, AtmosMetadata metadata)
+DCPFilmEncoder::atmos(shared_ptr<const dcp::AtmosFrame> data, DCPTime time, AtmosMetadata metadata)
{
_writer.write(data, time, metadata);
}
optional<float>
-DCPEncoder::current_rate () const
+DCPFilmEncoder::current_rate() const
{
- return _j2k_encoder.current_encoding_rate();
+ return _encoder->current_encoding_rate();
}
Frame
-DCPEncoder::frames_done () const
+DCPFilmEncoder::frames_done() const
{
return _player.frames_done();
}
diff --git a/src/lib/dcp_encoder.h b/src/lib/dcp_film_encoder.h
index ad77f6951..3c697a115 100644
--- a/src/lib/dcp_encoder.h
+++ b/src/lib/dcp_film_encoder.h
@@ -22,7 +22,7 @@
#include "atmos_metadata.h"
#include "dcp_text_track.h"
#include "dcpomatic_time.h"
-#include "encoder.h"
+#include "film_encoder.h"
#include "player_text.h"
#include "j2k_encoder.h"
#include "writer.h"
@@ -35,13 +35,15 @@ class Job;
class Player;
class PlayerVideo;
+struct frames_not_lost_when_threads_disappear;
-/** @class DCPEncoder */
-class DCPEncoder : public Encoder
+
+/** @class DCPFilmEncoder */
+class DCPFilmEncoder : public FilmEncoder
{
public:
- DCPEncoder (std::shared_ptr<const Film> film, std::weak_ptr<Job> job);
- ~DCPEncoder ();
+ DCPFilmEncoder(std::shared_ptr<const Film> film, std::weak_ptr<Job> job);
+ ~DCPFilmEncoder();
void go () override;
@@ -53,15 +55,20 @@ public:
return _finishing;
}
+ void pause() override;
+ void resume() override;
+
private:
+ friend struct ::frames_not_lost_when_threads_disappear;
+
void video (std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime);
void audio (std::shared_ptr<AudioBuffers>, dcpomatic::DCPTime);
void text (PlayerText, TextType, boost::optional<DCPTextTrack>, dcpomatic::DCPTimePeriod);
void atmos (std::shared_ptr<const dcp::AtmosFrame>, dcpomatic::DCPTime, AtmosMetadata metadata);
Writer _writer;
- J2KEncoder _j2k_encoder;
+ std::unique_ptr<VideoEncoder> _encoder;
bool _finishing;
bool _non_burnt_subtitles;
diff --git a/src/lib/dcp_subtitle.cc b/src/lib/dcp_subtitle.cc
index c2c3f7f70..c2d390b55 100644
--- a/src/lib/dcp_subtitle.cc
+++ b/src/lib/dcp_subtitle.cc
@@ -22,8 +22,8 @@
#include "dcp_subtitle.h"
#include "exceptions.h"
#include "compose.hpp"
-#include <dcp/interop_subtitle_asset.h>
-#include <dcp/smpte_subtitle_asset.h>
+#include <dcp/interop_text_asset.h>
+#include <dcp/smpte_text_asset.h>
#include <memory>
#include "i18n.h"
@@ -35,22 +35,22 @@ using std::string;
using std::make_shared;
-shared_ptr<dcp::SubtitleAsset>
+shared_ptr<dcp::TextAsset>
DCPSubtitle::load (boost::filesystem::path file) const
{
- shared_ptr<dcp::SubtitleAsset> sc;
+ shared_ptr<dcp::TextAsset> sc;
string interop_error;
string smpte_error;
try {
- sc = make_shared<dcp::InteropSubtitleAsset>(file);
+ sc = make_shared<dcp::InteropTextAsset>(file);
} catch (exception& e) {
interop_error = e.what ();
}
if (!sc) {
try {
- sc = make_shared<dcp::SMPTESubtitleAsset>(file);
+ sc = make_shared<dcp::SMPTETextAsset>(file);
} catch (exception& e) {
smpte_error = e.what();
}
diff --git a/src/lib/dcp_subtitle.h b/src/lib/dcp_subtitle.h
index 285dd55bc..0f7928103 100644
--- a/src/lib/dcp_subtitle.h
+++ b/src/lib/dcp_subtitle.h
@@ -28,14 +28,14 @@
namespace dcp {
- class SubtitleAsset;
+ class TextAsset;
}
class DCPSubtitle
{
protected:
- std::shared_ptr<dcp::SubtitleAsset> load (boost::filesystem::path) const;
+ std::shared_ptr<dcp::TextAsset> load(boost::filesystem::path) const;
};
diff --git a/src/lib/dcp_subtitle_content.cc b/src/lib/dcp_subtitle_content.cc
index 8de5967ef..b18d14318 100644
--- a/src/lib/dcp_subtitle_content.cc
+++ b/src/lib/dcp_subtitle_content.cc
@@ -18,35 +18,39 @@
*/
-#include "font.h"
+
#include "dcp_subtitle_content.h"
#include "film.h"
+#include "font.h"
#include "font_id_allocator.h"
#include "text_content.h"
-#include <dcp/raw_convert.h>
-#include <dcp/interop_subtitle_asset.h>
-#include <dcp/smpte_subtitle_asset.h>
#include <dcp/interop_load_font_node.h>
+#include <dcp/interop_text_asset.h>
+#include <dcp/raw_convert.h>
+#include <dcp/smpte_text_asset.h>
#include <libxml++/libxml++.h>
#include "i18n.h"
+
using std::dynamic_pointer_cast;
using std::list;
using std::make_shared;
using std::shared_ptr;
using std::string;
+using boost::optional;
using dcp::raw_convert;
using namespace dcpomatic;
+
DCPSubtitleContent::DCPSubtitleContent (boost::filesystem::path path)
: Content (path)
{
text.push_back (make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE));
}
-DCPSubtitleContent::DCPSubtitleContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+DCPSubtitleContent::DCPSubtitleContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content (node, film_directory)
, _length (node->number_child<ContentTime::Type> ("Length"))
{
list<string> notes;
@@ -60,8 +64,8 @@ DCPSubtitleContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
auto subtitle_asset = load(path(0));
- auto iop = dynamic_pointer_cast<dcp::InteropSubtitleAsset>(subtitle_asset);
- auto smpte = dynamic_pointer_cast<dcp::SMPTESubtitleAsset>(subtitle_asset);
+ auto iop = dynamic_pointer_cast<dcp::InteropTextAsset>(subtitle_asset);
+ auto smpte = dynamic_pointer_cast<dcp::SMPTETextAsset>(subtitle_asset);
if (smpte) {
set_video_frame_rate(film, smpte->edit_rate().numerator);
}
@@ -71,7 +75,7 @@ DCPSubtitleContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
/* Default to turning these subtitles on */
only_text()->set_use (true);
- _length = ContentTime::from_seconds(subtitle_asset->latest_subtitle_out().as_seconds());
+ _length = ContentTime::from_seconds(subtitle_asset->latest_text_out().as_seconds());
subtitle_asset->fix_empty_font_ids();
add_fonts(only_text(), subtitle_asset);
@@ -79,7 +83,7 @@ DCPSubtitleContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
void
-DCPSubtitleContent::add_fonts(shared_ptr<TextContent> content, shared_ptr<dcp::SubtitleAsset> subtitle_asset)
+DCPSubtitleContent::add_fonts(shared_ptr<TextContent> content, shared_ptr<dcp::TextAsset> subtitle_asset)
{
FontIDAllocator font_id_allocator;
@@ -137,14 +141,14 @@ DCPSubtitleContent::technical_summary () const
}
void
-DCPSubtitleContent::as_xml (xmlpp::Node* node, bool with_paths) const
+DCPSubtitleContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
- node->add_child("Type")->add_child_text ("DCPSubtitle");
- Content::as_xml (node, with_paths);
+ cxml::add_text_child(element, "Type", "DCPSubtitle");
+ Content::as_xml(element, with_paths, path_behaviour, film_directory);
if (only_text()) {
- only_text()->as_xml (node);
+ only_text()->as_xml(element);
}
- node->add_child("Length")->add_child_text (raw_convert<string> (_length.get ()));
+ cxml::add_text_child(element, "Length", raw_convert<string>(_length.get()));
}
diff --git a/src/lib/dcp_subtitle_content.h b/src/lib/dcp_subtitle_content.h
index 89a6f26a2..14d36fb69 100644
--- a/src/lib/dcp_subtitle_content.h
+++ b/src/lib/dcp_subtitle_content.h
@@ -25,17 +25,24 @@ class DCPSubtitleContent : public DCPSubtitle, public Content
{
public:
DCPSubtitleContent (boost::filesystem::path);
- DCPSubtitleContent (cxml::ConstNodePtr, int);
+ DCPSubtitleContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int);
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override;
std::string summary () const override;
std::string technical_summary () const override;
- void as_xml (xmlpp::Node *, bool with_paths) const override;
+
+ void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const override;
+
dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override;
dcpomatic::DCPTime approximate_length () const override;
private:
- void add_fonts(std::shared_ptr<TextContent> content, std::shared_ptr<dcp::SubtitleAsset> subtitle_asset);
+ void add_fonts(std::shared_ptr<TextContent> content, std::shared_ptr<dcp::TextAsset> subtitle_asset);
dcpomatic::ContentTime _length;
};
diff --git a/src/lib/dcp_subtitle_decoder.cc b/src/lib/dcp_subtitle_decoder.cc
index 711dc77f2..95e80ac19 100644
--- a/src/lib/dcp_subtitle_decoder.cc
+++ b/src/lib/dcp_subtitle_decoder.cc
@@ -25,7 +25,7 @@
#include "font.h"
#include "text_content.h"
#include "util.h"
-#include <dcp/interop_subtitle_asset.h>
+#include <dcp/interop_text_asset.h>
#include <dcp/load_font_node.h>
@@ -45,7 +45,7 @@ DCPSubtitleDecoder::DCPSubtitleDecoder (shared_ptr<const Film> film, shared_ptr<
/* Load the XML or MXF file */
_asset = load(content->path(0));
_asset->fix_empty_font_ids();
- _subtitles = _asset->subtitles();
+ _subtitles = _asset->texts();
_next = _subtitles.begin ();
_subtitle_standard = _asset->subtitle_standard();
@@ -91,14 +91,14 @@ DCPSubtitleDecoder::pass ()
time of emitting the first.
*/
- vector<dcp::SubtitleString> s;
- vector<dcp::SubtitleImage> i;
+ vector<dcp::TextString> s;
+ vector<dcp::TextImage> i;
auto const p = content_time_period (*_next);
while (_next != _subtitles.end () && content_time_period (*_next) == p) {
- auto ns = dynamic_pointer_cast<const dcp::SubtitleString>(*_next);
+ auto ns = dynamic_pointer_cast<const dcp::TextString>(*_next);
if (ns) {
- dcp::SubtitleString ns_copy = *ns;
+ auto ns_copy = *ns;
if (ns_copy.font()) {
ns_copy.set_font(_font_id_allocator.font_id(0, _asset->id(), ns_copy.font().get()));
} else {
@@ -111,7 +111,7 @@ DCPSubtitleDecoder::pass ()
this would need to be done both here and in DCPDecoder.
*/
- auto ni = dynamic_pointer_cast<const dcp::SubtitleImage>(*_next);
+ auto ni = dynamic_pointer_cast<const dcp::TextImage>(*_next);
if (ni) {
emit_subtitle_image (p, *ni, film()->frame_size(), only_text());
++_next;
@@ -128,7 +128,7 @@ DCPSubtitleDecoder::pass ()
ContentTimePeriod
-DCPSubtitleDecoder::content_time_period (shared_ptr<const dcp::Subtitle> s) const
+DCPSubtitleDecoder::content_time_period(shared_ptr<const dcp::Text> s) const
{
return {
ContentTime::from_seconds(s->in().as_seconds()),
diff --git a/src/lib/dcp_subtitle_decoder.h b/src/lib/dcp_subtitle_decoder.h
index 9d0851253..f11fc3044 100644
--- a/src/lib/dcp_subtitle_decoder.h
+++ b/src/lib/dcp_subtitle_decoder.h
@@ -38,14 +38,14 @@ public:
boost::optional<dcpomatic::ContentTime> first () const;
private:
- dcpomatic::ContentTimePeriod content_time_period (std::shared_ptr<const dcp::Subtitle> s) const;
+ dcpomatic::ContentTimePeriod content_time_period(std::shared_ptr<const dcp::Text> s) const;
void update_position();
- std::vector<std::shared_ptr<const dcp::Subtitle>> _subtitles;
- std::vector<std::shared_ptr<const dcp::Subtitle>>::const_iterator _next;
+ std::vector<std::shared_ptr<const dcp::Text>> _subtitles;
+ std::vector<std::shared_ptr<const dcp::Text>>::const_iterator _next;
dcp::SubtitleStandard _subtitle_standard;
- std::shared_ptr<dcp::SubtitleAsset> _asset;
+ std::shared_ptr<dcp::TextAsset> _asset;
FontIDAllocator _font_id_allocator;
};
diff --git a/src/lib/dcp_text_track.cc b/src/lib/dcp_text_track.cc
index 0bd751275..292932396 100644
--- a/src/lib/dcp_text_track.cc
+++ b/src/lib/dcp_text_track.cc
@@ -56,9 +56,9 @@ DCPTextTrack::summary () const
void
DCPTextTrack::as_xml (xmlpp::Element* parent) const
{
- parent->add_child("Name")->add_child_text(name);
+ cxml::add_text_child(parent, "Name", name);
if (language) {
- parent->add_child("Language")->add_child_text(language->to_string());
+ cxml::add_text_child(parent, "Language", language->to_string());
}
}
diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc
index 217b72183..ec88888dd 100644
--- a/src/lib/dcp_video.cc
+++ b/src/lib/dcp_video.cc
@@ -74,15 +74,15 @@ using namespace boost::placeholders;
/** Construct a DCP video frame.
* @param frame Input frame.
* @param index Index of the frame within the DCP.
- * @param bw J2K bandwidth to use (see Config::j2k_bandwidth ())
+ * @param bit_rate Video bit rate to use.
*/
DCPVideo::DCPVideo (
- shared_ptr<const PlayerVideo> frame, int index, int dcp_fps, int bw, Resolution r
+ shared_ptr<const PlayerVideo> frame, int index, int dcp_fps, int64_t bit_rate, Resolution r
)
: _frame (frame)
, _index (index)
, _frames_per_second (dcp_fps)
- , _j2k_bandwidth (bw)
+ , _video_bit_rate(bit_rate)
, _resolution (r)
{
@@ -93,7 +93,7 @@ DCPVideo::DCPVideo (shared_ptr<const PlayerVideo> frame, shared_ptr<const cxml::
{
_index = node->number_child<int> ("Index");
_frames_per_second = node->number_child<int> ("FramesPerSecond");
- _j2k_bandwidth = node->number_child<int> ("J2KBandwidth");
+ _video_bit_rate = node->number_child<int64_t>("VideoBitRate");
_resolution = Resolution (node->optional_number_child<int>("Resolution").get_value_or(static_cast<int>(Resolution::TWO_K)));
}
@@ -117,6 +117,30 @@ DCPVideo::convert_to_xyz (shared_ptr<const PlayerVideo> frame)
return xyz;
}
+dcp::Size
+DCPVideo::get_size() const
+{
+ auto image = _frame->image(bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, false);
+ return image->size();
+}
+
+
+void
+DCPVideo::convert_to_xyz(uint16_t* dst) const
+{
+ auto image = _frame->image(bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, false);
+ if (_frame->colour_conversion()) {
+ dcp::rgb_to_xyz (
+ image->data()[0],
+ dst,
+ image->size(),
+ image->stride()[0],
+ _frame->colour_conversion().get()
+ );
+ }
+}
+
+
/** J2K-encode this frame on the local host.
* @return Encoded data.
*/
@@ -136,7 +160,7 @@ DCPVideo::encode_locally () const
while (true) {
enc = dcp::compress_j2k (
xyz,
- _j2k_bandwidth,
+ _video_bit_rate,
_frames_per_second,
_frame->eyes() == Eyes::LEFT || _frame->eyes() == Eyes::RIGHT,
_resolution == Resolution::FOUR_K,
@@ -215,7 +239,7 @@ DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) const
/* Collect all XML metadata */
xmlpp::Document doc;
auto root = doc.create_root_node ("EncodingRequest");
- root->add_child("Version")->add_child_text (raw_convert<string> (SERVER_LINK_VERSION));
+ cxml::add_text_child(root, "Version", raw_convert<string>(SERVER_LINK_VERSION));
add_metadata (root);
LOG_DEBUG_ENCODE (N_("Sending frame %1 to remote"), _index);
@@ -254,10 +278,10 @@ DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) const
void
DCPVideo::add_metadata (xmlpp::Element* el) const
{
- el->add_child("Index")->add_child_text (raw_convert<string> (_index));
- el->add_child("FramesPerSecond")->add_child_text (raw_convert<string> (_frames_per_second));
- el->add_child("J2KBandwidth")->add_child_text (raw_convert<string> (_j2k_bandwidth));
- el->add_child("Resolution")->add_child_text (raw_convert<string> (int (_resolution)));
+ cxml::add_text_child(el, "Index", raw_convert<string>(_index));
+ cxml::add_text_child(el, "FramesPerSecond", raw_convert<string>(_frames_per_second));
+ cxml::add_text_child(el, "VideoBitRate", raw_convert<string>(_video_bit_rate));
+ cxml::add_text_child(el, "Resolution", raw_convert<string>(int(_resolution)));
_frame->add_metadata (el);
}
@@ -274,7 +298,7 @@ bool
DCPVideo::same (shared_ptr<const DCPVideo> other) const
{
if (_frames_per_second != other->_frames_per_second ||
- _j2k_bandwidth != other->_j2k_bandwidth ||
+ _video_bit_rate != other->_video_bit_rate ||
_resolution != other->_resolution) {
return false;
}
diff --git a/src/lib/dcp_video.h b/src/lib/dcp_video.h
index bf95ccfe6..92c155f0c 100644
--- a/src/lib/dcp_video.h
+++ b/src/lib/dcp_video.h
@@ -17,6 +17,8 @@
along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifndef DCPOMATIC_DCP_VIDEO_H
+#define DCPOMATIC_DCP_VIDEO_H
#include "encode_server_description.h"
@@ -47,7 +49,7 @@ class PlayerVideo;
class DCPVideo
{
public:
- DCPVideo (std::shared_ptr<const PlayerVideo>, int index, int dcp_fps, int bandwidth, Resolution r);
+ DCPVideo(std::shared_ptr<const PlayerVideo>, int index, int dcp_fps, int64_t bit_rate, Resolution r);
DCPVideo (std::shared_ptr<const PlayerVideo>, cxml::ConstNodePtr);
DCPVideo (DCPVideo const&) = default;
@@ -66,6 +68,9 @@ public:
static std::shared_ptr<dcp::OpenJPEGImage> convert_to_xyz(std::shared_ptr<const PlayerVideo> frame);
+ void convert_to_xyz(uint16_t* dst) const;
+ dcp::Size get_size() const;
+
private:
void add_metadata (xmlpp::Element *) const;
@@ -73,6 +78,8 @@ private:
std::shared_ptr<const PlayerVideo> _frame;
int _index; ///< frame index within the DCP's intrinsic duration
int _frames_per_second; ///< Frames per second that we will use for the DCP
- int _j2k_bandwidth; ///< J2K bandwidth to use
+ int64_t _video_bit_rate; ///< Video bit rate to use
Resolution _resolution; ///< Resolution (2K or 4K)
};
+
+#endif
diff --git a/src/lib/dcpomatic_log.h b/src/lib/dcpomatic_log.h
index 6a1c3a6ec..2372c8d01 100644
--- a/src/lib/dcpomatic_log.h
+++ b/src/lib/dcpomatic_log.h
@@ -44,4 +44,6 @@ extern std::shared_ptr<Log> dcpomatic_log;
#define LOG_DEBUG_PLAYER_NC(...) dcpomatic_log->log(__VA_ARGS__, LogEntry::TYPE_DEBUG_PLAYER);
#define LOG_DEBUG_AUDIO_ANALYSIS(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_DEBUG_AUDIO_ANALYSIS);
#define LOG_DEBUG_AUDIO_ANALYSIS_NC(...) dcpomatic_log->log(__VA_ARGS__, LogEntry::TYPE_DEBUG_AUDIO_ANALYSIS);
+#define LOG_HTTP(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_HTTP);
+#define LOG_HTTP_NC(...) dcpomatic_log->log(__VA_ARGS__, LogEntry::TYPE_HTTP);
diff --git a/src/lib/dcpomatic_socket.cc b/src/lib/dcpomatic_socket.cc
index 8f8f639cc..83ab072d2 100644
--- a/src/lib/dcpomatic_socket.cc
+++ b/src/lib/dcpomatic_socket.cc
@@ -63,7 +63,7 @@ Socket::check ()
void
Socket::connect (boost::asio::ip::tcp::endpoint endpoint)
{
- _deadline.expires_from_now (boost::posix_time::seconds (_timeout));
+ set_deadline_from_now(_timeout);
boost::system::error_code ec = boost::asio::error::would_block;
_socket.async_connect (endpoint, boost::lambda::var(ec) = boost::lambda::_1);
do {
@@ -95,7 +95,7 @@ Socket::connect (boost::asio::ip::tcp::endpoint endpoint)
void
Socket::write (uint8_t const * data, int size)
{
- _deadline.expires_from_now (boost::posix_time::seconds (_timeout));
+ set_deadline_from_now(_timeout);
boost::system::error_code ec = boost::asio::error::would_block;
boost::asio::async_write (_socket, boost::asio::buffer (data, size), boost::lambda::var(ec) = boost::lambda::_1);
@@ -115,6 +115,13 @@ Socket::write (uint8_t const * data, int size)
void
+Socket::write(std::string const& str)
+{
+ write(reinterpret_cast<uint8_t const*>(str.c_str()), str.size());
+}
+
+
+void
Socket::write (uint32_t v)
{
v = htonl (v);
@@ -129,7 +136,7 @@ Socket::write (uint32_t v)
void
Socket::read (uint8_t* data, int size)
{
- _deadline.expires_from_now (boost::posix_time::seconds (_timeout));
+ set_deadline_from_now(_timeout);
boost::system::error_code ec = boost::asio::error::would_block;
boost::asio::async_read (_socket, boost::asio::buffer (data, size), boost::lambda::var(ec) = boost::lambda::_1);
@@ -259,3 +266,22 @@ Socket::set_send_buffer_size (int size)
_send_buffer_size = size;
}
+
+void
+Socket::set_deadline_from_now(int seconds)
+{
+ _deadline.expires_from_now(boost::posix_time::seconds(seconds));
+}
+
+void
+Socket::run()
+{
+ _io_service.run_one();
+}
+
+void
+Socket::close()
+{
+ _socket.close();
+}
+
diff --git a/src/lib/dcpomatic_socket.h b/src/lib/dcpomatic_socket.h
index 7dff979e0..86e5f1266 100644
--- a/src/lib/dcpomatic_socket.h
+++ b/src/lib/dcpomatic_socket.h
@@ -47,10 +47,19 @@ public:
void write (uint32_t n);
void write (uint8_t const * data, int size);
+ void write(std::string const& str);
void read (uint8_t* data, int size);
uint32_t read_uint32 ();
+ void set_deadline_from_now(int seconds);
+ void run();
+ void close();
+
+ bool is_open() const {
+ return _socket.is_open();
+ }
+
class ReadDigestScope
{
public:
diff --git a/src/lib/dcpomatic_time.cc b/src/lib/dcpomatic_time.cc
index ac797f8f4..60fc5342a 100644
--- a/src/lib/dcpomatic_time.cc
+++ b/src/lib/dcpomatic_time.cc
@@ -27,6 +27,25 @@ using std::string;
using namespace dcpomatic;
+bool
+dcpomatic::operator<=(HMSF const& a, HMSF const& b)
+{
+ if (a.h != b.h) {
+ return a.h <= b.h;
+ }
+
+ if (a.m != b.m) {
+ return a.m <= b.m;
+ }
+
+ if (a.s != b.s) {
+ return a.s <= b.s;
+ }
+
+ return a.f <= b.f;
+}
+
+
template <>
Time<ContentTimeDifferentiator, DCPTimeDifferentiator>::Time (DCPTime d, FrameRateChange f)
: _t (llrint(d.get() * f.speed_up))
diff --git a/src/lib/dcpomatic_time.h b/src/lib/dcpomatic_time.h
index 1b12ea901..63bb86549 100644
--- a/src/lib/dcpomatic_time.h
+++ b/src/lib/dcpomatic_time.h
@@ -64,6 +64,9 @@ public:
};
+bool operator<=(HMSF const& a, HMSF const& b);
+
+
/** A time in seconds, expressed as a number scaled up by Time::HZ. We want two different
* versions of this class, dcpomatic::ContentTime and dcpomatic::DCPTime, and we want it to be impossible to
* convert implicitly between the two. Hence there's this template hack. I'm not
@@ -152,6 +155,10 @@ public:
return *this;
}
+ Time<S, O> operator* (int o) const {
+ return Time<S, O> (_t * o);
+ }
+
Time<S, O> operator/ (int o) const {
return Time<S, O> (_t / o);
}
diff --git a/src/lib/decoder_factory.cc b/src/lib/decoder_factory.cc
index 1bda93c94..ea0eda83d 100644
--- a/src/lib/decoder_factory.cc
+++ b/src/lib/decoder_factory.cc
@@ -59,13 +59,11 @@ maybe_cast (shared_ptr<Decoder> d)
shared_ptr<Decoder>
decoder_factory (shared_ptr<const Film> film, shared_ptr<const Content> content, bool fast, bool tolerant, shared_ptr<Decoder> old_decoder)
{
- auto fc = dynamic_pointer_cast<const FFmpegContent> (content);
- if (fc) {
+ if (auto fc = dynamic_pointer_cast<const FFmpegContent>(content)) {
return make_shared<FFmpegDecoder>(film, fc, fast);
}
- auto dc = dynamic_pointer_cast<const DCPContent> (content);
- if (dc) {
+ if (auto dc = dynamic_pointer_cast<const DCPContent>(content)) {
try {
return make_shared<DCPDecoder>(film, dc, fast, tolerant, maybe_cast<DCPDecoder>(old_decoder));
} catch (KDMError& e) {
@@ -74,28 +72,23 @@ decoder_factory (shared_ptr<const Film> film, shared_ptr<const Content> content,
}
}
- auto ic = dynamic_pointer_cast<const ImageContent> (content);
- if (ic) {
+ if (auto ic = dynamic_pointer_cast<const ImageContent>(content)) {
return make_shared<ImageDecoder>(film, ic);
}
- auto rc = dynamic_pointer_cast<const StringTextFileContent> (content);
- if (rc) {
+ if (auto rc = dynamic_pointer_cast<const StringTextFileContent>(content)) {
return make_shared<StringTextFileDecoder>(film, rc);
}
- auto dsc = dynamic_pointer_cast<const DCPSubtitleContent> (content);
- if (dsc) {
+ if (auto dsc = dynamic_pointer_cast<const DCPSubtitleContent>(content)) {
return make_shared<DCPSubtitleDecoder>(film, dsc);
}
- auto vmc = dynamic_pointer_cast<const VideoMXFContent> (content);
- if (vmc) {
+ if (auto vmc = dynamic_pointer_cast<const VideoMXFContent>(content)) {
return make_shared<VideoMXFDecoder>(film, vmc);
}
- auto amc = dynamic_pointer_cast<const AtmosMXFContent> (content);
- if (amc) {
+ if (auto amc = dynamic_pointer_cast<const AtmosMXFContent>(content)) {
return make_shared<AtmosMXFDecoder>(film, amc);
}
diff --git a/src/lib/dkdm_recipient.cc b/src/lib/dkdm_recipient.cc
index c73379bed..83ba96de6 100644
--- a/src/lib/dkdm_recipient.cc
+++ b/src/lib/dkdm_recipient.cc
@@ -19,12 +19,12 @@
*/
+#include "cinema_list.h"
#include "config.h"
#include "dkdm_recipient.h"
#include "film.h"
#include "kdm_with_metadata.h"
#include <dcp/raw_convert.h>
-#include <dcp/utc_offset.h>
using std::make_shared;
@@ -34,62 +34,33 @@ using std::vector;
using dcp::raw_convert;
-DKDMRecipient::DKDMRecipient (cxml::ConstNodePtr node)
- : KDMRecipient (node)
-{
- for (auto i: node->node_children("Email")) {
- emails.push_back (i->content());
- }
-
- utc_offset_hour = node->number_child<int>("UTCOffsetHour");
- utc_offset_minute = node->number_child<int>("UTCOffsetMinute");
-}
-
-
-void
-DKDMRecipient::as_xml (xmlpp::Element* node) const
-{
- KDMRecipient::as_xml (node);
-
- for (auto i: emails) {
- node->add_child("Email")->add_child_text(i);
- }
-
- node->add_child("UTCOffsetHour")->add_child_text(raw_convert<string>(utc_offset_hour));
- node->add_child("UTCOffsetMinute")->add_child_text(raw_convert<string>(utc_offset_minute));
-}
-
-
KDMWithMetadataPtr
kdm_for_dkdm_recipient (
shared_ptr<const Film> film,
boost::filesystem::path cpl,
- shared_ptr<DKDMRecipient> recipient,
- boost::posix_time::ptime valid_from,
- boost::posix_time::ptime valid_to
+ DKDMRecipient const& recipient,
+ dcp::LocalTime valid_from,
+ dcp::LocalTime valid_to
)
{
- if (!recipient->recipient) {
+ if (!recipient.recipient) {
return {};
}
- dcp::LocalTime const begin(valid_from, dcp::UTCOffset(recipient->utc_offset_hour, recipient->utc_offset_minute));
- dcp::LocalTime const end (valid_to, dcp::UTCOffset(recipient->utc_offset_hour, recipient->utc_offset_minute));
-
auto signer = Config::instance()->signer_chain();
if (!signer->valid()) {
throw InvalidSignerError();
}
- auto const decrypted_kdm = film->make_kdm(cpl, begin, end);
- auto const kdm = decrypted_kdm.encrypt(signer, recipient->recipient.get(), {}, dcp::Formulation::MODIFIED_TRANSITIONAL_1, true, 0);
+ auto const decrypted_kdm = film->make_kdm(cpl, valid_from, valid_to);
+ auto const kdm = decrypted_kdm.encrypt(signer, recipient.recipient.get(), {}, dcp::Formulation::MODIFIED_TRANSITIONAL_1, true, 0);
dcp::NameFormat::Map name_values;
name_values['f'] = kdm.content_title_text();
- name_values['b'] = begin.date() + " " + begin.time_of_day(true, false);
- name_values['e'] = end.date() + " " + end.time_of_day(true, false);
+ name_values['b'] = valid_from.date() + " " + valid_from.time_of_day(true, false);
+ name_values['e'] = valid_to.date() + " " + valid_to.time_of_day(true, false);
name_values['i'] = kdm.cpl_id();
- return make_shared<KDMWithMetadata>(name_values, nullptr, recipient->emails, kdm);
+ return make_shared<KDMWithMetadata>(name_values, CinemaID(0), recipient.emails, kdm);
}
diff --git a/src/lib/dkdm_recipient.h b/src/lib/dkdm_recipient.h
index 7a0fa0185..64da41cff 100644
--- a/src/lib/dkdm_recipient.h
+++ b/src/lib/dkdm_recipient.h
@@ -33,25 +33,15 @@ public:
std::string const& name_,
std::string const& notes_,
boost::optional<dcp::Certificate> recipient_,
- std::vector<std::string> emails_,
- int utc_offset_hour_,
- int utc_offset_minute_
+ std::vector<std::string> emails_
)
: KDMRecipient (name_, notes_, recipient_, boost::none)
, emails (emails_)
- , utc_offset_hour (utc_offset_hour_)
- , utc_offset_minute (utc_offset_minute_)
{
}
- explicit DKDMRecipient (cxml::ConstNodePtr);
-
- void as_xml (xmlpp::Element *) const override;
-
std::vector<std::string> emails;
- int utc_offset_hour;
- int utc_offset_minute;
};
@@ -59,8 +49,8 @@ KDMWithMetadataPtr
kdm_for_dkdm_recipient (
std::shared_ptr<const Film> film,
boost::filesystem::path cpl,
- std::shared_ptr<DKDMRecipient> recipient,
- boost::posix_time::ptime valid_from,
- boost::posix_time::ptime valid_to
+ DKDMRecipient const& recipient,
+ dcp::LocalTime valid_from,
+ dcp::LocalTime valid_to
);
diff --git a/src/lib/dkdm_recipient_list.cc b/src/lib/dkdm_recipient_list.cc
new file mode 100644
index 000000000..34179337e
--- /dev/null
+++ b/src/lib/dkdm_recipient_list.cc
@@ -0,0 +1,243 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "config.h"
+#include "dkdm_recipient.h"
+#include "dkdm_recipient_list.h"
+#include "sqlite_statement.h"
+#include "sqlite_transaction.h"
+#include "util.h"
+#include <boost/algorithm/string.hpp>
+
+
+using std::make_pair;
+using std::pair;
+using std::string;
+using std::vector;
+using boost::optional;
+
+
+DKDMRecipientList::DKDMRecipientList()
+ : _dkdm_recipients("dkdm_recipients")
+{
+ setup(Config::instance()->dkdm_recipients_file());
+}
+
+
+DKDMRecipientList::DKDMRecipientList(boost::filesystem::path db_file)
+ : _dkdm_recipients("dkdm_recipients")
+{
+ setup(db_file);
+}
+
+
+
+DKDMRecipientList::~DKDMRecipientList()
+{
+ if (_db) {
+ sqlite3_close(_db);
+ }
+}
+
+
+void
+DKDMRecipientList::read_legacy_file(boost::filesystem::path xml_file)
+{
+ cxml::Document doc("DKDMRecipients");
+ doc.read_file(xml_file);
+
+ read_legacy_document(doc);
+}
+
+
+void
+DKDMRecipientList::read_legacy_string(string const& xml)
+{
+ cxml::Document doc("DKDMRecipients");
+ doc.read_file(xml);
+
+ read_legacy_document(doc);
+}
+
+
+void
+DKDMRecipientList::read_legacy_document(cxml::Document const& doc)
+{
+ for (auto recipient_node: doc.node_children("DKDMRecipient")) {
+ vector<string> emails;
+ for (auto email_node: recipient_node->node_children("Email")) {
+ emails.push_back(email_node->content());
+ }
+
+ optional<dcp::Certificate> certificate;
+ if (auto certificate_string = recipient_node->optional_string_child("Recipient")) {
+ certificate = dcp::Certificate(*certificate_string);
+ }
+
+ DKDMRecipient recipient(
+ recipient_node->string_child("Name"),
+ recipient_node->string_child("Notes"),
+ certificate,
+ emails
+ );
+
+ add_dkdm_recipient(recipient);
+ }
+}
+
+
+void
+DKDMRecipientList::setup(boost::filesystem::path db_file)
+{
+ _dkdm_recipients.add_column("name", "TEXT");
+ _dkdm_recipients.add_column("notes", "TEXT");
+ _dkdm_recipients.add_column("recipient", "TEXT");
+ _dkdm_recipients.add_column("emails", "TEXT");
+
+#ifdef DCPOMATIC_WINDOWS
+ auto rc = sqlite3_open16(db_file.c_str(), &_db);
+#else
+ auto rc = sqlite3_open(db_file.c_str(), &_db);
+#endif
+ if (rc != SQLITE_OK) {
+ throw FileError("Could not open SQLite database", db_file);
+ }
+
+ sqlite3_busy_timeout(_db, 500);
+
+ SQLiteStatement screens(_db, _dkdm_recipients.create());
+ screens.execute();
+}
+
+
+DKDMRecipientList::DKDMRecipientList(DKDMRecipientList&& other)
+ : _dkdm_recipients(std::move(other._dkdm_recipients))
+{
+ _db = other._db;
+ other._db = nullptr;
+}
+
+
+DKDMRecipientList&
+DKDMRecipientList::operator=(DKDMRecipientList&& other)
+{
+ if (this != &other) {
+ _db = other._db;
+ other._db = nullptr;
+ }
+ return *this;
+}
+
+
+DKDMRecipientID
+DKDMRecipientList::add_dkdm_recipient(DKDMRecipient const& dkdm_recipient)
+{
+ SQLiteStatement add_dkdm_recipient(_db, _dkdm_recipients.insert());
+
+ add_dkdm_recipient.bind_text(1, dkdm_recipient.name);
+ add_dkdm_recipient.bind_text(2, dkdm_recipient.notes);
+ add_dkdm_recipient.bind_text(3, dkdm_recipient.recipient ? dkdm_recipient.recipient->certificate(true) : "");
+ add_dkdm_recipient.bind_text(4, join_strings(dkdm_recipient.emails));
+
+ add_dkdm_recipient.execute();
+
+ return sqlite3_last_insert_rowid(_db);
+}
+
+
+void
+DKDMRecipientList::update_dkdm_recipient(DKDMRecipientID id, DKDMRecipient const& dkdm_recipient)
+{
+ SQLiteStatement add_dkdm_recipient(_db, _dkdm_recipients.update("WHERE id=?"));
+
+ add_dkdm_recipient.bind_text(1, dkdm_recipient.name);
+ add_dkdm_recipient.bind_text(2, dkdm_recipient.notes);
+ add_dkdm_recipient.bind_text(3, dkdm_recipient.recipient ? dkdm_recipient.recipient->certificate(true) : "");
+ add_dkdm_recipient.bind_text(4, join_strings(dkdm_recipient.emails));
+ add_dkdm_recipient.bind_int64(5, id.get());
+
+ add_dkdm_recipient.execute();
+}
+
+
+void
+DKDMRecipientList::remove_dkdm_recipient(DKDMRecipientID id)
+{
+ SQLiteStatement statement(_db, "DELETE FROM dkdm_recipients WHERE ID=?");
+ statement.bind_int64(1, id.get());
+ statement.execute();
+}
+
+
+static
+vector<pair<DKDMRecipientID, DKDMRecipient>>
+dkdm_recipients_from_result(SQLiteStatement& statement)
+{
+ vector<pair<DKDMRecipientID, DKDMRecipient>> output;
+
+ statement.execute([&output](SQLiteStatement& statement) {
+ DCPOMATIC_ASSERT(statement.data_count() == 5);
+ DKDMRecipientID const id = statement.column_int64(0);
+ auto const name = statement.column_text(1);
+ auto const notes = statement.column_text(2);
+ auto certificate_string = statement.column_text(3);
+ optional<dcp::Certificate> certificate = certificate_string.empty() ? optional<dcp::Certificate>() : dcp::Certificate(certificate_string);
+ auto const join_with_spaces = statement.column_text(4);
+ vector<string> emails;
+ boost::algorithm::split(emails, join_with_spaces, boost::is_any_of(" "));
+ output.push_back(make_pair(id, DKDMRecipient(name, notes, certificate, { emails })));
+ });
+
+ return output;
+}
+
+
+
+
+vector<std::pair<DKDMRecipientID, DKDMRecipient>>
+DKDMRecipientList::dkdm_recipients() const
+{
+ SQLiteStatement statement(_db, _dkdm_recipients.select("ORDER BY name ASC"));
+ return dkdm_recipients_from_result(statement);
+}
+
+
+boost::optional<DKDMRecipient>
+DKDMRecipientList::dkdm_recipient(DKDMRecipientID id) const
+{
+ SQLiteStatement statement(_db, _dkdm_recipients.select("WHERE id=?"));
+ statement.bind_int64(1, id.get());
+ auto result = dkdm_recipients_from_result(statement);
+ if (result.empty()) {
+ return {};
+ }
+ return result[0].second;
+}
+
+
+void
+DKDMRecipientList::clear()
+{
+ SQLiteStatement sql(_db, "DELETE FROM dkdm_recipients");
+ sql.execute();
+}
+
+
diff --git a/src/lib/dkdm_recipient_list.h b/src/lib/dkdm_recipient_list.h
new file mode 100644
index 000000000..fc4d84b60
--- /dev/null
+++ b/src/lib/dkdm_recipient_list.h
@@ -0,0 +1,90 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_DKDM_RECIPIENT_LIST_H
+#define DCPOMATIC_DKDM_RECIPIENT_LIST_H
+
+
+#include "id.h"
+#include "sqlite_table.h"
+#include <libcxml/cxml.h>
+#include <boost/filesystem.hpp>
+#include <boost/optional.hpp>
+
+
+class DKDMRecipient;
+
+
+class DKDMRecipientID : public ID
+{
+public:
+ DKDMRecipientID(sqlite3_int64 id)
+ : ID(id) {}
+
+ bool operator==(DKDMRecipientID const& other) const {
+ return get() == other.get();
+ }
+
+ bool operator!=(DKDMRecipientID const& other) const {
+ return get() != other.get();
+ }
+
+ bool operator<(DKDMRecipientID const& other) const {
+ return get() < other.get();
+ }
+};
+
+
+class DKDMRecipientList
+{
+public:
+ DKDMRecipientList();
+ DKDMRecipientList(boost::filesystem::path db_file);
+ ~DKDMRecipientList();
+
+ DKDMRecipientList(DKDMRecipientList const&) = delete;
+ DKDMRecipientList& operator=(DKDMRecipientList const&) = delete;
+
+ DKDMRecipientList(DKDMRecipientList&& other);
+ DKDMRecipientList& operator=(DKDMRecipientList&& other);
+
+ void read_legacy_file(boost::filesystem::path xml_file);
+ void read_legacy_string(std::string const& xml);
+
+ void clear();
+
+ DKDMRecipientID add_dkdm_recipient(DKDMRecipient const& dkdm_recipient);
+ void update_dkdm_recipient(DKDMRecipientID id, DKDMRecipient const& dkdm_recipient);
+ void remove_dkdm_recipient(DKDMRecipientID id);
+ std::vector<std::pair<DKDMRecipientID, DKDMRecipient>> dkdm_recipients() const;
+ boost::optional<DKDMRecipient> dkdm_recipient(DKDMRecipientID id) const;
+
+private:
+ void setup(boost::filesystem::path db_file);
+ void read_legacy_document(cxml::Document const& doc);
+
+ sqlite3* _db = nullptr;
+ SQLiteTable _dkdm_recipients;
+};
+
+
+#endif
+
diff --git a/src/lib/dkdm_wrapper.cc b/src/lib/dkdm_wrapper.cc
index 016c77c3f..4c7838a8d 100644
--- a/src/lib/dkdm_wrapper.cc
+++ b/src/lib/dkdm_wrapper.cc
@@ -41,7 +41,11 @@ DKDMBase::read (cxml::ConstNodePtr node)
if (node->name() == "DKDM") {
return make_shared<DKDM>(dcp::EncryptedKDM(node->content()));
} else if (node->name() == "DKDMGroup") {
- auto group = make_shared<DKDMGroup>(node->string_attribute("Name"));
+ auto name = node->optional_string_attribute("Name");
+ if (!name) {
+ name = node->string_attribute("name");
+ }
+ auto group = make_shared<DKDMGroup>(*name);
for (auto i: node->node_children()) {
if (auto c = read(i)) {
group->add (c);
@@ -62,17 +66,17 @@ DKDM::name () const
void
-DKDM::as_xml (xmlpp::Element* node) const
+DKDM::as_xml(xmlpp::Element* element) const
{
- node->add_child("DKDM")->add_child_text (_dkdm.as_xml ());
+ cxml::add_text_child(element, "DKDM", _dkdm.as_xml());
}
void
-DKDMGroup::as_xml (xmlpp::Element* node) const
+DKDMGroup::as_xml(xmlpp::Element* element) const
{
- auto f = node->add_child("DKDMGroup");
- f->set_attribute ("Name", _name);
+ auto f = cxml::add_child(element, "DKDMGroup");
+ f->set_attribute("name", _name);
for (auto i: _children) {
i->as_xml (f);
}
diff --git a/src/lib/email.cc b/src/lib/email.cc
index e2beb8f37..7a6e58d91 100644
--- a/src/lib/email.cc
+++ b/src/lib/email.cc
@@ -23,6 +23,7 @@
#include "config.h"
#include "email.h"
#include "exceptions.h"
+#include "variant.h"
#include <curl/curl.h>
#include <boost/algorithm/string.hpp>
#include <boost/date_time/c_local_time_adjustor.hpp>
@@ -118,7 +119,8 @@ Email::send(string server, int port, EmailProtocol protocol, string user, string
auto const utc_now = boost::posix_time::second_clock::universal_time ();
auto const local_now = boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local (utc_now);
auto offset = local_now - utc_now;
- sprintf (date_buffer + strlen(date_buffer), "%s%02d%02d", (offset.hours() >= 0 ? "+" : "-"), int(abs(offset.hours())), int(offset.minutes()));
+ auto end = date_buffer + strlen(date_buffer);
+ snprintf(end, sizeof(date_buffer) - (end - date_buffer), "%s%02d%02d", (offset.hours() >= 0 ? "+" : "-"), int(abs(offset.hours())), int(offset.minutes()));
_email = "Date: " + string(date_buffer) + "\r\n"
"To: " + address_list (_to) + "\r\n"
@@ -143,9 +145,8 @@ Email::send(string server, int port, EmailProtocol protocol, string user, string
"Content-Type: multipart/mixed; boundary=" + boundary + "\r\n";
}
- _email += "Subject: " + encode_rfc1342(_subject) + "\r\n"
- "User-Agent: DCP-o-matic\r\n"
- "\r\n";
+ _email += "Subject: " + encode_rfc1342(_subject) + "\r\n" +
+ variant::insert_dcpomatic("User-Agent: %1\r\n\r\n");
if (!_attachments.empty ()) {
_email += "--" + boundary + "\r\n"
diff --git a/src/lib/email.h b/src/lib/email.h
index 36398bfd8..ac4703453 100644
--- a/src/lib/email.h
+++ b/src/lib/email.h
@@ -19,6 +19,7 @@
*/
+#include "types.h"
#include <curl/curl.h>
#include <boost/scoped_array.hpp>
diff --git a/src/lib/encode_server.cc b/src/lib/encode_server.cc
index 036ea58a5..8d1759986 100644
--- a/src/lib/encode_server.cc
+++ b/src/lib/encode_server.cc
@@ -37,6 +37,8 @@
#include "image.h"
#include "log.h"
#include "player_video.h"
+#include "util.h"
+#include "variant.h"
#include "version.h"
#include <dcp/raw_convert.h>
#include <dcp/warnings.h>
@@ -81,6 +83,7 @@ EncodeServer::EncodeServer (bool verbose, int num_threads)
#endif
, _verbose (verbose)
, _num_threads (num_threads)
+ , _frames_encoded(0)
{
}
@@ -169,6 +172,8 @@ EncodeServer::process (shared_ptr<Socket> socket, struct timeval& after_read, st
throw;
}
+ ++_frames_encoded;
+
return dcp_video_frame.index ();
}
@@ -243,7 +248,7 @@ EncodeServer::run ()
{
LOG_GENERAL ("Server %1 (%2) starting with %3 threads", dcpomatic_version, dcpomatic_git_commit, _num_threads);
if (_verbose) {
- cout << "DCP-o-matic server starting with " << _num_threads << " threads.\n";
+ cout << variant::dcpomatic_encode_server() << " starting with " << _num_threads << " threads.\n";
}
for (int i = 0; i < _num_threads; ++i) {
@@ -268,12 +273,9 @@ void
EncodeServer::broadcast_thread ()
try
{
- auto address = boost::asio::ip::address_v4::any ();
- boost::asio::ip::udp::endpoint listen_endpoint (address, HELLO_PORT);
+ boost::asio::ip::udp::endpoint listen_endpoint(boost::asio::ip::udp::v4(), HELLO_PORT);
- _broadcast.socket = new boost::asio::ip::udp::socket (_broadcast.io_service);
- _broadcast.socket->open (listen_endpoint.protocol ());
- _broadcast.socket->bind (listen_endpoint);
+ _broadcast.socket = new boost::asio::ip::udp::socket(_broadcast.io_service, listen_endpoint);
_broadcast.socket->async_receive_from (
boost::asio::buffer (_broadcast.buffer, sizeof (_broadcast.buffer)),
@@ -298,8 +300,8 @@ EncodeServer::broadcast_received ()
/* Reply to the client saying what we can do */
xmlpp::Document doc;
auto root = doc.create_root_node ("ServerAvailable");
- root->add_child("Threads")->add_child_text (raw_convert<string> (_worker_threads.size ()));
- root->add_child("Version")->add_child_text (raw_convert<string> (SERVER_LINK_VERSION));
+ cxml::add_text_child(root, "Threads", raw_convert<string>(_worker_threads.size()));
+ cxml::add_text_child(root, "Version", raw_convert<string>(SERVER_LINK_VERSION));
auto xml = doc.write_to_string ("UTF-8");
if (_verbose) {
diff --git a/src/lib/encode_server.h b/src/lib/encode_server.h
index f93d66746..8059abd0f 100644
--- a/src/lib/encode_server.h
+++ b/src/lib/encode_server.h
@@ -32,6 +32,7 @@
#include "exception_store.h"
#include "server.h"
#include <boost/asio.hpp>
+#include <boost/atomic.hpp>
#include <boost/thread.hpp>
#include <boost/thread/condition.hpp>
#include <string>
@@ -53,6 +54,10 @@ public:
void run () override;
+ int frames_encoded() const {
+ return _frames_encoded;
+ }
+
private:
void handle (std::shared_ptr<Socket>) override;
void worker_thread ();
@@ -67,6 +72,7 @@ private:
bool _verbose;
int _num_threads;
Waker _waker;
+ boost::atomic<int> _frames_encoded;
struct Broadcast {
diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc
index 1d4ced595..143569e16 100644
--- a/src/lib/encode_server_finder.cc
+++ b/src/lib/encode_server_finder.cc
@@ -26,6 +26,8 @@
#include "encode_server_description.h"
#include "encode_server_finder.h"
#include "exceptions.h"
+#include "util.h"
+#include "variant.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <boost/bind/placeholders.hpp>
@@ -188,7 +190,7 @@ try {
new tcp::acceptor (_listen_io_service, tcp::endpoint(tcp::v4(), is_batch_converter ? BATCH_SERVER_PRESENCE_PORT : MAIN_SERVER_PRESENCE_PORT))
);
} catch (...) {
- boost::throw_exception (NetworkError (_("Could not listen for remote encode servers. Perhaps another instance of DCP-o-matic is running.")));
+ boost::throw_exception(NetworkError(variant::insert_dcpomatic(_("Could not listen for remote encode servers. Perhaps another instance of %1 is running."))));
}
start_accept ();
diff --git a/src/lib/encode_server_finder.h b/src/lib/encode_server_finder.h
index f8a30af54..c478387f9 100644
--- a/src/lib/encode_server_finder.h
+++ b/src/lib/encode_server_finder.h
@@ -50,8 +50,6 @@ public:
static EncodeServerFinder* instance ();
static void drop ();
- void stop ();
-
std::list<EncodeServerDescription> servers () const;
/** Emitted whenever the list of servers changes */
@@ -62,6 +60,7 @@ private:
~EncodeServerFinder ();
void start ();
+ void stop ();
void search_thread ();
void listen_thread ();
diff --git a/src/lib/environment_info.cc b/src/lib/environment_info.cc
index 2e0347c79..d6592d126 100644
--- a/src/lib/environment_info.cc
+++ b/src/lib/environment_info.cc
@@ -22,6 +22,7 @@
#include "compose.hpp"
#include "cross.h"
#include "log.h"
+#include "variant.h"
#include "version.h"
#include <dcp/version.h>
#include <dcp/warnings.h>
@@ -85,7 +86,7 @@ environment_info ()
{
list<string> info;
- info.push_back (String::compose ("DCP-o-matic %1 git %2 using %3", dcpomatic_version, dcpomatic_git_commit, dependency_version_summary()));
+ info.push_back(String::compose("%1 %2 git %3 using %4", variant::dcpomatic(), dcpomatic_version, dcpomatic_git_commit, dependency_version_summary()));
{
char buffer[128];
@@ -94,9 +95,9 @@ environment_info ()
}
#ifdef DCPOMATIC_DEBUG
- info.push_back ("DCP-o-matic built in debug mode.");
+ info.push_back(variant::insert_dcpomatic("%1 built in debug mode."));
#else
- info.push_back ("DCP-o-matic built in optimised mode.");
+ info.push_back(variant::insert_dcpomatic("%1 built in optimised mode."));
#endif
#ifdef LIBDCP_DEBUG
info.push_back ("libdcp built in debug mode.");
diff --git a/src/lib/exceptions.cc b/src/lib/exceptions.cc
index a51842b80..27496dcdc 100644
--- a/src/lib/exceptions.cc
+++ b/src/lib/exceptions.cc
@@ -173,3 +173,10 @@ VerifyError::VerifyError (string m, int n)
}
+
+DiskFullError::DiskFullError(boost::filesystem::path writing)
+ : std::runtime_error(String::compose(_("Disk full when writing %1"), writing.string()))
+{
+
+}
+
diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h
index 10231f59a..3069d792e 100644
--- a/src/lib/exceptions.h
+++ b/src/lib/exceptions.h
@@ -34,6 +34,7 @@ extern "C" {
}
#include <boost/filesystem.hpp>
#include <boost/optional.hpp>
+#include <sqlite3.h>
#include <cstring>
#include <stdexcept>
@@ -480,4 +481,65 @@ public:
};
+class SQLError : public std::runtime_error
+{
+public:
+ SQLError(sqlite3* db, char const* s)
+ : std::runtime_error(get_message(db, s))
+ {
+ _filename = get_filename(db);
+ }
+
+ SQLError(sqlite3* db, int rc)
+ : std::runtime_error(get_message(db, rc))
+ {
+ _filename = get_filename(db);
+ }
+
+ SQLError(sqlite3* db, int rc, std::string doing)
+ : std::runtime_error(get_message(db, rc, doing))
+ {
+ _filename = get_filename(db);
+ }
+
+ boost::filesystem::path filename() const {
+ return _filename;
+ }
+
+private:
+ boost::filesystem::path get_filename(sqlite3* db)
+ {
+ if (auto filename = sqlite3_db_filename(db, "main")) {
+ return filename;
+ }
+
+ return {};
+ }
+
+ std::string get_message(sqlite3* db, char const* s)
+ {
+ return String::compose("%1 (in %2)", s, get_filename(db));
+ }
+
+ std::string get_message(sqlite3* db, int rc)
+ {
+ return String::compose("%1 (in %2)", sqlite3_errstr(rc), get_filename(db));
+ }
+
+ std::string get_message(sqlite3* db, int rc, std::string doing)
+ {
+ return String::compose("%1 (while doing %2) (in %3)", sqlite3_errstr(rc), doing, get_filename(db));
+ }
+
+ boost::filesystem::path _filename;
+};
+
+
+class DiskFullError : public std::runtime_error
+{
+public:
+ explicit DiskFullError(boost::filesystem::path writing);
+};
+
+
#endif
diff --git a/src/lib/export_config.cc b/src/lib/export_config.cc
index e030b98e2..79042e59c 100644
--- a/src/lib/export_config.cc
+++ b/src/lib/export_config.cc
@@ -65,6 +65,8 @@ ExportConfig::read(cxml::ConstNodePtr node)
_format = ExportFormat::H264_AAC;
} else if (format == "prores-4444") {
_format = ExportFormat::PRORES_4444;
+ } else if (format == "prores-lt") {
+ _format = ExportFormat::PRORES_LT;
} else {
_format = ExportFormat::PRORES_HQ;
}
@@ -77,7 +79,7 @@ ExportConfig::read(cxml::ConstNodePtr node)
void
-ExportConfig::write(xmlpp::Element* node) const
+ExportConfig::write(xmlpp::Element* element) const
{
string name;
@@ -89,6 +91,9 @@ ExportConfig::write(xmlpp::Element* node) const
/* Write this but we also accept 'prores' for backwards compatibility */
name = "prores-hq";
break;
+ case ExportFormat::PRORES_LT:
+ name = "prores-lt";
+ break;
case ExportFormat::H264_AAC:
name = "h264-aac";
break;
@@ -97,11 +102,11 @@ ExportConfig::write(xmlpp::Element* node) const
break;
}
- node->add_child("Format")->add_child_text(name);
- node->add_child("MixdownToStereo")->add_child_text(_mixdown_to_stereo ? "1" : "0");
- node->add_child("SplitReels")->add_child_text(_split_reels ? "1" : "0");
- node->add_child("SplitStreams")->add_child_text(_split_streams ? "1" : "0");
- node->add_child("X264CRF")->add_child_text(dcp::raw_convert<string>(_x264_crf));
+ cxml::add_text_child(element, "Format", name);
+ cxml::add_text_child(element, "MixdownToStereo", _mixdown_to_stereo ? "1" : "0");
+ cxml::add_text_child(element, "SplitReels", _split_reels ? "1" : "0");
+ cxml::add_text_child(element, "SplitStreams", _split_streams ? "1" : "0");
+ cxml::add_text_child(element, "X264CRF", dcp::raw_convert<string>(_x264_crf));
}
@@ -138,4 +143,3 @@ ExportConfig::set_x264_crf(int crf)
{
_config->maybe_set(_x264_crf, crf);
}
-
diff --git a/src/lib/export_config.h b/src/lib/export_config.h
index 47dddb6c3..52d7b601d 100644
--- a/src/lib/export_config.h
+++ b/src/lib/export_config.h
@@ -37,7 +37,7 @@ public:
void set_defaults();
void read(cxml::ConstNodePtr node);
- void write(xmlpp::Element* node) const;
+ void write(xmlpp::Element* element) const;
ExportFormat format() const {
return _format;
diff --git a/src/lib/ffmpeg_audio_stream.cc b/src/lib/ffmpeg_audio_stream.cc
index 9400eb60d..24f96b889 100644
--- a/src/lib/ffmpeg_audio_stream.cc
+++ b/src/lib/ffmpeg_audio_stream.cc
@@ -52,19 +52,19 @@ FFmpegAudioStream::FFmpegAudioStream (cxml::ConstNodePtr node, int version)
void
-FFmpegAudioStream::as_xml (xmlpp::Node* root) const
+FFmpegAudioStream::as_xml(xmlpp::Element* root) const
{
FFmpegStream::as_xml (root);
- root->add_child("FrameRate")->add_child_text(raw_convert<string>(frame_rate()));
- root->add_child("Length")->add_child_text(raw_convert<string>(length()));
- mapping().as_xml (root->add_child("Mapping"));
+ cxml::add_text_child(root, "FrameRate", raw_convert<string>(frame_rate()));
+ cxml::add_text_child(root, "Length", raw_convert<string>(length()));
+ mapping().as_xml(cxml::add_child(root, "Mapping"));
if (first_audio) {
- root->add_child("FirstAudio")->add_child_text(raw_convert<string>(first_audio.get().get()));
+ cxml::add_text_child(root, "FirstAudio", raw_convert<string>(first_audio.get().get()));
}
if (codec_name) {
- root->add_child("CodecName")->add_child_text(codec_name.get());
+ cxml::add_text_child(root, "CodecName", codec_name.get());
}
if (bit_depth()) {
- root->add_child("BitDepth")->add_child_text(raw_convert<string>(bit_depth().get()));
+ cxml::add_text_child(root, "BitDepth", raw_convert<string>(bit_depth().get()));
}
}
diff --git a/src/lib/ffmpeg_audio_stream.h b/src/lib/ffmpeg_audio_stream.h
index aae982f9e..afd30e905 100644
--- a/src/lib/ffmpeg_audio_stream.h
+++ b/src/lib/ffmpeg_audio_stream.h
@@ -48,7 +48,7 @@ public:
FFmpegAudioStream (cxml::ConstNodePtr, int);
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
/* XXX: should probably be locked */
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index 4a7c87b34..5a99ecaa5 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -34,6 +34,7 @@
#include "job.h"
#include "log.h"
#include "text_content.h"
+#include "variant.h"
#include "video_content.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
@@ -87,8 +88,8 @@ get_optional_enum (cxml::ConstNodePtr node, string name)
}
-FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list<string>& notes)
- : Content (node)
+FFmpegContent::FFmpegContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes)
+ : Content(node, film_directory)
{
_color_range = get_optional_enum<AVColorRange>(node, "ColorRange");
@@ -118,7 +119,7 @@ FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list<string>
if (auto filter = Filter::from_id(i->content())) {
_filters.push_back(*filter);
} else {
- notes.push_back (String::compose (_("DCP-o-matic no longer supports the `%1' filter, so it has been turned off."), i->content()));
+ notes.push_back(String::compose(_("%1 no longer supports the `%2' filter, so it has been turned off."), variant::dcpomatic(), i->content()));
}
}
@@ -197,61 +198,61 @@ FFmpegContent::FFmpegContent (vector<shared_ptr<Content>> c)
void
-FFmpegContent::as_xml (xmlpp::Node* node, bool with_paths) const
+FFmpegContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
- node->add_child("Type")->add_child_text("FFmpeg");
- Content::as_xml (node, with_paths);
+ cxml::add_text_child(element, "Type", "FFmpeg");
+ Content::as_xml(element, with_paths, path_behaviour, film_directory);
if (video) {
- video->as_xml (node);
+ video->as_xml(element);
}
if (audio) {
- audio->as_xml (node);
+ audio->as_xml(element);
for (auto i: audio->streams()) {
auto f = dynamic_pointer_cast<FFmpegAudioStream> (i);
DCPOMATIC_ASSERT (f);
- f->as_xml (node->add_child("AudioStream"));
+ f->as_xml(cxml::add_child(element, "AudioStream"));
}
}
if (only_text()) {
- only_text()->as_xml (node);
+ only_text()->as_xml(element);
}
boost::mutex::scoped_lock lm (_mutex);
for (auto i: _subtitle_streams) {
- auto t = node->add_child("SubtitleStream");
+ auto t = cxml::add_child(element, "SubtitleStream");
if (_subtitle_stream && i == _subtitle_stream) {
- t->add_child("Selected")->add_child_text("1");
+ cxml::add_text_child(t, "Selected", "1");
}
i->as_xml (t);
}
for (auto i: _filters) {
- node->add_child("Filter")->add_child_text(i.id());
+ cxml::add_text_child(element, "Filter", i.id());
}
if (_first_video) {
- node->add_child("FirstVideo")->add_child_text(raw_convert<string>(_first_video.get().get()));
+ cxml::add_text_child(element, "FirstVideo", raw_convert<string>(_first_video.get().get()));
}
if (_color_range) {
- node->add_child("ColorRange")->add_child_text(raw_convert<string>(static_cast<int>(*_color_range)));
+ cxml::add_text_child(element, "ColorRange", raw_convert<string>(static_cast<int>(*_color_range)));
}
if (_color_primaries) {
- node->add_child("ColorPrimaries")->add_child_text(raw_convert<string>(static_cast<int>(*_color_primaries)));
+ cxml::add_text_child(element, "ColorPrimaries", raw_convert<string>(static_cast<int>(*_color_primaries)));
}
if (_color_trc) {
- node->add_child("ColorTransferCharacteristic")->add_child_text(raw_convert<string>(static_cast<int>(*_color_trc)));
+ cxml::add_text_child(element, "ColorTransferCharacteristic", raw_convert<string>(static_cast<int>(*_color_trc)));
}
if (_colorspace) {
- node->add_child("Colorspace")->add_child_text(raw_convert<string>(static_cast<int>(*_colorspace)));
+ cxml::add_text_child(element, "Colorspace", raw_convert<string>(static_cast<int>(*_colorspace)));
}
if (_bits_per_pixel) {
- node->add_child("BitsPerPixel")->add_child_text(raw_convert<string>(*_bits_per_pixel));
+ cxml::add_text_child(element, "BitsPerPixel", raw_convert<string>(*_bits_per_pixel));
}
}
diff --git a/src/lib/ffmpeg_content.h b/src/lib/ffmpeg_content.h
index a86358b76..a0fe9a0c0 100644
--- a/src/lib/ffmpeg_content.h
+++ b/src/lib/ffmpeg_content.h
@@ -55,7 +55,7 @@ class FFmpegContent : public Content
{
public:
FFmpegContent (boost::filesystem::path);
- FFmpegContent (cxml::ConstNodePtr, int version, std::list<std::string> &);
+ FFmpegContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int version, std::list<std::string> &);
FFmpegContent (std::vector<std::shared_ptr<Content>>);
std::shared_ptr<FFmpegContent> shared_from_this () {
@@ -70,7 +70,14 @@ public:
void take_settings_from (std::shared_ptr<const Content> c) override;
std::string summary () const override;
std::string technical_summary () const override;
- void as_xml (xmlpp::Node *, bool with_paths) const override;
+
+ void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const override;
+
dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override;
dcpomatic::DCPTime approximate_length () const override;
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index 45983795b..9713a26f6 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -45,7 +45,7 @@
#include "util.h"
#include "video_decoder.h"
#include "video_filter_graph.h"
-#include <dcp/subtitle_string.h>
+#include <dcp/text_string.h>
#include <sub/ssa_reader.h>
#include <sub/subtitle.h>
#include <sub/collect.h>
@@ -178,9 +178,8 @@ FFmpegDecoder::flush_fill()
full_length = full_length.ceil (frc.source);
if (video && !video->ignore()) {
double const vfr = _ffmpeg_content->video_frame_rate().get();
- auto const f = full_length.frames_round (vfr);
- auto const v = video->position(film()).get_value_or(ContentTime()).frames_round(vfr) + 1;
- if (v < f) {
+ auto const v = video->position(film()).get_value_or(ContentTime()) + ContentTime::from_frames(1, vfr);
+ if (v < full_length) {
video->emit(film(), make_shared<const RawImageProxy>(_black_image), v);
did_something = true;
}
@@ -260,7 +259,7 @@ deinterleave_audio(AVFrame* frame)
/* XXX: can't we use swr_convert() to do the format conversion? */
- int const channels = frame->channels;
+ int const channels = frame->ch_layout.nb_channels;
int const frames = frame->nb_samples;
int const total_samples = frames * channels;
auto audio = make_shared<AudioBuffers>(channels, frames);
@@ -622,7 +621,7 @@ FFmpegDecoder::process_video_frame ()
video->emit (
film(),
make_shared<RawImageProxy>(image),
- llrint(pts * _ffmpeg_content->active_video_frame_rate(film()))
+ ContentTime::from_seconds(pts)
);
} else {
LOG_WARNING_NC ("Dropping frame without PTS");
diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc
index f5610f502..ca85ae3c5 100644
--- a/src/lib/ffmpeg_examiner.cc
+++ b/src/lib/ffmpeg_examiner.cc
@@ -71,14 +71,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
auto codec = _codec_context[i] ? _codec_context[i]->codec : nullptr;
if (s->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && codec) {
- /* This is a hack; sometimes it seems that _audio_codec_context->channel_layout isn't set up,
- so bodge it here. No idea why we should have to do this.
- */
-
- if (s->codecpar->channel_layout == 0) {
- s->codecpar->channel_layout = av_get_default_channel_layout (s->codecpar->channels);
- }
-
DCPOMATIC_ASSERT (codec->name);
_audio_streams.push_back (
@@ -88,7 +80,7 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
s->id,
s->codecpar->sample_rate,
_need_length ? 0 : rint ((double(_format_context->duration) / AV_TIME_BASE) * s->codecpar->sample_rate),
- s->codecpar->channels,
+ s->codecpar->ch_layout.nb_channels,
s->codecpar->bits_per_raw_sample ? s->codecpar->bits_per_raw_sample : s->codecpar->bits_per_coded_sample
)
);
@@ -186,8 +178,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
/* This code taken from get_rotation() in ffmpeg:cmdutils.c */
auto stream = _format_context->streams[*_video_stream];
auto rotate_tag = av_dict_get (stream->metadata, "rotate", 0, 0);
- uint8_t* displaymatrix = av_stream_get_side_data (stream, AV_PKT_DATA_DISPLAYMATRIX, 0);
-
if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) {
char *tail;
_rotation = av_strtod (rotate_tag->value, &tail);
@@ -196,8 +186,9 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
}
}
- if (displaymatrix && !_rotation) {
- _rotation = - av_display_rotation_get ((int32_t*) displaymatrix);
+ auto side_data = av_packet_side_data_get(stream->codecpar->coded_side_data, stream->codecpar->nb_coded_side_data, AV_PKT_DATA_DISPLAYMATRIX);
+ if (side_data && !_rotation) {
+ _rotation = - av_display_rotation_get(reinterpret_cast<int32_t*>(side_data->data));
}
if (_rotation) {
@@ -258,7 +249,7 @@ FFmpegExaminer::video_packet (AVCodecContext* context, string& temporal_referenc
).get_value_or({}).frames_round(video_frame_rate().get()) + 1;
}
if (temporal_reference.size() < (PULLDOWN_CHECK_FRAMES * 2)) {
- temporal_reference += (_video_frame->top_field_first ? "T" : "B");
+ temporal_reference += ((_video_frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST) ? "T" : "B");
temporal_reference += (_video_frame->repeat_pict ? "3" : "2");
}
diff --git a/src/lib/ffmpeg_file_encoder.cc b/src/lib/ffmpeg_file_encoder.cc
index 6d1ad68f7..7f74ae4f6 100644
--- a/src/lib/ffmpeg_file_encoder.cc
+++ b/src/lib/ffmpeg_file_encoder.cc
@@ -21,7 +21,7 @@
#include "compose.hpp"
#include "cross.h"
-#include "ffmpeg_encoder.h"
+#include "ffmpeg_file_encoder.h"
#include "ffmpeg_wrapper.h"
#include "film.h"
#include "image.h"
@@ -73,8 +73,7 @@ public:
_codec_context->bit_rate = channels * 128 * 1024;
_codec_context->sample_fmt = sample_format;
_codec_context->sample_rate = frame_rate;
- _codec_context->channel_layout = av_get_default_channel_layout (channels);
- _codec_context->channels = channels;
+ av_channel_layout_default(&_codec_context->ch_layout, channels);
int r = avcodec_open2 (_codec_context, _codec, 0);
if (r < 0) {
@@ -96,7 +95,7 @@ public:
~ExportAudioStream ()
{
- avcodec_close (_codec_context);
+ avcodec_free_context(&_codec_context);
}
ExportAudioStream (ExportAudioStream const&) = delete;
@@ -143,7 +142,7 @@ public:
frame->nb_samples = size;
frame->format = _codec_context->sample_fmt;
- frame->channels = channels;
+ frame->ch_layout.nb_channels = channels;
int r = avcodec_fill_audio_frame (frame, channels, _codec_context->sample_fmt, (const uint8_t *) samples, buffer_size, 0);
DCPOMATIC_ASSERT (r >= 0);
@@ -242,6 +241,13 @@ FFmpegFileEncoder::FFmpegFileEncoder (
av_dict_set (&_video_options, "profile", "3", 0);
av_dict_set (&_video_options, "threads", "auto", 0);
break;
+ case ExportFormat::PRORES_LT:
+ _sample_format = AV_SAMPLE_FMT_S32;
+ _video_codec_name = "prores_ks";
+ _audio_codec_name = "pcm_s24le";
+ av_dict_set(&_video_options, "profile", "1", 0);
+ av_dict_set(&_video_options, "threads", "auto", 0);
+ break;
case ExportFormat::H264_AAC:
_sample_format = AV_SAMPLE_FMT_FLTP;
_video_codec_name = "libx264";
@@ -279,7 +285,7 @@ FFmpegFileEncoder::FFmpegFileEncoder (
FFmpegFileEncoder::~FFmpegFileEncoder ()
{
_audio_streams.clear ();
- avcodec_close (_video_codec_context);
+ avcodec_free_context(&_video_codec_context);
avio_close (_format_context->pb);
_format_context->pb = nullptr;
avformat_free_context (_format_context);
@@ -293,6 +299,7 @@ FFmpegFileEncoder::pixel_format (ExportFormat format)
case ExportFormat::PRORES_4444:
return AV_PIX_FMT_YUV444P10;
case ExportFormat::PRORES_HQ:
+ case ExportFormat::PRORES_LT:
return AV_PIX_FMT_YUV422P10;
case ExportFormat::H264_AAC:
return AV_PIX_FMT_YUV420P;
@@ -397,7 +404,11 @@ FFmpegFileEncoder::flush ()
auto const r = av_write_trailer(_format_context);
if (r) {
- throw EncodeError(N_("av_write_trailer"), N_("FFmpegFileEncoder::flush"), r);
+ if (r == -ENOSPC) {
+ throw DiskFullError(_output);
+ } else {
+ throw EncodeError(N_("av_write_trailer"), N_("FFmpegFileEncoder::flush"), r);
+ }
}
}
diff --git a/src/lib/ffmpeg_file_encoder.h b/src/lib/ffmpeg_file_encoder.h
index 78840d6a8..a365f463a 100644
--- a/src/lib/ffmpeg_file_encoder.h
+++ b/src/lib/ffmpeg_file_encoder.h
@@ -23,12 +23,14 @@
#define DCPOMATIC_FFMPEG_FILE_ENCODER_H
+#include "audio_buffers.h"
#include "audio_mapping.h"
#include "dcpomatic_time.h"
-#include "encoder.h"
#include "event_history.h"
#include "image_store.h"
#include "log.h"
+#include "player_text.h"
+#include "player_video.h"
#include <dcp/key.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -46,6 +48,7 @@ enum class ExportFormat
{
PRORES_4444,
PRORES_HQ,
+ PRORES_LT,
H264_AAC,
SUBTITLES_DCP
};
diff --git a/src/lib/ffmpeg_encoder.cc b/src/lib/ffmpeg_film_encoder.cc
index c1170f098..a2d26fd66 100644
--- a/src/lib/ffmpeg_encoder.cc
+++ b/src/lib/ffmpeg_film_encoder.cc
@@ -21,7 +21,7 @@
#include "butler.h"
#include "cross.h"
-#include "ffmpeg_encoder.h"
+#include "ffmpeg_film_encoder.h"
#include "film.h"
#include "image.h"
#include "job.h"
@@ -48,7 +48,7 @@ using namespace boost::placeholders;
#endif
-FFmpegEncoder::FFmpegEncoder (
+FFmpegFilmEncoder::FFmpegFilmEncoder(
shared_ptr<const Film> film,
weak_ptr<Job> job,
boost::filesystem::path output,
@@ -58,7 +58,7 @@ FFmpegEncoder::FFmpegEncoder (
bool audio_stream_per_channel,
int x264_crf
)
- : Encoder (film, job)
+ : FilmEncoder(film, job)
, _output_audio_channels(mixdown_to_stereo ? 2 : (_film->audio_channels() > 8 ? 16 : _film->audio_channels()))
, _history (200)
, _output (output)
@@ -85,7 +85,7 @@ FFmpegEncoder::FFmpegEncoder (
AudioMapping
-FFmpegEncoder::stereo_map() const
+FFmpegFilmEncoder::stereo_map() const
{
auto map = AudioMapping(_film->audio_channels(), 2);
float const overall_gain = 2 / (4 + sqrt(2));
@@ -116,7 +116,7 @@ FFmpegEncoder::stereo_map() const
AudioMapping
-FFmpegEncoder::many_channel_map() const
+FFmpegFilmEncoder::many_channel_map() const
{
auto map = AudioMapping(_film->audio_channels(), _output_audio_channels);
for (int i = 0; i < _film->audio_channels(); ++i) {
@@ -127,7 +127,7 @@ FFmpegEncoder::many_channel_map() const
void
-FFmpegEncoder::go ()
+FFmpegFilmEncoder::go()
{
{
auto job = _job.lock ();
@@ -234,19 +234,19 @@ FFmpegEncoder::go ()
}
optional<float>
-FFmpegEncoder::current_rate () const
+FFmpegFilmEncoder::current_rate() const
{
return _history.rate ();
}
Frame
-FFmpegEncoder::frames_done () const
+FFmpegFilmEncoder::frames_done() const
{
boost::mutex::scoped_lock lm (_mutex);
return _last_time.frames_round (_film->video_frame_rate ());
}
-FFmpegEncoder::FileEncoderSet::FileEncoderSet (
+FFmpegFilmEncoder::FileEncoderSet::FileEncoderSet(
dcp::Size video_frame_size,
int video_frame_rate,
int audio_frame_rate,
@@ -279,7 +279,7 @@ FFmpegEncoder::FileEncoderSet::FileEncoderSet (
}
shared_ptr<FFmpegFileEncoder>
-FFmpegEncoder::FileEncoderSet::get (Eyes eyes) const
+FFmpegFilmEncoder::FileEncoderSet::get(Eyes eyes) const
{
if (_encoders.size() == 1) {
/* We are doing a 2D export... */
@@ -298,7 +298,7 @@ FFmpegEncoder::FileEncoderSet::get (Eyes eyes) const
}
void
-FFmpegEncoder::FileEncoderSet::flush ()
+FFmpegFilmEncoder::FileEncoderSet::flush()
{
for (auto& i: _encoders) {
i.second->flush ();
@@ -306,7 +306,7 @@ FFmpegEncoder::FileEncoderSet::flush ()
}
void
-FFmpegEncoder::FileEncoderSet::audio (shared_ptr<AudioBuffers> a)
+FFmpegFilmEncoder::FileEncoderSet::audio(shared_ptr<AudioBuffers> a)
{
for (auto& i: _encoders) {
i.second->audio (a);
diff --git a/src/lib/ffmpeg_encoder.h b/src/lib/ffmpeg_film_encoder.h
index 2d5c6af87..ec6bb4594 100644
--- a/src/lib/ffmpeg_encoder.h
+++ b/src/lib/ffmpeg_film_encoder.h
@@ -23,15 +23,15 @@
#include "audio_mapping.h"
#include "butler.h"
-#include "encoder.h"
#include "event_history.h"
#include "ffmpeg_file_encoder.h"
+#include "film_encoder.h"
-class FFmpegEncoder : public Encoder
+class FFmpegFilmEncoder : public FilmEncoder
{
public:
- FFmpegEncoder (
+ FFmpegFilmEncoder(
std::shared_ptr<const Film> film,
std::weak_ptr<Job> job,
boost::filesystem::path output,
diff --git a/src/lib/ffmpeg_image_proxy.cc b/src/lib/ffmpeg_image_proxy.cc
index 2fcd486df..0ee41deab 100644
--- a/src/lib/ffmpeg_image_proxy.cc
+++ b/src/lib/ffmpeg_image_proxy.cc
@@ -234,9 +234,9 @@ FFmpegImageProxy::image (Image::Alignment alignment, optional<dcp::Size>) const
void
-FFmpegImageProxy::add_metadata (xmlpp::Node* node) const
+FFmpegImageProxy::add_metadata(xmlpp::Element* element) const
{
- node->add_child("Type")->add_child_text (N_("FFmpeg"));
+ cxml::add_text_child(element, "Type", N_("FFmpeg"));
}
void
diff --git a/src/lib/ffmpeg_image_proxy.h b/src/lib/ffmpeg_image_proxy.h
index b567fadee..3817d709f 100644
--- a/src/lib/ffmpeg_image_proxy.h
+++ b/src/lib/ffmpeg_image_proxy.h
@@ -28,14 +28,14 @@ class FFmpegImageProxy : public ImageProxy
public:
explicit FFmpegImageProxy (boost::filesystem::path);
explicit FFmpegImageProxy (dcp::ArrayData);
- FFmpegImageProxy (std::shared_ptr<Socket> socket);
+ explicit FFmpegImageProxy (std::shared_ptr<Socket> socket);
Result image (
Image::Alignment alignment,
boost::optional<dcp::Size> size = boost::optional<dcp::Size> ()
) const override;
- void add_metadata (xmlpp::Node *) const override;
+ void add_metadata(xmlpp::Element*) const override;
void write_to_socket (std::shared_ptr<Socket>) const override;
bool same (std::shared_ptr<const ImageProxy> other) const override;
size_t memory_used () const override;
diff --git a/src/lib/ffmpeg_stream.cc b/src/lib/ffmpeg_stream.cc
index 47f71d119..800c45eb6 100644
--- a/src/lib/ffmpeg_stream.cc
+++ b/src/lib/ffmpeg_stream.cc
@@ -40,10 +40,10 @@ FFmpegStream::FFmpegStream (cxml::ConstNodePtr node)
}
void
-FFmpegStream::as_xml (xmlpp::Node* root) const
+FFmpegStream::as_xml(xmlpp::Element* root) const
{
- root->add_child("Name")->add_child_text (name);
- root->add_child("Id")->add_child_text (raw_convert<string> (_id));
+ cxml::add_text_child(root, "Name", name);
+ cxml::add_text_child(root, "Id", raw_convert<string>(_id));
}
bool
diff --git a/src/lib/ffmpeg_stream.h b/src/lib/ffmpeg_stream.h
index 84b2a8853..221075eeb 100644
--- a/src/lib/ffmpeg_stream.h
+++ b/src/lib/ffmpeg_stream.h
@@ -37,7 +37,7 @@ public:
explicit FFmpegStream (cxml::ConstNodePtr);
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
/** @param c An AVFormatContext.
* @param index A stream index within the AVFormatContext.
diff --git a/src/lib/ffmpeg_subtitle_stream.cc b/src/lib/ffmpeg_subtitle_stream.cc
index 1101901b7..3f43b6ec5 100644
--- a/src/lib/ffmpeg_subtitle_stream.cc
+++ b/src/lib/ffmpeg_subtitle_stream.cc
@@ -49,15 +49,15 @@ FFmpegSubtitleStream::FFmpegSubtitleStream (cxml::ConstNodePtr node, int version
}
void
-FFmpegSubtitleStream::as_xml (xmlpp::Node* root) const
+FFmpegSubtitleStream::as_xml(xmlpp::Element* root) const
{
- FFmpegStream::as_xml (root);
+ FFmpegStream::as_xml(root);
boost::mutex::scoped_lock lm (_mutex);
for (map<RGBA, RGBA>::const_iterator i = _colours.begin(); i != _colours.end(); ++i) {
- xmlpp::Node* node = root->add_child("Colour");
- i->first.as_xml (node->add_child("From"));
- i->second.as_xml (node->add_child("To"));
+ auto node = cxml::add_child(root, "Colour");
+ i->first.as_xml(cxml::add_child(node, "From"));
+ i->second.as_xml(cxml::add_child(node, "To"));
}
}
diff --git a/src/lib/ffmpeg_subtitle_stream.h b/src/lib/ffmpeg_subtitle_stream.h
index 8f56d1975..6251350ce 100644
--- a/src/lib/ffmpeg_subtitle_stream.h
+++ b/src/lib/ffmpeg_subtitle_stream.h
@@ -33,7 +33,7 @@ public:
FFmpegSubtitleStream (cxml::ConstNodePtr node, int version);
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
void set_colour (RGBA from, RGBA to);
std::map<RGBA, RGBA> colours () const;
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 674add78f..b624b234b 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -36,7 +36,7 @@
#include "cross.h"
#include "dcp_content.h"
#include "dcp_content_type.h"
-#include "dcp_encoder.h"
+#include "dcp_film_encoder.h"
#include "dcpomatic_log.h"
#include "digester.h"
#include "environment_info.h"
@@ -57,6 +57,7 @@
#include "text_content.h"
#include "transcode_job.h"
#include "upload_job.h"
+#include "variant.h"
#include "video_content.h"
#include "version.h"
#include <libcxml/cxml.h>
@@ -88,18 +89,13 @@ using std::back_inserter;
using std::copy;
using std::cout;
using std::dynamic_pointer_cast;
-using std::exception;
using std::find;
using std::list;
-using std::make_pair;
using std::make_shared;
using std::map;
using std::max;
-using std::min;
using std::pair;
using std::runtime_error;
-using std::set;
-using std::setfill;
using std::shared_ptr;
using std::string;
using std::vector;
@@ -114,6 +110,8 @@ using namespace dcpomatic;
static constexpr char metadata_file[] = "metadata.xml";
+static constexpr char ui_state_file[] = "ui.xml";
+static constexpr char assets_file[] = "assets.xml";
/* 5 -> 6
@@ -144,12 +142,22 @@ static constexpr char metadata_file[] = "metadata.xml";
* have had Subtitle prefixes or suffixes removed.
* 37 -> 38
* VideoContent scale expressed just as "guess" or "custom"
+ * 38 -> 39
+ * Fade{In,Out} -> VideoFade{In,Out}
*/
-int const Film::current_state_version = 38;
+int const Film::current_state_version = 39;
/** Construct a Film object in a given directory.
*
+ * Some initial values are taken from the Config object, and usually then overwritten
+ * by reading in the default template. Setting up things like _dcp_content_type in
+ * this constructor is useful so that if people configured such things in old versions
+ * they are used when the first default template is written by Config
+ *
+ * At some point these config entries can be removed, and this constructor could
+ * perhaps read the default template itself.
+ *
* @param dir Film directory.
*/
@@ -161,12 +169,12 @@ Film::Film (optional<boost::filesystem::path> dir)
, _resolution (Resolution::TWO_K)
, _encrypted (false)
, _context_id (dcp::make_uuid ())
- , _j2k_bandwidth (Config::instance()->default_j2k_bandwidth ())
, _video_frame_rate (24)
, _audio_channels (Config::instance()->default_dcp_audio_channels ())
, _three_d (false)
, _sequence (true)
, _interop (Config::instance()->default_interop ())
+ , _video_encoding(VideoEncoding::JPEG2000)
, _limit_to_smpte_bv20(false)
, _audio_processor (0)
, _reel_type (ReelType::SINGLE)
@@ -200,13 +208,17 @@ Film::Film (optional<boost::filesystem::path> dir)
_studio = metadata["studio"];
}
+ for (auto encoding: {VideoEncoding::JPEG2000, VideoEncoding::MPEG2}) {
+ _video_bit_rate[encoding] = Config::instance()->default_video_bit_rate(encoding);
+ }
+
_playlist_change_connection = _playlist->Change.connect (bind (&Film::playlist_change, this, _1));
_playlist_order_changed_connection = _playlist->OrderChange.connect (bind (&Film::playlist_order_changed, this));
_playlist_content_change_connection = _playlist->ContentChange.connect (bind (&Film::playlist_content_change, this, _1, _2, _3, _4));
_playlist_length_change_connection = _playlist->LengthChange.connect (bind(&Film::playlist_length_change, this));
if (dir) {
- set_directory(dcp::filesystem::weakly_canonical(*dir));
+ _directory = dcp::filesystem::weakly_canonical(*dir);
}
if (_directory) {
@@ -238,7 +250,7 @@ Film::video_identifier () const
+ "_" + resolution_to_string (_resolution)
+ "_" + _playlist->video_identifier()
+ "_" + raw_convert<string>(_video_frame_rate)
- + "_" + raw_convert<string>(j2k_bandwidth());
+ + "_" + raw_convert<string>(video_bit_rate(video_encoding()));
if (encrypted ()) {
/* This is insecure but hey, the key is in plaintext in metadata.xml */
@@ -249,6 +261,9 @@ Film::video_identifier () const
if (_interop) {
s += "_I";
+ if (_video_encoding == VideoEncoding::MPEG2) {
+ s += "_M";
+ }
} else {
s += "_S";
if (_limit_to_smpte_bv20) {
@@ -279,17 +294,6 @@ Film::info_file (DCPTimePeriod period) const
return file (p);
}
-boost::filesystem::path
-Film::internal_video_asset_dir () const
-{
- return dir ("video");
-}
-
-boost::filesystem::path
-Film::internal_video_asset_filename (DCPTimePeriod p) const
-{
- return video_identifier() + "_" + raw_convert<string> (p.from.get()) + "_" + raw_convert<string> (p.to.get()) + ".mxf";
-}
boost::filesystem::path
Film::audio_analysis_path (shared_ptr<const Playlist> playlist) const
@@ -334,6 +338,13 @@ Film::audio_analysis_path (shared_ptr<const Playlist> playlist) const
boost::filesystem::path
+Film::assets_path() const
+{
+ return dir("assets");
+}
+
+
+boost::filesystem::path
Film::subtitle_analysis_path (shared_ptr<const Content> content) const
{
auto p = dir ("analysis");
@@ -379,88 +390,98 @@ Film::metadata (bool with_content_paths) const
auto doc = make_shared<xmlpp::Document>();
auto root = doc->create_root_node ("Metadata");
- root->add_child("Version")->add_child_text (raw_convert<string> (current_state_version));
- auto last_write = root->add_child("LastWrittenBy");
+ cxml::add_text_child(root, "Version", raw_convert<string>(current_state_version));
+ auto last_write = cxml::add_child(root, "LastWrittenBy");
last_write->add_child_text (dcpomatic_version);
last_write->set_attribute("git", dcpomatic_git_commit);
- root->add_child("Name")->add_child_text (_name);
- root->add_child("UseISDCFName")->add_child_text (_use_isdcf_name ? "1" : "0");
+ cxml::add_text_child(root, "Name", _name);
+ cxml::add_text_child(root, "UseISDCFName", _use_isdcf_name ? "1" : "0");
if (_dcp_content_type) {
- root->add_child("DCPContentType")->add_child_text (_dcp_content_type->isdcf_name ());
+ cxml::add_text_child(root, "DCPContentType", _dcp_content_type->isdcf_name());
}
if (_container) {
- root->add_child("Container")->add_child_text (_container->id ());
- }
-
- root->add_child("Resolution")->add_child_text (resolution_to_string (_resolution));
- root->add_child("J2KBandwidth")->add_child_text (raw_convert<string> (_j2k_bandwidth));
- root->add_child("VideoFrameRate")->add_child_text (raw_convert<string> (_video_frame_rate));
- root->add_child("AudioFrameRate")->add_child_text(raw_convert<string>(_audio_frame_rate));
- root->add_child("ISDCFDate")->add_child_text (boost::gregorian::to_iso_string (_isdcf_date));
- root->add_child("AudioChannels")->add_child_text (raw_convert<string> (_audio_channels));
- root->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0");
- root->add_child("Sequence")->add_child_text (_sequence ? "1" : "0");
- root->add_child("Interop")->add_child_text (_interop ? "1" : "0");
- root->add_child("LimitToSMPTEBv20")->add_child_text(_limit_to_smpte_bv20 ? "1" : "0");
- root->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0");
- root->add_child("Key")->add_child_text (_key.hex ());
- root->add_child("ContextID")->add_child_text (_context_id);
+ cxml::add_text_child(root, "Container", _container->id());
+ }
+
+ cxml::add_text_child(root, "Resolution", resolution_to_string(_resolution));
+ cxml::add_text_child(root, "J2KVideoBitRate", raw_convert<string>(_video_bit_rate[VideoEncoding::JPEG2000]));
+ cxml::add_text_child(root, "MPEG2VideoBitRate", raw_convert<string>(_video_bit_rate[VideoEncoding::MPEG2]));
+ cxml::add_text_child(root, "VideoFrameRate", raw_convert<string>(_video_frame_rate));
+ cxml::add_text_child(root, "AudioFrameRate", raw_convert<string>(_audio_frame_rate));
+ cxml::add_text_child(root, "ISDCFDate", boost::gregorian::to_iso_string(_isdcf_date));
+ cxml::add_text_child(root, "AudioChannels", raw_convert<string>(_audio_channels));
+ cxml::add_text_child(root, "ThreeD", _three_d ? "1" : "0");
+ cxml::add_text_child(root, "Sequence", _sequence ? "1" : "0");
+ cxml::add_text_child(root, "Interop", _interop ? "1" : "0");
+ cxml::add_text_child(root, "VideoEncoding", video_encoding_to_string(_video_encoding));
+ cxml::add_text_child(root, "LimitToSMPTEBv20", _limit_to_smpte_bv20 ? "1" : "0");
+ cxml::add_text_child(root, "Encrypted", _encrypted ? "1" : "0");
+ cxml::add_text_child(root, "Key", _key.hex ());
+ cxml::add_text_child(root, "ContextID", _context_id);
if (_audio_processor) {
- root->add_child("AudioProcessor")->add_child_text (_audio_processor->id ());
+ cxml::add_text_child(root, "AudioProcessor", _audio_processor->id());
+ }
+ cxml::add_text_child(root, "ReelType", raw_convert<string>(static_cast<int> (_reel_type)));
+ cxml::add_text_child(root, "ReelLength", raw_convert<string>(_reel_length));
+ for (auto boundary: _custom_reel_boundaries) {
+ cxml::add_text_child(root, "CustomReelBoundary", raw_convert<string>(boundary.get()));
}
- root->add_child("ReelType")->add_child_text (raw_convert<string> (static_cast<int> (_reel_type)));
- root->add_child("ReelLength")->add_child_text (raw_convert<string> (_reel_length));
- root->add_child("ReencodeJ2K")->add_child_text (_reencode_j2k ? "1" : "0");
- root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0");
+ cxml::add_text_child(root, "ReencodeJ2K", _reencode_j2k ? "1" : "0");
+ cxml::add_text_child(root, "UserExplicitVideoFrameRate", _user_explicit_video_frame_rate ? "1" : "0");
for (auto const& marker: _markers) {
- auto m = root->add_child("Marker");
- m->set_attribute("Type", dcp::marker_to_string(marker.first));
+ auto m = cxml::add_child(root, "Marker");
+ m->set_attribute("type", dcp::marker_to_string(marker.first));
m->add_child_text(raw_convert<string>(marker.second.get()));
}
for (auto i: _ratings) {
- i.as_xml (root->add_child("Rating"));
+ i.as_xml(cxml::add_child(root, "Rating"));
}
for (auto i: _content_versions) {
- root->add_child("ContentVersion")->add_child_text(i);
+ cxml::add_text_child(root, "ContentVersion", i);
}
- root->add_child("NameLanguage")->add_child_text(_name_language.to_string());
- root->add_child("TerritoryType")->add_child_text(territory_type_to_string(_territory_type));
+ cxml::add_text_child(root, "NameLanguage", _name_language.to_string());
+ cxml::add_text_child(root, "TerritoryType", territory_type_to_string(_territory_type));
if (_release_territory) {
- root->add_child("ReleaseTerritory")->add_child_text(_release_territory->subtag());
+ cxml::add_text_child(root, "ReleaseTerritory", _release_territory->subtag());
}
if (_sign_language_video_language) {
- root->add_child("SignLanguageVideoLanguage")->add_child_text(_sign_language_video_language->to_string());
+ cxml::add_text_child(root, "SignLanguageVideoLanguage", _sign_language_video_language->to_string());
}
- root->add_child("VersionNumber")->add_child_text(raw_convert<string>(_version_number));
- root->add_child("Status")->add_child_text(dcp::status_to_string(_status));
+ cxml::add_text_child(root, "VersionNumber", raw_convert<string>(_version_number));
+ cxml::add_text_child(root, "Status", dcp::status_to_string(_status));
if (_chain) {
- root->add_child("Chain")->add_child_text(*_chain);
+ cxml::add_text_child(root, "Chain", *_chain);
}
if (_distributor) {
- root->add_child("Distributor")->add_child_text(*_distributor);
+ cxml::add_text_child(root, "Distributor", *_distributor);
}
if (_facility) {
- root->add_child("Facility")->add_child_text(*_facility);
+ cxml::add_text_child(root, "Facility", *_facility);
}
if (_studio) {
- root->add_child("Studio")->add_child_text(*_studio);
+ cxml::add_text_child(root, "Studio", *_studio);
}
- root->add_child("TempVersion")->add_child_text(_temp_version ? "1" : "0");
- root->add_child("PreRelease")->add_child_text(_pre_release ? "1" : "0");
- root->add_child("RedBand")->add_child_text(_red_band ? "1" : "0");
- root->add_child("TwoDVersionOfThreeD")->add_child_text(_two_d_version_of_three_d ? "1" : "0");
+ cxml::add_text_child(root, "TempVersion", _temp_version ? "1" : "0");
+ cxml::add_text_child(root, "PreRelease", _pre_release ? "1" : "0");
+ cxml::add_text_child(root, "RedBand", _red_band ? "1" : "0");
+ cxml::add_text_child(root, "TwoDVersionOfThreeD", _two_d_version_of_three_d ? "1" : "0");
if (_luminance) {
- root->add_child("LuminanceValue")->add_child_text(raw_convert<string>(_luminance->value()));
- root->add_child("LuminanceUnit")->add_child_text(dcp::Luminance::unit_to_string(_luminance->unit()));
+ cxml::add_text_child(root, "LuminanceValue", raw_convert<string>(_luminance->value()));
+ cxml::add_text_child(root, "LuminanceUnit", dcp::Luminance::unit_to_string(_luminance->unit()));
}
- root->add_child("UserExplicitContainer")->add_child_text(_user_explicit_container ? "1" : "0");
- root->add_child("UserExplicitResolution")->add_child_text(_user_explicit_resolution ? "1" : "0");
+ cxml::add_text_child(root, "UserExplicitContainer", _user_explicit_container ? "1" : "0");
+ cxml::add_text_child(root, "UserExplicitResolution", _user_explicit_resolution ? "1" : "0");
if (_audio_language) {
- root->add_child("AudioLanguage")->add_child_text(_audio_language->to_string());
+ cxml::add_text_child(root, "AudioLanguage", _audio_language->to_string());
}
- _playlist->as_xml (root->add_child ("Playlist"), with_content_paths);
+ _playlist->as_xml(
+ cxml::add_child(root, "Playlist"),
+ with_content_paths,
+ Config::instance()->relative_paths() ? PathBehaviour::MAKE_RELATIVE : PathBehaviour::KEEP_ABSOLUTE,
+ directory()
+ );
return doc;
}
@@ -503,7 +524,13 @@ Film::read_metadata (optional<boost::filesystem::path> path)
{
if (!path) {
if (dcp::filesystem::exists(file("metadata")) && !dcp::filesystem::exists(file(metadata_file))) {
- throw runtime_error (_("This film was created with an older version of DCP-o-matic, and unfortunately it cannot be loaded into this version. You will need to create a new Film, re-add your content and set it up again. Sorry!"));
+ throw runtime_error(
+ variant::insert_dcpomatic(
+ _("This film was created with an older version of %1, and unfortunately it cannot "
+ "be loaded into this version. You will need to create a new Film, re-add your "
+ "content and set it up again. Sorry!")
+ )
+ );
}
path = file (metadata_file);
@@ -518,7 +545,7 @@ Film::read_metadata (optional<boost::filesystem::path> path)
_state_version = f.number_child<int> ("Version");
if (_state_version > current_state_version) {
- throw runtime_error (_("This film was created with a newer version of DCP-o-matic, and it cannot be loaded into this version. Sorry!"));
+ throw runtime_error(variant::insert_dcpomatic(_("This film was created with a newer version of %1, and it cannot be loaded into this version. Sorry!")));
} else if (_state_version < current_state_version) {
/* This is an older version; save a copy (if we haven't already) */
auto const older = path->parent_path() / String::compose("metadata.%1.xml", _state_version);
@@ -558,7 +585,12 @@ Film::read_metadata (optional<boost::filesystem::path> path)
}
_resolution = string_to_resolution (f.string_child ("Resolution"));
- _j2k_bandwidth = f.number_child<int> ("J2KBandwidth");
+ if (auto j2k = f.optional_number_child<int>("J2KBandwidth")) {
+ _video_bit_rate[VideoEncoding::JPEG2000] = *j2k;
+ } else {
+ _video_bit_rate[VideoEncoding::JPEG2000] = f.number_child<int64_t>("J2KVideoBitRate");
+ }
+ _video_bit_rate[VideoEncoding::MPEG2] = f.optional_number_child<int64_t>("MPEG2VideoBitRate").get_value_or(Config::instance()->default_video_bit_rate(VideoEncoding::MPEG2));
_video_frame_rate = f.number_child<int> ("VideoFrameRate");
_audio_frame_rate = f.optional_number_child<int>("AudioFrameRate").get_value_or(48000);
_encrypted = f.bool_child ("Encrypted");
@@ -580,6 +612,9 @@ Film::read_metadata (optional<boost::filesystem::path> path)
_three_d = f.bool_child ("ThreeD");
_interop = f.bool_child ("Interop");
+ if (auto encoding = f.optional_string_child("VideoEncoding")) {
+ _video_encoding = video_encoding_from_string(*encoding);
+ }
_limit_to_smpte_bv20 = f.optional_bool_child("LimitToSMPTEBv20").get_value_or(false);
_key = dcp::Key (f.string_child ("Key"));
_context_id = f.optional_string_child("ContextID").get_value_or (dcp::make_uuid ());
@@ -599,11 +634,18 @@ Film::read_metadata (optional<boost::filesystem::path> path)
_reel_type = static_cast<ReelType> (f.optional_number_child<int>("ReelType").get_value_or (static_cast<int>(ReelType::SINGLE)));
_reel_length = f.optional_number_child<int64_t>("ReelLength").get_value_or (2000000000);
+ for (auto boundary: f.node_children("CustomReelBoundary")) {
+ _custom_reel_boundaries.push_back(DCPTime(raw_convert<int64_t>(boundary->content())));
+ }
_reencode_j2k = f.optional_bool_child("ReencodeJ2K").get_value_or(false);
_user_explicit_video_frame_rate = f.optional_bool_child("UserExplicitVideoFrameRate").get_value_or(false);
for (auto i: f.node_children("Marker")) {
- _markers[dcp::marker_from_string(i->string_attribute("Type"))] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content()));
+ auto type = i->optional_string_attribute("Type");
+ if (!type) {
+ type = i->string_attribute("type");
+ }
+ _markers[dcp::marker_from_string(*type)] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content()));
}
for (auto i: f.node_children("Rating")) {
@@ -1099,6 +1141,10 @@ Film::set_directory (boost::filesystem::path d)
void
Film::set_name (string n)
{
+ if (_name == n) {
+ return;
+ }
+
FilmChangeSignaller ch(this, FilmProperty::NAME);
_name = n;
}
@@ -1151,10 +1197,10 @@ Film::set_resolution (Resolution r, bool explicit_user)
void
-Film::set_j2k_bandwidth (int b)
+Film::set_video_bit_rate(VideoEncoding encoding, int64_t bit_rate)
{
- FilmChangeSignaller ch(this, FilmProperty::J2K_BANDWIDTH);
- _j2k_bandwidth = b;
+ FilmChangeSignaller ch(this, FilmProperty::VIDEO_BIT_RATE);
+ _video_bit_rate[encoding] = bit_rate;
}
/** @param f New frame rate.
@@ -1198,6 +1244,15 @@ Film::set_interop (bool i)
void
+Film::set_video_encoding(VideoEncoding encoding)
+{
+ FilmChangeSignaller ch(this, FilmProperty::VIDEO_ENCODING);
+ _video_encoding = encoding;
+ check_settings_consistency();
+}
+
+
+void
Film::set_limit_to_smpte_bv20(bool limit)
{
FilmChangeSignaller ch(this, FilmProperty::LIMIT_TO_SMPTE_BV20);
@@ -1228,6 +1283,16 @@ Film::set_reel_length (int64_t r)
_reel_length = r;
}
+
+void
+Film::set_custom_reel_boundaries(vector<DCPTime> boundaries)
+{
+ FilmChangeSignaller ch(this, FilmProperty::CUSTOM_REEL_BOUNDARIES);
+ std::sort(boundaries.begin(), boundaries.end());
+ _custom_reel_boundaries = std::move(boundaries);
+}
+
+
void
Film::set_reencode_j2k (bool r)
{
@@ -1561,7 +1626,7 @@ Film::check_settings_consistency ()
} else if (!atmos_rate && rate != video_frame_rate()) {
atmos_rate = rate;
set_video_frame_rate (rate, false);
- Message (_("DCP-o-matic had to change your settings so that the film's frame rate is the same as that of your Atmos content."));
+ Message(variant::insert_dcpomatic(_("%1 had to change your settings so that the film's frame rate is the same as that of your Atmos content.")));
}
}
}
@@ -1593,7 +1658,41 @@ Film::check_settings_consistency ()
}
if (change_made) {
- Message (_("DCP-o-matic had to change your settings for referring to DCPs as OV. Please review those settings to make sure they are what you want."));
+ Message(variant::insert_dcpomatic(_("%1 had to change your settings for referring to DCPs as OV. Please review those settings to make sure they are what you want.")));
+ }
+
+ if (reel_type() == ReelType::CUSTOM) {
+ auto boundaries = custom_reel_boundaries();
+ auto too_late = std::find_if(boundaries.begin(), boundaries.end(), [this](dcpomatic::DCPTime const& time) {
+ return time >= length();
+ });
+
+ if (too_late != boundaries.end()) {
+ if (std::distance(too_late, boundaries.end()) > 1) {
+ Message(variant::insert_dcpomatic(_("%1 had to remove some of your custom reel boundaries as they no longer lie within the film.")));
+ } else {
+ Message(variant::insert_dcpomatic(_("%1 had to remove one of your custom reel boundaries as it no longer lies within the film.")));
+ }
+ boundaries.erase(too_late, boundaries.end());
+ set_custom_reel_boundaries(boundaries);
+ }
+ }
+
+ auto const hd = Ratio::from_id("178");
+
+ if (video_encoding() == VideoEncoding::MPEG2) {
+ if (container() != hd || resolution() == Resolution::FOUR_K) {
+ set_container(hd);
+ set_resolution(Resolution::TWO_K);
+ Message(_("DCP-o-matic had to set your container to 1920x1080 as it's the only one that can be used with MPEG2 encoding."));
+ }
+ if (three_d()) {
+ set_three_d(false);
+ Message(_("DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 encoding."));
+ }
+ } else if (container() == hd && !Config::instance()->allow_any_container()) {
+ set_container(Ratio::from_id("185"));
+ Message(_("DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 and that is not a standard ratio with JPEG2000 encoding."));
}
}
@@ -1720,7 +1819,7 @@ Film::make_kdm(boost::filesystem::path cpl_file, dcp::LocalTime from, dcp::Local
uint64_t
Film::required_disk_space () const
{
- return _playlist->required_disk_space (shared_from_this(), j2k_bandwidth(), audio_channels(), audio_frame_rate());
+ return _playlist->required_disk_space (shared_from_this(), video_bit_rate(video_encoding()), audio_channels(), audio_frame_rate());
}
/** This method checks the disk that the Film is on and tries to decide whether or not
@@ -1731,30 +1830,11 @@ Film::required_disk_space () const
* Note: the decision made by this method isn't, of course, 100% reliable.
*/
bool
-Film::should_be_enough_disk_space (double& required, double& available, bool& can_hard_link) const
-{
- /* Create a test file and see if we can hard-link it */
- boost::filesystem::path test = internal_video_asset_dir() / "test";
- boost::filesystem::path test2 = internal_video_asset_dir() / "test2";
- can_hard_link = true;
- dcp::File f(test, "w");
- if (f) {
- f.close();
- boost::system::error_code ec;
- dcp::filesystem::create_hard_link(test, test2, ec);
- if (ec) {
- can_hard_link = false;
- }
- dcp::filesystem::remove(test);
- dcp::filesystem::remove(test2);
- }
-
- auto s = dcp::filesystem::space(internal_video_asset_dir());
- required = double (required_disk_space ()) / 1073741824.0f;
- if (!can_hard_link) {
- required *= 2;
- }
- available = double (s.available) / 1073741824.0f;
+Film::should_be_enough_disk_space(double& required, double& available) const
+{
+ DCPOMATIC_ASSERT(directory());
+ required = required_disk_space() / 1073741824.0f;
+ available = dcp::filesystem::space(*directory()).available / 1073741824.0f;
return (available - required) > 1;
}
@@ -1799,15 +1879,16 @@ Film::audio_analysis_finished ()
/* XXX */
}
-list<DCPTimePeriod>
+
+vector<DCPTimePeriod>
Film::reels () const
{
- list<DCPTimePeriod> p;
+ vector<DCPTimePeriod> periods;
auto const len = length();
switch (reel_type ()) {
case ReelType::SINGLE:
- p.push_back (DCPTimePeriod (DCPTime (), len));
+ periods.emplace_back(DCPTime(), len);
break;
case ReelType::BY_VIDEO_CONTENT:
{
@@ -1832,7 +1913,7 @@ Film::reels () const
for (auto t: split_points) {
if (last && (t - *last) >= DCPTime::from_seconds(1)) {
/* Period from *last to t is long enough; use it and start a new one */
- p.push_back (DCPTimePeriod(*last, t));
+ periods.emplace_back(*last, t);
last = t;
} else if (!last) {
/* That was the first time, so start a new period */
@@ -1840,8 +1921,8 @@ Film::reels () const
}
}
- if (!p.empty()) {
- p.back().to = split_points.back();
+ if (!periods.empty()) {
+ periods.back().to = split_points.back();
}
break;
}
@@ -1851,19 +1932,32 @@ Film::reels () const
/* Integer-divide reel length by the size of one frame to give the number of frames per reel,
* making sure we don't go less than 1s long.
*/
- Frame const reel_in_frames = max(_reel_length / ((j2k_bandwidth() / video_frame_rate()) / 8), static_cast<Frame>(video_frame_rate()));
+ Frame const reel_in_frames = max(_reel_length / ((video_bit_rate(video_encoding()) / video_frame_rate()) / 8), static_cast<Frame>(video_frame_rate()));
while (current < len) {
DCPTime end = min (len, current + DCPTime::from_frames (reel_in_frames, video_frame_rate ()));
- p.push_back (DCPTimePeriod (current, end));
+ periods.emplace_back(current, end);
current = end;
}
break;
}
+ case ReelType::CUSTOM:
+ {
+ DCPTimePeriod current;
+ for (auto boundary: _custom_reel_boundaries) {
+ current.to = boundary;
+ periods.push_back(current);
+ current.from = boundary;
+ }
+ current.to = len;
+ periods.push_back(current);
+ break;
+ }
}
- return p;
+ return periods;
}
+
/** @param period A period within the DCP
* @return Name of the content which most contributes to the given period.
*/
@@ -1874,15 +1968,21 @@ Film::content_summary (DCPTimePeriod period) const
}
void
-Film::use_template (string name)
+Film::use_template(optional<string> name)
{
- _template_film.reset (new Film (optional<boost::filesystem::path>()));
- _template_film->read_metadata (Config::instance()->template_read_path(name));
+ _template_film = std::make_shared<Film>(optional<boost::filesystem::path>());
+ if (name) {
+ _template_film->read_metadata(Config::instance()->template_read_path(*name));
+ } else {
+ _template_film->read_metadata(Config::instance()->default_template_read_path());
+ }
_use_isdcf_name = _template_film->_use_isdcf_name;
_dcp_content_type = _template_film->_dcp_content_type;
_container = _template_film->_container;
_resolution = _template_film->_resolution;
- _j2k_bandwidth = _template_film->_j2k_bandwidth;
+ for (auto encoding: { VideoEncoding::JPEG2000, VideoEncoding::MPEG2 }) {
+ _video_bit_rate[encoding] = _template_film->_video_bit_rate[encoding];
+ }
_video_frame_rate = _template_film->_video_frame_rate;
_encrypted = _template_film->_encrypted;
_audio_channels = _template_film->_audio_channels;
@@ -1892,6 +1992,12 @@ Film::use_template (string name)
_audio_processor = _template_film->_audio_processor;
_reel_type = _template_film->_reel_type;
_reel_length = _template_film->_reel_length;
+ _chain = _template_film->_chain;
+ _distributor = _template_film->_distributor;
+ _facility = _template_film->_facility;
+ _studio = _template_film->_studio;
+ _territory_type = _template_film->_territory_type;
+ _release_territory = _template_film->_release_territory;
}
pair<double, double>
@@ -1944,14 +2050,14 @@ Film::contains_atmos_content () const
list<DCPTextTrack>
-Film::closed_caption_tracks () const
+Film::closed_text_tracks() const
{
list<DCPTextTrack> tt;
for (auto i: content()) {
for (auto text: i->text) {
/* XXX: Empty DCPTextTrack ends up being a magic value here - the "unknown" or "not specified" track */
auto dtt = text->dcp_track().get_value_or(DCPTextTrack());
- if (text->type() == TextType::CLOSED_CAPTION && find(tt.begin(), tt.end(), dtt) == tt.end()) {
+ if (!is_open(text->type()) && find(tt.begin(), tt.end(), dtt) == tt.end()) {
tt.push_back (dtt);
}
}
@@ -2230,3 +2336,94 @@ Film::set_territory_type(TerritoryType type)
_territory_type = type;
}
+
+void
+Film::set_ui_state(string key, string value)
+{
+ _ui_state[key] = value;
+ write_ui_state();
+}
+
+
+boost::optional<std::string>
+Film::ui_state(string key) const
+{
+ auto iter = _ui_state.find(key);
+ if (iter == _ui_state.end()) {
+ return {};
+ }
+
+ return iter->second;
+}
+
+
+void
+Film::write_ui_state() const
+{
+ auto doc = make_shared<xmlpp::Document>();
+ auto root = doc->create_root_node("UI");
+
+ for (auto state: _ui_state) {
+ cxml::add_text_child(root, state.first, state.second);
+ }
+
+ try {
+ doc->write_to_file_formatted(dcp::filesystem::fix_long_path(file(ui_state_file)).string());
+ } catch (...) {}
+}
+
+
+void
+Film::read_ui_state()
+{
+ try {
+ cxml::Document xml("UI");
+ xml.read_file(dcp::filesystem::fix_long_path(file(ui_state_file)));
+ for (auto node: xml.node_children()) {
+ if (!node->is_text()) {
+ _ui_state[node->name()] = node->content();
+ }
+ }
+ } catch (...) {}
+}
+
+
+vector<RememberedAsset>
+Film::read_remembered_assets() const
+{
+ vector<RememberedAsset> assets;
+
+ try {
+ cxml::Document xml("Assets");
+ xml.read_file(dcp::filesystem::fix_long_path(file(assets_file)));
+ for (auto node: xml.node_children("Asset")) {
+ assets.push_back(RememberedAsset(node));
+ }
+ } catch (std::exception& e) {
+ LOG_ERROR("Could not read assets file %1 (%2)", file(assets_file), e.what());
+ } catch (...) {
+ LOG_ERROR("Could not read assets file %1", file(assets_file));
+ }
+
+ return assets;
+}
+
+
+void
+Film::write_remembered_assets(vector<RememberedAsset> const& assets) const
+{
+ auto doc = make_shared<xmlpp::Document>();
+ auto root = doc->create_root_node("Assets");
+
+ for (auto asset: assets) {
+ asset.as_xml(cxml::add_child(root, "Asset"));
+ }
+
+ try {
+ doc->write_to_file_formatted(dcp::filesystem::fix_long_path(file(assets_file)).string());
+ } catch (std::exception& e) {
+ LOG_ERROR("Could not write assets file %1 (%2)", file(assets_file), e.what());
+ } catch (...) {
+ LOG_ERROR("Could not write assets file %1", file(assets_file));
+ }
+}
diff --git a/src/lib/film.h b/src/lib/film.h
index 92e224ad1..815c6ae74 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -32,15 +32,18 @@
#include "change_signaller.h"
#include "dcp_text_track.h"
#include "dcpomatic_time.h"
+#include "enum_indexed_vector.h"
#include "film_property.h"
#include "frame_rate_change.h"
#include "named_channel.h"
+#include "remembered_asset.h"
#include "resolution.h"
#include "signaller.h"
#include "territory_type.h"
#include "transcode_job.h"
#include "types.h"
#include "util.h"
+#include "video_encoding.h"
#include <dcp/encrypted_kdm.h>
#include <dcp/file.h>
#include <dcp/key.h>
@@ -121,11 +124,10 @@ public:
std::shared_ptr<InfoFileHandle> info_file_handle (dcpomatic::DCPTimePeriod period, bool read) const;
boost::filesystem::path j2c_path (int, Frame, Eyes, bool) const;
- boost::filesystem::path internal_video_asset_dir () const;
- boost::filesystem::path internal_video_asset_filename (dcpomatic::DCPTimePeriod p) const;
boost::filesystem::path audio_analysis_path (std::shared_ptr<const Playlist>) const;
boost::filesystem::path subtitle_analysis_path (std::shared_ptr<const Content>) const;
+ boost::filesystem::path assets_path() const;
void send_dcp_to_tms ();
@@ -139,7 +141,7 @@ public:
boost::filesystem::path file (boost::filesystem::path f) const;
boost::filesystem::path dir (boost::filesystem::path d, bool create = true) const;
- void use_template (std::string name);
+ void use_template(boost::optional<std::string> name);
std::list<std::string> read_metadata (boost::optional<boost::filesystem::path> path = boost::optional<boost::filesystem::path> ());
void write_metadata ();
void write_metadata (boost::filesystem::path path) const;
@@ -162,10 +164,10 @@ public:
std::vector<CPLSummary> cpls () const;
- std::list<DCPTextTrack> closed_caption_tracks () const;
+ std::list<DCPTextTrack> closed_text_tracks() const;
uint64_t required_disk_space () const;
- bool should_be_enough_disk_space (double& required, double& available, bool& can_hard_link) const;
+ bool should_be_enough_disk_space(double& required, double& available) const;
bool has_sign_language_video_channel () const;
@@ -191,7 +193,7 @@ public:
return _playlist;
}
- std::list<dcpomatic::DCPTimePeriod> reels () const;
+ std::vector<dcpomatic::DCPTimePeriod> reels() const;
std::list<int> mapped_audio_channels () const;
boost::optional<dcp::LanguageTag> audio_language () const {
@@ -255,8 +257,8 @@ public:
return _key;
}
- int j2k_bandwidth () const {
- return _j2k_bandwidth;
+ int video_bit_rate(VideoEncoding encoding) const {
+ return _video_bit_rate[encoding];
}
/** @return The frame rate of the DCP */
@@ -280,6 +282,10 @@ public:
return _interop;
}
+ VideoEncoding video_encoding() const {
+ return _video_encoding;
+ }
+
bool limit_to_smpte_bv20() const {
return _limit_to_smpte_bv20;
}
@@ -296,6 +302,10 @@ public:
return _reel_length;
}
+ std::vector<dcpomatic::DCPTime> custom_reel_boundaries() const {
+ return _custom_reel_boundaries;
+ }
+
std::string context_id () const {
return _context_id;
}
@@ -402,17 +412,19 @@ public:
void set_container (Ratio const *, bool user_explicit = true);
void set_resolution (Resolution, bool user_explicit = true);
void set_encrypted (bool);
- void set_j2k_bandwidth (int);
+ void set_video_bit_rate(VideoEncoding encoding, int64_t);
void set_video_frame_rate (int rate, bool user_explicit = false);
void set_audio_channels (int);
void set_three_d (bool);
void set_isdcf_date_today ();
void set_sequence (bool);
void set_interop (bool);
+ void set_video_encoding(VideoEncoding encoding);
void set_limit_to_smpte_bv20(bool);
void set_audio_processor (AudioProcessor const * processor);
void set_reel_type (ReelType);
void set_reel_length (int64_t);
+ void set_custom_reel_boundaries(std::vector<dcpomatic::DCPTime> boundaries);
void set_reencode_j2k (bool);
void set_marker (dcp::Marker type, dcpomatic::DCPTime time);
void unset_marker (dcp::Marker type);
@@ -439,6 +451,14 @@ public:
void add_ffoc_lfoc (Markers& markers) const;
+ void set_ui_state(std::string key, std::string value);
+ boost::optional<std::string> ui_state(std::string key) const;
+ void read_ui_state();
+
+ std::vector<RememberedAsset> read_remembered_assets() const;
+ void write_remembered_assets(std::vector<RememberedAsset> const& assets) const;
+ std::string video_identifier() const;
+
/** Emitted when some property has of the Film is about to change or has changed */
mutable boost::signals2::signal<void (ChangeType, FilmProperty)> Change;
@@ -472,7 +492,6 @@ private:
void signal_change (ChangeType, FilmProperty);
void signal_change (ChangeType, int);
- std::string video_identifier () const;
void playlist_change (ChangeType);
void playlist_order_changed ();
void playlist_content_change (ChangeType type, std::weak_ptr<Content>, int, bool frequent);
@@ -482,6 +501,7 @@ private:
void check_settings_consistency ();
void maybe_set_container_and_resolution ();
void set_dirty (bool dirty);
+ void write_ui_state() const;
/** Log to write to */
std::shared_ptr<Log> _log;
@@ -510,8 +530,8 @@ private:
* re-start picture MXF encodes.
*/
std::string _context_id;
- /** bandwidth for J2K files in bits per second */
- int _j2k_bandwidth;
+ /** bit rate for encoding video using in bits per second */
+ EnumIndexedVector<int64_t, VideoEncoding> _video_bit_rate;
/** Frames per second to run our DCP at */
int _video_frame_rate;
/** The date that we should use in a ISDCF name */
@@ -524,11 +544,14 @@ private:
bool _three_d;
bool _sequence;
bool _interop;
+ VideoEncoding _video_encoding;
bool _limit_to_smpte_bv20;
AudioProcessor const * _audio_processor;
ReelType _reel_type;
- /** Desired reel length in bytes, if _reel_type == REELTYPE_BY_LENGTH */
+ /** Desired reel length in bytes, if _reel_type == BY_LENGTH */
int64_t _reel_length;
+ /** Reel boundaries (excluding those at the start and end, sorted in ascending order) if _reel_type == CUSTOM */
+ std::vector<dcpomatic::DCPTime> _custom_reel_boundaries;
bool _reencode_j2k;
/** true if the user has ever explicitly set the video frame rate of this film */
bool _user_explicit_video_frame_rate;
@@ -567,6 +590,8 @@ private:
*/
bool _tolerant;
+ std::map<std::string, std::string> _ui_state;
+
mutable boost::mutex _info_file_mutex;
boost::signals2::scoped_connection _playlist_change_connection;
diff --git a/src/lib/encoder.cc b/src/lib/film_encoder.cc
index 5268d8620..05b911daf 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/film_encoder.cc
@@ -19,7 +19,7 @@
*/
-/** @file src/encoder.cc
+/** @file src/film_encoder.cc
* @brief A class which takes a Film and some Options, then uses those to encode the film
* into some output format.
*
@@ -28,17 +28,17 @@
*/
-#include "encoder.h"
+#include "film_encoder.h"
#include "player.h"
#include "i18n.h"
-/** Construct an encoder.
+/** Construct a FilmEncoder.
* @param film Film that we are encoding.
* @param job Job that this encoder is being used in.
*/
-Encoder::Encoder (std::shared_ptr<const Film> film, std::weak_ptr<Job> job)
+FilmEncoder::FilmEncoder(std::shared_ptr<const Film> film, std::weak_ptr<Job> job)
: _film (film)
, _job (job)
, _player(film, Image::Alignment::PADDED)
diff --git a/src/lib/encoder.h b/src/lib/film_encoder.h
index 9b67720d3..ed7626c68 100644
--- a/src/lib/encoder.h
+++ b/src/lib/film_encoder.h
@@ -19,8 +19,8 @@
*/
-#ifndef DCPOMATIC_ENCODER_H
-#define DCPOMATIC_ENCODER_H
+#ifndef DCPOMATIC_FILM_ENCODER_H
+#define DCPOMATIC_FILM_ENCODER_H
#include "player.h"
@@ -29,24 +29,23 @@
class Film;
-class Encoder;
class Player;
class Job;
class PlayerVideo;
class AudioBuffers;
-/** @class Encoder
+/** @class FilmEncoder
* @brief Parent class for something that can encode a film into some format
*/
-class Encoder
+class FilmEncoder
{
public:
- Encoder (std::shared_ptr<const Film> film, std::weak_ptr<Job> job);
- virtual ~Encoder () {}
+ FilmEncoder(std::shared_ptr<const Film> film, std::weak_ptr<Job> job);
+ virtual ~FilmEncoder() {}
- Encoder (Encoder const&) = delete;
- Encoder& operator= (Encoder const&) = delete;
+ FilmEncoder(FilmEncoder const&) = delete;
+ FilmEncoder& operator=(FilmEncoder const&) = delete;
virtual void go () = 0;
@@ -58,6 +57,8 @@ public:
/** @return the number of frames that are done */
virtual Frame frames_done () const = 0;
virtual bool finishing () const = 0;
+ virtual void pause() {}
+ virtual void resume() {}
protected:
std::shared_ptr<const Film> _film;
diff --git a/src/lib/film_property.h b/src/lib/film_property.h
index c23297965..ebda0e807 100644
--- a/src/lib/film_property.h
+++ b/src/lib/film_property.h
@@ -39,7 +39,7 @@ enum class FilmProperty {
CONTAINER,
RESOLUTION,
ENCRYPTED,
- J2K_BANDWIDTH,
+ VIDEO_BIT_RATE,
VIDEO_FRAME_RATE,
AUDIO_FRAME_RATE,
AUDIO_CHANNELS,
@@ -47,10 +47,12 @@ enum class FilmProperty {
THREE_D,
SEQUENCE,
INTEROP,
+ VIDEO_ENCODING,
LIMIT_TO_SMPTE_BV20,
AUDIO_PROCESSOR,
REEL_TYPE,
REEL_LENGTH,
+ CUSTOM_REEL_BOUNDARIES,
REENCODE_J2K,
MARKERS,
RATINGS,
diff --git a/src/lib/filter.cc b/src/lib/filter.cc
index 9a14795ec..465b5991a 100644
--- a/src/lib/filter.cc
+++ b/src/lib/filter.cc
@@ -37,7 +37,8 @@ LIBDCP_ENABLE_WARNINGS
#include "i18n.h"
-using namespace std;
+using std::string;
+using std::vector;
using boost::optional;
diff --git a/src/lib/font.cc b/src/lib/font.cc
index 955a2ad1c..246d3eeb8 100644
--- a/src/lib/font.cc
+++ b/src/lib/font.cc
@@ -63,11 +63,11 @@ Font& Font::operator=(Font const& other)
void
-Font::as_xml (xmlpp::Node* node)
+Font::as_xml(xmlpp::Element* element)
{
- node->add_child("Id")->add_child_text(_id);
+ cxml::add_text_child(element, "Id", _id);
if (_content.file) {
- node->add_child("File")->add_child_text(_content.file->string());
+ cxml::add_text_child(element, "File", _content.file->string());
}
}
diff --git a/src/lib/font.h b/src/lib/font.h
index 12a14aba4..092b682ba 100644
--- a/src/lib/font.h
+++ b/src/lib/font.h
@@ -57,7 +57,7 @@ public:
Font(Font const& other);
Font& operator=(Font const& other);
- void as_xml (xmlpp::Node* node);
+ void as_xml(xmlpp::Element* element);
std::string id () const {
return _id;
diff --git a/src/lib/font_id_allocator.cc b/src/lib/font_id_allocator.cc
index 5e4ae9c0f..b85fc90dc 100644
--- a/src/lib/font_id_allocator.cc
+++ b/src/lib/font_id_allocator.cc
@@ -24,9 +24,8 @@
#include "dcpomatic_assert.h"
#include "font_id_allocator.h"
#include <dcp/reel.h>
-#include <dcp/reel_closed_caption_asset.h>
-#include <dcp/reel_subtitle_asset.h>
-#include <dcp/subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
+#include <dcp/text_asset.h>
#include <set>
#include <string>
#include <vector>
@@ -61,7 +60,7 @@ FontIDAllocator::add_fonts_from_reels(vector<shared_ptr<dcp::Reel>> const& reels
void
-FontIDAllocator::add_fonts_from_asset(int reel_index, shared_ptr<const dcp::SubtitleAsset> asset)
+FontIDAllocator::add_fonts_from_asset(int reel_index, shared_ptr<const dcp::TextAsset> asset)
{
for (auto const& font: asset->font_data()) {
add_font(reel_index, asset->id(), font.first);
@@ -76,37 +75,23 @@ FontIDAllocator::add_font(int reel_index, string asset_id, string font_id)
if (!_default_font) {
_default_font = font;
}
- _map[font] = 0;
+ _map[font] = {};
}
void
FontIDAllocator::allocate()
{
- /* We'll first try adding <reel>_ to the start of the font ID, but if a reel has multiple
- * identical font IDs we will need to use some number that is not a reel ID. Find the
- * first such number (1 higher than the highest reel index)
- */
- auto next_unused = std::max_element(
- _map.begin(),
- _map.end(),
- [] (std::pair<Font, int> const& a, std::pair<Font, int> const& b) {
- return a.first.reel_index < b.first.reel_index;
- })->first.reel_index + 1;
-
std::set<string> used_ids;
for (auto& font: _map) {
- auto const proposed = String::compose("%1_%2", font.first.reel_index, font.first.font_id);
- if (used_ids.find(proposed) != used_ids.end()) {
- /* This ID was already used; we need to disambiguate it. Do so by using
- * one of our unused prefixes.
- */
- font.second = next_unused++;
- } else {
- /* This ID was not yet used */
- font.second = font.first.reel_index;
+ auto proposed = font.first.font_id;
+ int prefix = 0;
+ while (used_ids.find(proposed) != used_ids.end()) {
+ proposed = String::compose("%1_%2", prefix++, font.first.font_id);
+ DCPOMATIC_ASSERT(prefix < 128);
}
+ font.second = proposed;
used_ids.insert(proposed);
}
}
@@ -119,7 +104,7 @@ FontIDAllocator::font_id(int reel_index, string asset_id, string font_id) const
if (iter == _map.end()) {
return default_font_id();
}
- return String::compose("%1_%2", iter->second, font_id);
+ return iter->second;
}
diff --git a/src/lib/font_id_allocator.h b/src/lib/font_id_allocator.h
index fe4b9ef07..2a242a8cf 100644
--- a/src/lib/font_id_allocator.h
+++ b/src/lib/font_id_allocator.h
@@ -32,7 +32,7 @@
namespace dcp {
class Reel;
- class SubtitleAsset;
+ class TextAsset;
}
@@ -74,7 +74,7 @@ public:
}
private:
- void add_fonts_from_asset(int reel_index, std::shared_ptr<const dcp::SubtitleAsset> asset);
+ void add_fonts_from_asset(int reel_index, std::shared_ptr<const dcp::TextAsset> asset);
struct Font
{
@@ -101,7 +101,7 @@ private:
std::string font_id;
};
- std::map<Font, int> _map;
+ std::map<Font, std::string> _map;
boost::optional<Font> _default_font;
};
diff --git a/src/lib/frame_info.cc b/src/lib/frame_info.cc
new file mode 100644
index 000000000..f348bca6a
--- /dev/null
+++ b/src/lib/frame_info.cc
@@ -0,0 +1,84 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "frame_info.h"
+#include <string>
+
+
+using std::shared_ptr;
+using std::string;
+
+
+J2KFrameInfo::J2KFrameInfo(uint64_t offset_, uint64_t size_, string hash_)
+ : dcp::J2KFrameInfo(offset_, size_, hash_)
+{
+
+}
+
+
+J2KFrameInfo::J2KFrameInfo(dcp::J2KFrameInfo const& info)
+ : dcp::J2KFrameInfo(info)
+{
+
+}
+
+
+J2KFrameInfo::J2KFrameInfo(shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes)
+{
+ info_file->get().seek(position(frame, eyes), SEEK_SET);
+ info_file->get().checked_read(&offset, sizeof(offset));
+ info_file->get().checked_read(&size, sizeof(size));
+
+ char hash_buffer[33];
+ info_file->get().checked_read(hash_buffer, 32);
+ hash_buffer[32] = '\0';
+ hash = hash_buffer;
+}
+
+
+long
+J2KFrameInfo::position(Frame frame, Eyes eyes) const
+{
+ switch (eyes) {
+ case Eyes::BOTH:
+ return frame * _size_on_disk;
+ case Eyes::LEFT:
+ return frame * _size_on_disk * 2;
+ case Eyes::RIGHT:
+ return frame * _size_on_disk * 2 + _size_on_disk;
+ default:
+ DCPOMATIC_ASSERT(false);
+ }
+
+ DCPOMATIC_ASSERT(false);
+}
+
+
+/** @param frame reel-relative frame */
+void
+J2KFrameInfo::write(shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes) const
+{
+ info_file->get().seek(position(frame, eyes), SEEK_SET);
+ info_file->get().checked_write(&offset, sizeof(offset));
+ info_file->get().checked_write(&size, sizeof(size));
+ info_file->get().checked_write(hash.c_str(), hash.size());
+}
+
diff --git a/src/lib/frame_info.h b/src/lib/frame_info.h
new file mode 100644
index 000000000..a5a22bd9e
--- /dev/null
+++ b/src/lib/frame_info.h
@@ -0,0 +1,45 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "film.h"
+#include <dcp/frame_info.h>
+#include <memory>
+
+
+class J2KFrameInfo : public dcp::J2KFrameInfo
+{
+public:
+ J2KFrameInfo(dcp::J2KFrameInfo const& info);
+ J2KFrameInfo(uint64_t offset_, uint64_t size_, std::string hash_);
+ J2KFrameInfo(std::shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes);
+
+ void write(std::shared_ptr<InfoFileHandle> info_file, Frame frame, Eyes eyes) const;
+
+ static int size_on_disk() {
+ return _size_on_disk;
+ }
+
+private:
+ long position(Frame frame, Eyes eyes) const;
+
+ static constexpr auto _size_on_disk = 32 + sizeof(dcp::J2KFrameInfo::offset) + sizeof(dcp::J2KFrameInfo::size);
+};
+
diff --git a/src/lib/grok/context.h b/src/lib/grok/context.h
new file mode 100644
index 000000000..81622ad9d
--- /dev/null
+++ b/src/lib/grok/context.h
@@ -0,0 +1,291 @@
+/*
+ Copyright (C) 2023 Grok Image Compression Inc.
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#pragma once
+
+
+#include "../config.h"
+#include "../dcp_video.h"
+#include "../film.h"
+#include "../log.h"
+#include "../dcpomatic_log.h"
+#include "../writer.h"
+#include "messenger.h"
+#include <dcp/array_data.h>
+#include <boost/filesystem.hpp>
+
+
+static std::mutex launchMutex;
+
+namespace grk_plugin
+{
+
+struct GrokLogger : public MessengerLogger {
+ explicit GrokLogger(const std::string &preamble) : MessengerLogger(preamble)
+ {}
+ virtual ~GrokLogger() = default;
+ void info(const char* fmt, ...) override{
+ va_list arg;
+ va_start(arg, fmt);
+ dcpomatic_log->log(preamble_ + log_message(fmt, arg),LogEntry::TYPE_GENERAL);
+ va_end(arg);
+ }
+ void warn(const char* fmt, ...) override{
+ va_list arg;
+ va_start(arg, fmt);
+ dcpomatic_log->log(preamble_ + log_message(fmt, arg),LogEntry::TYPE_WARNING);
+ va_end(arg);
+ }
+ void error(const char* fmt, ...) override{
+ va_list arg;
+ va_start(arg, fmt);
+ dcpomatic_log->log(preamble_ + log_message(fmt, arg),LogEntry::TYPE_ERROR);
+ va_end(arg);
+ }
+};
+
+struct FrameProxy {
+ FrameProxy(int index, Eyes eyes, DCPVideo dcpv) : index_(index), eyes_(eyes), vf(dcpv)
+ {}
+ int index() const {
+ return index_;
+ }
+ Eyes eyes(void) const {
+ return eyes_;
+ }
+ int index_;
+ Eyes eyes_;
+ DCPVideo vf;
+};
+
+struct DcpomaticContext
+{
+ DcpomaticContext(
+ std::shared_ptr<const Film> film_,
+ Writer& writer_,
+ EventHistory& history_,
+ boost::filesystem::path const& location_
+ )
+ : film(film_)
+ , writer(writer_)
+ , history(history_)
+ , location(location_)
+ {
+
+ }
+
+ void set_dimensions(uint32_t w, uint32_t h)
+ {
+ width = w;
+ height = h;
+ }
+
+ std::shared_ptr<const Film> film;
+ Writer& writer;
+ EventHistory& history;
+ boost::filesystem::path location;
+ uint32_t width = 0;
+ uint32_t height = 0;
+};
+
+
+class GrokContext
+{
+public:
+ explicit GrokContext(DcpomaticContext* dcpomatic_context)
+ : _dcpomatic_context(dcpomatic_context)
+ {
+ auto grok = Config::instance()->grok().get_value_or({});
+ if (!grok.enable) {
+ return;
+ }
+
+ boost::filesystem::path folder(_dcpomatic_context->location);
+ boost::filesystem::path binary_path = folder / "grk_compress";
+ if (!boost::filesystem::exists(binary_path)) {
+ getMessengerLogger()->error(
+ "Invalid binary location %s", _dcpomatic_context->location.c_str()
+ );
+ return;
+ }
+
+ auto proc = [this](const std::string& str) {
+ try {
+ Msg msg(str);
+ auto tag = msg.next();
+ if (tag == GRK_MSGR_BATCH_SUBMIT_COMPRESSED) {
+ auto clientFrameId = msg.nextUint();
+ msg.nextUint(); // compressed frame ID
+ auto compressedFrameLength = msg.nextUint();
+ auto processor = [this](FrameProxy srcFrame, uint8_t* compressed, uint32_t compressedFrameLength) {
+ auto compressed_data = std::make_shared<dcp::ArrayData>(compressed, compressedFrameLength);
+ _dcpomatic_context->writer.write(compressed_data, srcFrame.index(), srcFrame.eyes());
+ frame_done ();
+ };
+
+ int const minimum_size = 16384;
+
+ bool needsRecompression = compressedFrameLength < minimum_size;
+ _messenger->processCompressed(str, processor, needsRecompression);
+
+ if (needsRecompression) {
+ auto fp = _messenger->retrieve(clientFrameId);
+ if (!fp) {
+ return;
+ }
+
+ auto encoded = std::make_shared<dcp::ArrayData>(fp->vf.encode_locally());
+ _dcpomatic_context->writer.write(encoded, fp->vf.index(), fp->vf.eyes());
+ frame_done ();
+ }
+ }
+ } catch (std::exception& ex) {
+ getMessengerLogger()->error("%s",ex.what());
+ }
+ };
+
+ auto clientInit = MessengerInit(
+ clientToGrokMessageBuf,
+ clientSentSynch,
+ grokReceiveReadySynch,
+ grokToClientMessageBuf,
+ grokSentSynch,
+ clientReceiveReadySynch,
+ proc,
+ std::thread::hardware_concurrency()
+ );
+
+ _messenger = new ScheduledMessenger<FrameProxy>(clientInit);
+ }
+
+ ~GrokContext()
+ {
+ shutdown();
+ }
+
+ bool launch(DCPVideo dcpv, int device)
+ {
+ namespace fs = boost::filesystem;
+
+ if (!_messenger) {
+ return false;
+ }
+ if (_launched) {
+ return true;
+ }
+ if (_launch_failed) {
+ return false;
+ }
+
+ std::unique_lock<std::mutex> lk_global(launchMutex);
+
+ if (!_messenger) {
+ return false;
+ }
+ if (_launched) {
+ return true;
+ }
+ if (_launch_failed) {
+ return false;
+ }
+
+ if (MessengerInit::firstLaunch(true)) {
+
+ if (!fs::exists(_dcpomatic_context->location) || !fs::is_directory(_dcpomatic_context->location)) {
+ getMessengerLogger()->error("Invalid directory %s", _dcpomatic_context->location.c_str());
+ return false;
+ }
+
+ auto s = dcpv.get_size();
+ _dcpomatic_context->set_dimensions(s.width, s.height);
+ auto grok = Config::instance()->grok().get_value_or({});
+ if (!_messenger->launchGrok(
+ _dcpomatic_context->location,
+ _dcpomatic_context->width,
+ _dcpomatic_context->width,
+ _dcpomatic_context->height,
+ 3,
+ 12,
+ device,
+ _dcpomatic_context->film->resolution() == Resolution::FOUR_K,
+ _dcpomatic_context->film->video_frame_rate(),
+ _dcpomatic_context->film->video_bit_rate(VideoEncoding::JPEG2000),
+ grok.licence_server,
+ grok.licence_port,
+ grok.licence)) {
+ _launch_failed = true;
+ return false;
+ }
+ }
+
+ _launched = _messenger->waitForClientInit();
+ _launch_failed = _launched;
+
+ return _launched;
+ }
+
+ bool scheduleCompress(DCPVideo const& vf)
+ {
+ if (!_messenger) {
+ return false;
+ }
+
+ auto fp = FrameProxy(vf.index(), vf.eyes(), vf);
+ auto cvt = [this, &fp](BufferSrc src) {
+ fp.vf.convert_to_xyz((uint16_t*)src.framePtr_);
+ };
+
+ return _messenger->scheduleCompress(fp, cvt);
+ }
+
+ void shutdown()
+ {
+ if (!_messenger) {
+ return;
+ }
+
+ std::unique_lock<std::mutex> lk_global(launchMutex);
+
+ if (!_messenger) {
+ return;
+ }
+
+ if (_launched) {
+ _messenger->shutdown();
+ }
+
+ delete _messenger;
+ _messenger = nullptr;
+ }
+
+ void frame_done()
+ {
+ _dcpomatic_context->history.event();
+ }
+
+private:
+ DcpomaticContext* _dcpomatic_context;
+ ScheduledMessenger<FrameProxy>* _messenger = nullptr;
+ bool _launched = false;
+ bool _launch_failed = false;
+};
+
+}
+
diff --git a/src/lib/grok/messenger.h b/src/lib/grok/messenger.h
new file mode 100644
index 000000000..eb2fe9560
--- /dev/null
+++ b/src/lib/grok/messenger.h
@@ -0,0 +1,906 @@
+/*
+ Copyright (C) 2023 Grok Image Compression Inc.
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+#pragma once
+
+#include <iostream>
+#include <string>
+#include <cstring>
+#include <atomic>
+#include <functional>
+#include <sstream>
+#include <future>
+#include <map>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <queue>
+#include <cassert>
+#include <cstdarg>
+
+#ifdef _WIN32
+#include <windows.h>
+#include <direct.h>
+#include <tlhelp32.h>
+#pragma warning(disable : 4100)
+#else
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <semaphore.h>
+#include <signal.h>
+#endif
+
+namespace grk_plugin
+{
+static std::string grokToClientMessageBuf = "Global\\grok_to_client_message";
+static std::string grokSentSynch = "Global\\grok_sent";
+static std::string clientReceiveReadySynch = "Global\\client_receive_ready";
+static std::string clientToGrokMessageBuf = "Global\\client_to_grok_message";
+static std::string clientSentSynch = "Global\\client_sent";
+static std::string grokReceiveReadySynch = "Global\\grok_receive_ready";
+static std::string grokUncompressedBuf = "Global\\grok_uncompressed_buf";
+static std::string grokCompressedBuf = "Global\\grok_compressed_buf";
+static const std::string GRK_MSGR_BATCH_IMAGE = "GRK_MSGR_BATCH_IMAGE";
+static const std::string GRK_MSGR_BATCH_COMPRESS_INIT = "GRK_MSGR_BATCH_COMPRESS_INIT";
+static const std::string GRK_MSGR_BATCH_SUBMIT_UNCOMPRESSED = "GRK_MSGR_BATCH_SUBMIT_UNCOMPRESSED";
+static const std::string GRK_MSGR_BATCH_PROCESSED_UNCOMPRESSED =
+ "GRK_MSGR_BATCH_PROCESSED_UNCOMPRESSED";
+static const std::string GRK_MSGR_BATCH_SUBMIT_COMPRESSED = "GRK_MSGR_BATCH_SUBMIT_COMPRESSED";
+static const std::string GRK_MSGR_BATCH_PROCESSSED_COMPRESSED =
+ "GRK_MSGR_BATCH_PROCESSSED_COMPRESSED";
+static const std::string GRK_MSGR_BATCH_SHUTDOWN = "GRK_MSGR_BATCH_SHUTDOWN";
+static const std::string GRK_MSGR_BATCH_FLUSH = "GRK_MSGR_BATCH_FLUSH";
+static const size_t messageBufferLen = 256;
+struct IMessengerLogger
+{
+ virtual ~IMessengerLogger(void) = default;
+ virtual void info(const char* fmt, ...) = 0;
+ virtual void warn(const char* fmt, ...) = 0;
+ virtual void error(const char* fmt, ...) = 0;
+
+ protected:
+ template<typename... Args>
+ std::string log_message(char const* const format, Args&... args) noexcept
+ {
+ constexpr size_t message_size = 512;
+ char message[message_size];
+
+ std::snprintf(message, message_size, format, args...);
+ return std::string(message);
+ }
+};
+struct MessengerLogger : public IMessengerLogger
+{
+ explicit MessengerLogger(const std::string &preamble) : preamble_(preamble) {}
+ virtual ~MessengerLogger() = default;
+ virtual void info(const char* fmt, ...) override
+ {
+ va_list args;
+ std::string new_fmt = preamble_ + fmt + "\n";
+ va_start(args, fmt);
+ vfprintf(stdout, new_fmt.c_str(), args);
+ va_end(args);
+ }
+ virtual void warn(const char* fmt, ...) override
+ {
+ va_list args;
+ std::string new_fmt = preamble_ + fmt + "\n";
+ va_start(args, fmt);
+ vfprintf(stdout, new_fmt.c_str(), args);
+ va_end(args);
+ }
+ virtual void error(const char* fmt, ...) override
+ {
+ va_list args;
+ std::string new_fmt = preamble_ + fmt + "\n";
+ va_start(args, fmt);
+ vfprintf(stderr, new_fmt.c_str(), args);
+ va_end(args);
+ }
+
+ protected:
+ std::string preamble_;
+};
+
+extern IMessengerLogger* sLogger;
+void setMessengerLogger(IMessengerLogger* logger);
+IMessengerLogger* getMessengerLogger(void);
+
+struct MessengerInit
+{
+ MessengerInit(const std::string &outBuf, const std::string &outSent,
+ const std::string &outReceiveReady, const std::string &inBuf,
+ const std::string &inSent,
+ const std::string &inReceiveReady,
+ std::function<void(std::string)> processor,
+ size_t numProcessingThreads)
+ : outboundMessageBuf(outBuf), outboundSentSynch(outSent),
+ outboundReceiveReadySynch(outReceiveReady), inboundMessageBuf(inBuf),
+ inboundSentSynch(inSent), inboundReceiveReadySynch(inReceiveReady), processor_(processor),
+ numProcessingThreads_(numProcessingThreads),
+ uncompressedFrameSize_(0), compressedFrameSize_(0),
+ numFrames_(0)
+ {
+ if(firstLaunch(true))
+ unlink();
+ }
+ void unlink(void)
+ {
+#ifndef _WIN32
+ shm_unlink(grokToClientMessageBuf.c_str());
+ shm_unlink(clientToGrokMessageBuf.c_str());
+#endif
+ }
+ static bool firstLaunch(bool isClient)
+ {
+ bool debugGrok = false;
+ return debugGrok != isClient;
+ }
+ std::string outboundMessageBuf;
+ std::string outboundSentSynch;
+ std::string outboundReceiveReadySynch;
+
+ std::string inboundMessageBuf;
+ std::string inboundSentSynch;
+ std::string inboundReceiveReadySynch;
+
+ std::function<void(std::string)> processor_;
+ size_t numProcessingThreads_;
+
+ size_t uncompressedFrameSize_;
+ size_t compressedFrameSize_;
+ size_t numFrames_;
+};
+
+/*************************** Synchronization *******************************/
+enum SynchDirection
+{
+ SYNCH_SENT,
+ SYNCH_RECEIVE_READY
+};
+
+typedef int grk_handle;
+struct Synch
+{
+ Synch(const std::string &sentSemName, const std::string &receiveReadySemName)
+ : sentSemName_(sentSemName), receiveReadySemName_(receiveReadySemName)
+ {
+ // unlink semaphores in case of previous crash
+ if(MessengerInit::firstLaunch(true))
+ unlink();
+ open();
+ }
+ ~Synch()
+ {
+ close();
+ if(MessengerInit::firstLaunch(true))
+ unlink();
+ }
+ void post(SynchDirection dir)
+ {
+ auto sem = (dir == SYNCH_SENT ? sentSem_ : receiveReadySem_);
+ int rc = sem_post(sem);
+ if(rc)
+ getMessengerLogger()->error("Error posting to semaphore: %s", strerror(errno));
+ }
+ void wait(SynchDirection dir)
+ {
+ auto sem = dir == SYNCH_SENT ? sentSem_ : receiveReadySem_;
+ int rc = sem_wait(sem);
+ if(rc)
+ getMessengerLogger()->error("Error waiting for semaphore: %s", strerror(errno));
+ }
+ void open(void)
+ {
+ sentSem_ = sem_open(sentSemName_.c_str(), O_CREAT, 0666, 0);
+ if(!sentSem_)
+ getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno));
+ receiveReadySem_ = sem_open(receiveReadySemName_.c_str(), O_CREAT, 0666, 1);
+ if(!receiveReadySem_)
+ getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno));
+ }
+ void close(void)
+ {
+ int rc = sem_close(sentSem_);
+ if(rc)
+ getMessengerLogger()->error("Error closing semaphore %s: %s", sentSemName_.c_str(),
+ strerror(errno));
+ rc = sem_close(receiveReadySem_);
+ if(rc)
+ getMessengerLogger()->error("Error closing semaphore %s: %s",
+ receiveReadySemName_.c_str(), strerror(errno));
+ }
+ void unlink(void)
+ {
+ int rc = sem_unlink(sentSemName_.c_str());
+ if(rc == -1 && errno != ENOENT)
+ getMessengerLogger()->error("Error unlinking semaphore %s: %s", sentSemName_.c_str(),
+ strerror(errno));
+ rc = sem_unlink(receiveReadySemName_.c_str());
+ if(rc == -1 && errno != ENOENT)
+ getMessengerLogger()->error("Error unlinking semaphore %s: %s",
+ receiveReadySemName_.c_str(), strerror(errno));
+ }
+ sem_t* sentSem_;
+ sem_t* receiveReadySem_;
+
+ private:
+ std::string sentSemName_;
+ std::string receiveReadySemName_;
+};
+struct SharedMemoryManager
+{
+ static bool initShm(const std::string &name, size_t len, grk_handle* shm_fd, char** buffer)
+ {
+ *shm_fd = shm_open(name.c_str(), O_CREAT | O_RDWR, 0666);
+ if(*shm_fd < 0)
+ {
+ getMessengerLogger()->error("Error opening shared memory: %s", strerror(errno));
+ return false;
+ }
+ int rc = ftruncate(*shm_fd, sizeof(char) * len);
+ if(rc)
+ {
+ getMessengerLogger()->error("Error truncating shared memory: %s", strerror(errno));
+ rc = close(*shm_fd);
+ if(rc)
+ getMessengerLogger()->error("Error closing shared memory: %s", strerror(errno));
+ rc = shm_unlink(name.c_str());
+ // 2 == No such file or directory
+ if(rc && errno != 2)
+ getMessengerLogger()->error("Error unlinking shared memory: %s", strerror(errno));
+ return false;
+ }
+ *buffer = static_cast<char*>(mmap(0, len, PROT_WRITE, MAP_SHARED, *shm_fd, 0));
+ if(!*buffer)
+ {
+ getMessengerLogger()->error("Error mapping shared memory: %s", strerror(errno));
+ rc = close(*shm_fd);
+ if(rc)
+ getMessengerLogger()->error("Error closing shared memory: %s", strerror(errno));
+ rc = shm_unlink(name.c_str());
+ // 2 == No such file or directory
+ if(rc && errno != 2)
+ getMessengerLogger()->error("Error unlinking shared memory: %s", strerror(errno));
+ }
+
+ return *buffer != nullptr;
+ }
+ static bool deinitShm(const std::string &name, size_t len, grk_handle &shm_fd, char** buffer)
+ {
+ if (!*buffer || !shm_fd)
+ return true;
+
+ int rc = munmap(*buffer, len);
+ *buffer = nullptr;
+ if(rc)
+ getMessengerLogger()->error("Error unmapping shared memory %s: %s", name.c_str(), strerror(errno));
+ rc = close(shm_fd);
+ shm_fd = 0;
+ if(rc)
+ getMessengerLogger()->error("Error closing shared memory %s: %s", name.c_str(), strerror(errno));
+ rc = shm_unlink(name.c_str());
+ // 2 == No such file or directory
+ if(rc && errno != 2)
+ fprintf(stderr,"Error unlinking shared memory %s : %s\n", name.c_str(), strerror(errno));
+
+ return true;
+ }
+};
+
+template<typename Data>
+class MessengerBlockingQueue
+{
+ public:
+ explicit MessengerBlockingQueue(size_t max) : active_(true), max_size_(max) {}
+ MessengerBlockingQueue() : MessengerBlockingQueue(UINT_MAX) {}
+ size_t size() const
+ {
+ return queue_.size();
+ }
+ // deactivate and clear queue
+ void deactivate()
+ {
+ {
+ std::lock_guard<std::mutex> lk(mutex_);
+ active_ = false;
+ while(!queue_.empty())
+ queue_.pop();
+ }
+
+ // release all waiting threads
+ can_pop_.notify_all();
+ can_push_.notify_all();
+ }
+ void activate()
+ {
+ std::lock_guard<std::mutex> lk(mutex_);
+ active_ = true;
+ }
+ bool push(Data const& value)
+ {
+ bool rc;
+ {
+ std::unique_lock<std::mutex> lk(mutex_);
+ rc = push_(value);
+ }
+ if(rc)
+ can_pop_.notify_one();
+
+ return rc;
+ }
+ bool waitAndPush(Data& value)
+ {
+ bool rc;
+ {
+ std::unique_lock<std::mutex> lk(mutex_);
+ if(!active_)
+ return false;
+ // in case of spurious wakeup, loop until predicate in lambda
+ // is satisfied.
+ can_push_.wait(lk, [this] { return queue_.size() < max_size_ || !active_; });
+ rc = push_(value);
+ }
+ if(rc)
+ can_pop_.notify_one();
+
+ return rc;
+ }
+ bool pop(Data& value)
+ {
+ bool rc;
+ {
+ std::unique_lock<std::mutex> lk(mutex_);
+ rc = pop_(value);
+ }
+ if(rc)
+ can_push_.notify_one();
+
+ return rc;
+ }
+ bool waitAndPop(Data& value)
+ {
+ bool rc;
+ {
+ std::unique_lock<std::mutex> lk(mutex_);
+ if(!active_)
+ return false;
+ // in case of spurious wakeup, loop until predicate in lambda
+ // is satisfied.
+ can_pop_.wait(lk, [this] { return !queue_.empty() || !active_; });
+ rc = pop_(value);
+ }
+ if(rc)
+ can_push_.notify_one();
+
+ return rc;
+ }
+
+ private:
+ bool push_(Data const& value)
+ {
+ if(queue_.size() == max_size_ || !active_)
+ return false;
+ queue_.push(value);
+
+ return true;
+ }
+ bool pop_(Data& value)
+ {
+ if(queue_.empty() || !active_)
+ return false;
+ value = queue_.front();
+ queue_.pop();
+
+ return true;
+ }
+ std::queue<Data> queue_;
+ mutable std::mutex mutex_;
+ std::condition_variable can_pop_;
+ std::condition_variable can_push_;
+ bool active_;
+ size_t max_size_;
+};
+struct BufferSrc
+{
+ BufferSrc(void) : BufferSrc("") {}
+ explicit BufferSrc(const std::string &file) : file_(file), clientFrameId_(0), frameId_(0), framePtr_(nullptr)
+ {}
+ BufferSrc(size_t clientFrameId, size_t frameId, uint8_t* framePtr)
+ : file_(""), clientFrameId_(clientFrameId), frameId_(frameId), framePtr_(framePtr)
+ {}
+ bool fromDisk(void)
+ {
+ return !file_.empty() && framePtr_ == nullptr;
+ }
+ size_t index() const
+ {
+ return clientFrameId_;
+ }
+ std::string file_;
+ size_t clientFrameId_;
+ size_t frameId_;
+ uint8_t* framePtr_;
+};
+
+struct Messenger;
+static void outboundThread(Messenger* messenger, const std::string &sendBuf, Synch* synch);
+static void inboundThread(Messenger* messenger, const std::string &receiveBuf, Synch* synch);
+static void processorThread(Messenger* messenger, std::function<void(std::string)> processor);
+
+struct Messenger
+{
+ explicit Messenger(MessengerInit init)
+ : running(true), _initialized(false), _shutdown(false), init_(init),
+ outboundSynch_(nullptr),
+ inboundSynch_(nullptr), uncompressed_buffer_(nullptr), compressed_buffer_(nullptr),
+ uncompressed_fd_(0), compressed_fd_(0)
+ {}
+ virtual ~Messenger(void)
+ {
+ running = false;
+ sendQueue.deactivate();
+ receiveQueue.deactivate();
+
+ if (outboundSynch_) {
+ outboundSynch_->post(SYNCH_RECEIVE_READY);
+ outbound.join();
+ }
+
+ if (inboundSynch_) {
+ inboundSynch_->post(SYNCH_SENT);
+ inbound.join();
+ }
+
+ for(auto& p : processors_)
+ p.join();
+
+ delete outboundSynch_;
+ delete inboundSynch_;
+
+ deinitShm();
+ }
+ void startThreads(void) {
+ outboundSynch_ =
+ new Synch(init_.outboundSentSynch, init_.outboundReceiveReadySynch);
+ outbound = std::thread(outboundThread, this, init_.outboundMessageBuf, outboundSynch_);
+
+ inboundSynch_ =
+ new Synch(init_.inboundSentSynch, init_.inboundReceiveReadySynch);
+ inbound = std::thread(inboundThread, this, init_.inboundMessageBuf, inboundSynch_);
+
+ for(size_t i = 0; i < init_.numProcessingThreads_; ++i)
+ processors_.push_back(std::thread(processorThread, this, init_.processor_));
+ }
+ bool initBuffers(void)
+ {
+ bool rc = true;
+ if(init_.uncompressedFrameSize_)
+ {
+ rc = rc && SharedMemoryManager::initShm(grokUncompressedBuf,
+ init_.uncompressedFrameSize_ * init_.numFrames_,
+ &uncompressed_fd_, &uncompressed_buffer_);
+ }
+ if(init_.compressedFrameSize_)
+ {
+ rc = rc && SharedMemoryManager::initShm(grokCompressedBuf,
+ init_.compressedFrameSize_ * init_.numFrames_,
+ &compressed_fd_, &compressed_buffer_);
+ }
+
+ return rc;
+ }
+
+ bool deinitShm(void)
+ {
+ bool rc = SharedMemoryManager::deinitShm(grokUncompressedBuf,
+ init_.uncompressedFrameSize_ * init_.numFrames_,
+ uncompressed_fd_, &uncompressed_buffer_);
+ rc = rc && SharedMemoryManager::deinitShm(grokCompressedBuf,
+ init_.compressedFrameSize_ * init_.numFrames_,
+ compressed_fd_, &compressed_buffer_);
+
+ return rc;
+ }
+ template<typename... Args>
+ void send(const std::string& str, Args... args)
+ {
+ std::ostringstream oss;
+ oss << str;
+ int dummy[] = {0, ((void)(oss << ',' << args), 0)...};
+ static_cast<void>(dummy);
+
+ sendQueue.push(oss.str());
+ }
+
+ bool launchGrok(
+ boost::filesystem::path const& dir,
+ uint32_t width,
+ uint32_t stride,
+ uint32_t height,
+ uint32_t samplesPerPixel,
+ uint32_t depth,
+ int device,
+ bool is4K,
+ uint32_t fps,
+ uint32_t bandwidth,
+ const std::string server,
+ uint32_t port,
+ const std::string license
+ )
+ {
+
+ std::unique_lock<std::mutex> lk(shutdownMutex_);
+ if (async_result_.valid())
+ return true;
+ if(MessengerInit::firstLaunch(true))
+ init_.unlink();
+ startThreads();
+ char _cmd[4096];
+ auto fullServer = server + ":" + std::to_string(port);
+ sprintf(_cmd,
+ "./grk_compress -batch_src %s,%d,%d,%d,%d,%d -out_fmt j2k -k 1 "
+ "-G %d -%s %d,%d -j %s -J %s -v",
+ GRK_MSGR_BATCH_IMAGE.c_str(), width, stride, height, samplesPerPixel, depth,
+ device, is4K ? "cinema4K" : "cinema2K", fps, bandwidth,
+ license.c_str(), fullServer.c_str());
+
+ return launch(_cmd, dir);
+ }
+ void initClient(size_t uncompressedFrameSize, size_t compressedFrameSize, size_t numFrames)
+ {
+ // client fills queue with pending uncompressed buffers
+ init_.uncompressedFrameSize_ = uncompressedFrameSize;
+ init_.compressedFrameSize_ = compressedFrameSize;
+ init_.numFrames_ = numFrames;
+ initBuffers();
+ auto ptr = uncompressed_buffer_;
+ for(size_t i = 0; i < init_.numFrames_; ++i)
+ {
+ availableBuffers_.push(BufferSrc(0, i, (uint8_t*)ptr));
+ ptr += init_.uncompressedFrameSize_;
+ }
+
+ std::unique_lock<std::mutex> lk(shutdownMutex_);
+ _initialized = true;
+ clientInitializedCondition_.notify_all();
+ }
+
+ bool waitForClientInit()
+ {
+ if (_initialized) {
+ return true;
+ } else if (_shutdown) {
+ return false;
+ }
+
+ std::unique_lock<std::mutex> lk(shutdownMutex_);
+
+ if (_initialized) {
+ return true;
+ } else if (_shutdown) {
+ return false;
+ }
+
+ while (true) {
+ if (clientInitializedCondition_.wait_for(lk, std::chrono::seconds(1), [this]{ return _initialized || _shutdown; })) {
+ break;
+ }
+ auto status = async_result_.wait_for(std::chrono::milliseconds(100));
+ if (status == std::future_status::ready) {
+ getMessengerLogger()->error("Grok exited unexpectedly during initialization");
+ return false;
+ }
+ }
+
+ return _initialized && !_shutdown;
+ }
+
+ static size_t uncompressedFrameSize(uint32_t w, uint32_t h, uint32_t samplesPerPixel)
+ {
+ return sizeof(uint16_t) * w * h * samplesPerPixel;
+ }
+ void reclaimCompressed(size_t frameId)
+ {
+ availableBuffers_.push(BufferSrc(0, frameId, getCompressedFrame(frameId)));
+ }
+ void reclaimUncompressed(size_t frameId)
+ {
+ availableBuffers_.push(BufferSrc(0, frameId, getUncompressedFrame(frameId)));
+ }
+ uint8_t* getUncompressedFrame(size_t frameId)
+ {
+ assert(frameId < init_.numFrames_);
+ if(frameId >= init_.numFrames_)
+ return nullptr;
+
+ return (uint8_t*)(uncompressed_buffer_ + frameId * init_.uncompressedFrameSize_);
+ }
+ uint8_t* getCompressedFrame(size_t frameId)
+ {
+ assert(frameId < init_.numFrames_);
+ if(frameId >= init_.numFrames_)
+ return nullptr;
+
+ return (uint8_t*)(compressed_buffer_ + frameId * init_.compressedFrameSize_);
+ }
+ std::atomic_bool running;
+ bool _initialized;
+ bool _shutdown;
+ MessengerBlockingQueue<std::string> sendQueue;
+ MessengerBlockingQueue<std::string> receiveQueue;
+ MessengerBlockingQueue<BufferSrc> availableBuffers_;
+ MessengerInit init_;
+ std::string cmd_;
+ std::future<int> async_result_;
+ std::mutex shutdownMutex_;
+ std::condition_variable shutdownCondition_;
+
+ protected:
+ std::condition_variable clientInitializedCondition_;
+ private:
+ bool launch(std::string const& cmd, boost::filesystem::path const& dir)
+ {
+ // Change the working directory
+ if(!dir.empty())
+ {
+ boost::system::error_code ec;
+ boost::filesystem::current_path(dir, ec);
+ if (ec) {
+ getMessengerLogger()->error("Error: failed to change the working directory");
+ return false;
+ }
+ }
+ // Execute the command using std::async and std::system
+ cmd_ = cmd;
+ getMessengerLogger()->info(cmd.c_str());
+ async_result_ = std::async(std::launch::async, [this]() { return std::system(cmd_.c_str()); });
+ bool success = async_result_.valid();
+ if (!success)
+ getMessengerLogger()->error("Grok launch failed");
+
+ return success;
+
+ }
+ std::thread outbound;
+ Synch* outboundSynch_;
+
+ std::thread inbound;
+ Synch* inboundSynch_;
+
+ std::vector<std::thread> processors_;
+ char* uncompressed_buffer_;
+ char* compressed_buffer_;
+
+ grk_handle uncompressed_fd_;
+ grk_handle compressed_fd_;
+};
+
+static void outboundThread(Messenger* messenger, const std::string &sendBuf, Synch* synch)
+{
+ grk_handle shm_fd = 0;
+ char* send_buffer = nullptr;
+
+ if(!SharedMemoryManager::initShm(sendBuf, messageBufferLen, &shm_fd, &send_buffer))
+ return;
+ while(messenger->running)
+ {
+ synch->wait(SYNCH_RECEIVE_READY);
+ if(!messenger->running)
+ break;
+ std::string message;
+ if(!messenger->sendQueue.waitAndPop(message))
+ break;
+ if(!messenger->running)
+ break;
+ memcpy(send_buffer, message.c_str(), message.size() + 1);
+ synch->post(SYNCH_SENT);
+ }
+ SharedMemoryManager::deinitShm(sendBuf, messageBufferLen, shm_fd, &send_buffer);
+}
+
+static void inboundThread(Messenger* messenger, const std::string &receiveBuf, Synch* synch)
+{
+ grk_handle shm_fd = 0;
+ char* receive_buffer = nullptr;
+
+ if(!SharedMemoryManager::initShm(receiveBuf, messageBufferLen, &shm_fd, &receive_buffer))
+ return;
+ while(messenger->running)
+ {
+ synch->wait(SYNCH_SENT);
+ if(!messenger->running)
+ break;
+ auto message = std::string(receive_buffer);
+ synch->post(SYNCH_RECEIVE_READY);
+ messenger->receiveQueue.push(message);
+ }
+ SharedMemoryManager::deinitShm(receiveBuf, messageBufferLen, shm_fd, &receive_buffer);
+}
+struct Msg
+{
+ explicit Msg(const std::string &msg) : ct_(0)
+ {
+ std::stringstream ss(msg);
+ while(ss.good())
+ {
+ std::string substr;
+ std::getline(ss, substr, ',');
+ cs_.push_back(substr);
+ }
+ }
+ std::string next()
+ {
+ if(ct_ == cs_.size())
+ {
+ getMessengerLogger()->error("Msg: comma separated list exhausted. returning empty.");
+ return "";
+ }
+ return cs_[ct_++];
+ }
+
+ uint32_t nextUint(void)
+ {
+ return (uint32_t)std::stoi(next());
+ }
+
+ std::vector<std::string> cs_;
+ size_t ct_;
+};
+
+static void processorThread(Messenger* messenger, std::function<void(std::string)> processor)
+{
+ while (messenger->running) {
+ std::string message;
+ if (!messenger->receiveQueue.waitAndPop(message)) {
+ break;
+ }
+
+ if (!messenger->running) {
+ break;
+ }
+
+ Msg msg(message);
+ auto tag = msg.next();
+ if (tag == GRK_MSGR_BATCH_COMPRESS_INIT) {
+ auto width = msg.nextUint();
+ msg.nextUint(); // stride
+ auto height = msg.nextUint();
+ auto samples_per_pixel = msg.nextUint();
+ msg.nextUint(); // depth
+ messenger->init_.uncompressedFrameSize_ = Messenger::uncompressedFrameSize(width, height, samples_per_pixel);
+ auto compressed_frame_size = msg.nextUint();
+ auto num_frames = msg.nextUint();
+ messenger->initClient(compressed_frame_size, compressed_frame_size, num_frames);
+ } else if (tag == GRK_MSGR_BATCH_PROCESSED_UNCOMPRESSED) {
+ messenger->reclaimUncompressed(msg.nextUint());
+ } else if (tag == GRK_MSGR_BATCH_PROCESSSED_COMPRESSED) {
+ messenger->reclaimCompressed(msg.nextUint());
+ }
+ processor(message);
+ }
+}
+
+template<typename F>
+struct ScheduledFrames
+{
+ void store(F const& val)
+ {
+ std::unique_lock<std::mutex> lk(mapMutex_);
+ auto it = map_.find(val.index());
+ if (it == map_.end())
+ map_.emplace(std::make_pair(val.index(), val));
+ }
+ boost::optional<F> retrieve(size_t index)
+ {
+ std::unique_lock<std::mutex> lk(mapMutex_);
+ auto it = map_.find(index);
+ if(it == map_.end())
+ return {};
+
+ F val = it->second;
+ map_.erase(index);
+
+ return val;
+ }
+
+ private:
+ std::mutex mapMutex_;
+ std::map<size_t, F> map_;
+};
+
+template<typename F>
+struct ScheduledMessenger : public Messenger
+{
+ explicit ScheduledMessenger(MessengerInit init) : Messenger(init),
+ framesScheduled_(0),
+ framesCompressed_(0)
+ {}
+ ~ScheduledMessenger(void) {
+ shutdown();
+ }
+ bool scheduleCompress(F const& proxy, std::function<void(BufferSrc const&)> converter){
+ size_t frameSize = init_.uncompressedFrameSize_;
+ assert(frameSize >= init_.uncompressedFrameSize_);
+ BufferSrc src;
+ if(!availableBuffers_.waitAndPop(src))
+ return false;
+ converter(src);
+ scheduledFrames_.store(proxy);
+ framesScheduled_++;
+ send(GRK_MSGR_BATCH_SUBMIT_UNCOMPRESSED, proxy.index(), src.frameId_);
+
+ return true;
+ }
+ void processCompressed(const std::string &message, std::function<void(F,uint8_t*,uint32_t)> processor, bool needsRecompression) {
+ Msg msg(message);
+ msg.next();
+ auto clientFrameId = msg.nextUint();
+ auto compressedFrameId = msg.nextUint();
+ auto compressedFrameLength = msg.nextUint();
+ if (!needsRecompression) {
+ auto src_frame = scheduledFrames_.retrieve(clientFrameId);
+ if (!src_frame) {
+ return;
+ }
+ processor(*src_frame, getCompressedFrame(compressedFrameId),compressedFrameLength);
+ }
+ ++framesCompressed_;
+ send(GRK_MSGR_BATCH_PROCESSSED_COMPRESSED, compressedFrameId);
+ if (_shutdown && framesCompressed_ == framesScheduled_)
+ shutdownCondition_.notify_all();
+ }
+ void shutdown(void){
+ try {
+ std::unique_lock<std::mutex> lk(shutdownMutex_);
+ if (!async_result_.valid())
+ return;
+ _shutdown = true;
+ if (framesScheduled_) {
+ uint32_t scheduled = framesScheduled_;
+ send(GRK_MSGR_BATCH_FLUSH, scheduled);
+ shutdownCondition_.wait(lk, [this] { return framesScheduled_ == framesCompressed_; });
+ }
+ availableBuffers_.deactivate();
+ send(GRK_MSGR_BATCH_SHUTDOWN);
+ int result = async_result_.get();
+ if(result != 0)
+ getMessengerLogger()->error("Accelerator failed with return code: %d\n",result);
+ } catch (std::exception &ex) {
+ getMessengerLogger()->error("%s",ex.what());
+ }
+
+ }
+
+ boost::optional<F> retrieve(size_t index) {
+ return scheduledFrames_.retrieve(index);
+ }
+
+ void store(F& val) {
+ scheduledFrames_.store(val);
+ }
+
+private:
+ ScheduledFrames<F> scheduledFrames_;
+ std::atomic<uint32_t> framesScheduled_;
+ std::atomic<uint32_t> framesCompressed_;
+};
+
+} // namespace grk_plugin
diff --git a/src/lib/grok_j2k_encoder_thread.cc b/src/lib/grok_j2k_encoder_thread.cc
new file mode 100644
index 000000000..c3cd6f8dd
--- /dev/null
+++ b/src/lib/grok_j2k_encoder_thread.cc
@@ -0,0 +1,72 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "config.h"
+#include "cross.h"
+#include "dcpomatic_log.h"
+#include "dcp_video.h"
+#include "grok/context.h"
+#include "grok_j2k_encoder_thread.h"
+#include "j2k_encoder.h"
+#include "util.h"
+#include <dcp/scope_guard.h>
+
+#include "i18n.h"
+
+
+using std::make_shared;
+using std::shared_ptr;
+
+
+GrokJ2KEncoderThread::GrokJ2KEncoderThread(J2KEncoder& encoder, grk_plugin::GrokContext* context)
+ : J2KEncoderThread(encoder)
+ , _context(context)
+{
+
+}
+
+
+void
+GrokJ2KEncoderThread::run()
+try
+{
+ while (true)
+ {
+ LOG_TIMING("encoder-sleep thread=%1", thread_id());
+ auto frame = _encoder.pop();
+
+ dcp::ScopeGuard frame_guard([this, &frame]() {
+ LOG_ERROR("Failed to schedule encode of %1 using grok", frame.index());
+ _encoder.retry(frame);
+ });
+
+ LOG_TIMING("encoder-pop thread=%1 frame=%2 eyes=%3", thread_id(), frame.index(), static_cast<int>(frame.eyes()));
+
+ auto grok = Config::instance()->grok().get_value_or({});
+
+ if (_context->launch(frame, grok.selected) && _context->scheduleCompress(frame)) {
+ frame_guard.cancel();
+ }
+ }
+} catch (boost::thread_interrupted& e) {
+} catch (...) {
+ store_current();
+}
diff --git a/src/lib/grok_j2k_encoder_thread.h b/src/lib/grok_j2k_encoder_thread.h
new file mode 100644
index 000000000..5301e1670
--- /dev/null
+++ b/src/lib/grok_j2k_encoder_thread.h
@@ -0,0 +1,41 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "exception_store.h"
+#include "j2k_encoder_thread.h"
+
+
+namespace grk_plugin {
+ class GrokContext;
+}
+
+
+class GrokJ2KEncoderThread : public J2KEncoderThread, public ExceptionStore
+{
+public:
+ GrokJ2KEncoderThread(J2KEncoder& encoder, grk_plugin::GrokContext* context);
+
+ void run() override;
+
+private:
+ grk_plugin::GrokContext* _context;
+};
+
diff --git a/src/lib/hints.cc b/src/lib/hints.cc
index 9eebe4030..4a13f77a0 100644
--- a/src/lib/hints.cc
+++ b/src/lib/hints.cc
@@ -35,14 +35,14 @@
#include "player.h"
#include "ratio.h"
#include "text_content.h"
+#include "variant.h"
#include "video_content.h"
#include "writer.h"
#include <dcp/cpl.h>
#include <dcp/filesystem.h>
#include <dcp/raw_convert.h>
#include <dcp/reel.h>
-#include <dcp/reel_closed_caption_asset.h>
-#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <boost/algorithm/string.hpp>
#include <iostream>
@@ -75,7 +75,7 @@ using namespace boost::placeholders;
Hints::Hints (weak_ptr<const Film> weak_film)
: WeakConstFilm (weak_film)
- , _writer (new Writer(weak_film, weak_ptr<Job>(), true))
+ , _writer(new Writer(weak_film, weak_ptr<Job>(), film()->dir("hints") / dcpomatic::get_process_id(), true))
, _analyser (film(), film()->playlist(), true, [](float) {})
, _stop (false)
{
@@ -106,7 +106,13 @@ void
Hints::check_few_audio_channels ()
{
if (film()->audio_channels() < 6) {
- hint (_("Your DCP has fewer than 6 audio channels. This may cause problems on some projectors. You may want to set the DCP to have 6 channels. It does not matter if your content has fewer channels, as DCP-o-matic will fill the extras with silence."));
+ hint(
+ variant::insert_dcpomatic(
+ _("Your DCP has fewer than 6 audio channels. This may cause problems on some projectors. "
+ "You may want to set the DCP to have 6 channels. It does not matter if your content has "
+ "fewer channels, as %1 will fill the extras with silence.")
+ )
+ );
}
}
@@ -116,7 +122,12 @@ Hints::check_upmixers ()
{
auto ap = film()->audio_processor();
if (ap && (ap->id() == "stereo-5.1-upmix-a" || ap->id() == "stereo-5.1-upmix-b")) {
- hint (_("You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and may result in poor-quality audio. If you continue, you should listen to the resulting DCP in a cinema to make sure that it sounds good."));
+ hint(variant::insert_dcpomatic(
+ _("You are using %1's stereo-to-5.1 upmixer. This is experimental and "
+ "may result in poor-quality audio. If you continue, you should listen to the "
+ "resulting DCP in a cinema to make sure that it sounds good.")
+ )
+ );
}
}
@@ -153,17 +164,17 @@ void
Hints::check_unusual_container ()
{
auto const film_container = film()->container()->id();
- if (film_container != "185" && film_container != "239") {
+ if (film()->video_encoding() != VideoEncoding::MPEG2 && film_container != "185" && film_container != "239") {
hint (_("Your DCP uses an unusual container ratio. This may cause problems on some projectors. If possible, use Flat or Scope for the DCP container ratio."));
}
}
void
-Hints::check_high_j2k_bandwidth ()
+Hints::check_high_video_bit_rate()
{
- if (film()->j2k_bandwidth() >= 245000000) {
- hint (_("A few projectors have problems playing back very high bit-rate DCPs. It is a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is unlikely to have any visible effect on the image."));
+ if (film()->video_encoding() == VideoEncoding::JPEG2000 && film()->video_bit_rate(VideoEncoding::JPEG2000) >= 245000000) {
+ hint (_("A few projectors have problems playing back very high bit-rate DCPs. It is a good idea to drop the video bit rate down to about 200Mbit/s; this is unlikely to have any visible effect on the image."));
}
}
@@ -251,6 +262,15 @@ Hints::check_interop ()
void
+Hints::check_video_encoding()
+{
+ if (film()->video_encoding() == VideoEncoding::MPEG2) {
+ hint(_("The vast majority of cinemas in Europe, Australasia and North America expect DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema really wants an old-style MPEG2 DCP."));
+ }
+}
+
+
+void
Hints::check_big_font_files ()
{
bool big_font_files = false;
@@ -350,7 +370,7 @@ Hints::check_loudness ()
static
bool
-subtitle_mxf_too_big (shared_ptr<dcp::SubtitleAsset> asset)
+subtitle_mxf_too_big(shared_ptr<dcp::TextAsset> asset)
{
return asset && asset->file() && dcp::filesystem::file_size(*asset->file()) >= (MAX_TEXT_MXF_SIZE - SIZE_SLACK);
}
@@ -450,12 +470,13 @@ try
check_certificates ();
check_interop ();
+ check_video_encoding();
check_big_font_files ();
check_few_audio_channels ();
check_upmixers ();
check_incorrect_container ();
check_unusual_container ();
- check_high_j2k_bandwidth ();
+ check_high_video_bit_rate();
check_frame_rate ();
check_4k_3d ();
check_speed_up ();
@@ -482,7 +503,7 @@ try
auto dcp_dir = film->dir("hints") / dcpomatic::get_process_id();
dcp::filesystem::remove_all(dcp_dir);
- _writer->finish (film->dir("hints") / dcpomatic::get_process_id());
+ _writer->finish();
dcp::DCP dcp (dcp_dir);
dcp.read ();
@@ -717,16 +738,20 @@ Hints::check_certificates ()
switch (*bad) {
case Config::BAD_SIGNER_UTF8_STRINGS:
- hint(_("The certificate chain that DCP-o-matic uses for signing DCPs and KDMs contains a small error "
- "which will prevent DCPs from being validated correctly on some systems. It is advisable to "
- "re-create the signing certificate chain by clicking the \"Re-make certificates and key...\" "
- "button in the Keys page of Preferences."));
+ hint(variant::insert_dcpomatic(
+ _("The certificate chain that %1 uses for signing DCPs and KDMs contains a small error "
+ "which will prevent DCPs from being validated correctly on some systems. It is advisable to "
+ "re-create the signing certificate chain by clicking the \"Re-make certificates and key...\" "
+ "button in the Keys page of Preferences.")
+ ));
break;
case Config::BAD_SIGNER_VALIDITY_TOO_LONG:
- hint(_("The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a validity period "
- "that is too long. This will cause problems playing back DCPs on some systems. "
- "It is advisable to re-create the signing certificate chain by clicking the "
- "\"Re-make certificates and key...\" button in the Keys page of Preferences."));
+ hint(variant::insert_dcpomatic(
+ _("The certificate chain that %1 uses for signing DCPs and KDMs has a validity period "
+ "that is too long. This will cause problems playing back DCPs on some systems. "
+ "It is advisable to re-create the signing certificate chain by clicking the "
+ "\"Re-make certificates and key...\" button in the Keys page of Preferences.")
+ ));
break;
default:
/* Some bad situations can't happen here as DCP-o-matic would have refused to start until they are fixed */
@@ -739,7 +764,7 @@ void
Hints::check_8_or_16_audio_channels()
{
auto const channels = film()->audio_channels();
- if (channels != 8 && channels != 16) {
+ if (film()->video_encoding() != VideoEncoding::MPEG2 && channels != 8 && channels != 16) {
hint(String::compose(_("Your DCP has %1 audio channels, rather than 8 or 16. This may cause some distributors to raise QC errors when they check your DCP. To avoid this, set the DCP audio channels to 8 or 16."), channels));
}
}
diff --git a/src/lib/hints.h b/src/lib/hints.h
index 0d65edc21..9e94f210f 100644
--- a/src/lib/hints.h
+++ b/src/lib/hints.h
@@ -20,15 +20,16 @@
#include "audio_analyser.h"
-#include "signaller.h"
-#include "player_text.h"
#include "dcp_text_track.h"
#include "dcpomatic_time.h"
+#include "player_text.h"
+#include "signaller.h"
+#include "text_type.h"
#include "weak_film.h"
-#include <boost/signals2.hpp>
#include <boost/atomic.hpp>
-#include <vector>
+#include <boost/signals2.hpp>
#include <string>
+#include <vector>
class Film;
@@ -68,12 +69,13 @@ private:
void check_certificates ();
void check_interop ();
+ void check_video_encoding();
void check_big_font_files ();
void check_few_audio_channels ();
void check_upmixers ();
void check_incorrect_container ();
void check_unusual_container ();
- void check_high_j2k_bandwidth ();
+ void check_high_video_bit_rate();
void check_frame_rate ();
void check_4k_3d ();
void check_speed_up ();
diff --git a/src/lib/http_server.cc b/src/lib/http_server.cc
new file mode 100644
index 000000000..0ee62756a
--- /dev/null
+++ b/src/lib/http_server.cc
@@ -0,0 +1,255 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "cross.h"
+#include "dcpomatic_log.h"
+#include "dcpomatic_socket.h"
+#include "http_server.h"
+#include "util.h"
+#include "variant.h"
+#include <boost/algorithm/string.hpp>
+#include <stdexcept>
+
+
+using std::make_pair;
+using std::runtime_error;
+using std::shared_ptr;
+using std::string;
+using std::vector;
+
+
+Response Response::ERROR_404 = { 404, "<html><head><title>Error 404</title></head><body><h1>Error 404</h1></body></html>"};
+
+
+HTTPServer::HTTPServer(int port, int timeout)
+ : Server(port, timeout)
+{
+
+}
+
+
+
+Response::Response(int code)
+ : _code(code)
+{
+
+}
+
+
+Response::Response(int code, string payload)
+ : _code(code)
+ , _payload(payload)
+{
+
+}
+
+
+void
+Response::add_header(string key, string value)
+{
+ _headers.push_back(make_pair(key, value));
+}
+
+
+void
+Response::send(shared_ptr<Socket> socket)
+{
+ socket->write(String::compose("HTTP/1.1 %1 OK\r\n", _code));
+ switch (_type) {
+ case Type::HTML:
+ socket->write("Content-Type: text/html; charset=utf-8\r\n");
+ break;
+ case Type::JSON:
+ socket->write("Content-Type: text/json; charset=utf-8\r\n");
+ break;
+ }
+ socket->write(String::compose("Content-Length: %1\r\n", _payload.length()));
+ for (auto const& header: _headers) {
+ socket->write(String::compose("%1: %2\r\n", header.first, header.second));
+ }
+ socket->write("\r\n");
+ socket->write(_payload);
+}
+
+
+Response
+HTTPServer::get(string const& url)
+{
+ if (url == "/") {
+ return Response(200, String::compose(dcp::file_to_string(resources_path() / "web" / "index.html"), variant::dcpomatic_player()));
+ } else if (url == "/api/v1/status") {
+ auto json = string{"{ "};
+ {
+ boost::mutex::scoped_lock lm(_mutex);
+ json += String::compose("\"playing\": %1, ", _playing ? "true" : "false");
+ json += String::compose("\"position\": \"%1\", ", seconds_to_hms(_position.seconds()));
+ json += String::compose("\"dcp_name\": \"%1\"", _dcp_name);
+ }
+ json += " }";
+ auto response = Response(200, json);
+ response.set_type(Response::Type::JSON);
+ return response;
+ } else {
+ LOG_HTTP("404 %1", url);
+ return Response::ERROR_404;
+ }
+}
+
+
+Response
+HTTPServer::post(string const& url)
+{
+ if (url == "/api/v1/play") {
+ emit(boost::bind(boost::ref(Play)));
+ auto response = Response(303);
+ response.add_header("Location", "/");
+ return response;
+ } else if (url == "/api/v1/stop") {
+ emit(boost::bind(boost::ref(Stop)));
+ auto response = Response(303);
+ response.add_header("Location", "/");
+ return response;
+ } else {
+ return Response::ERROR_404;
+ }
+}
+
+
+Response
+HTTPServer::request(vector<string> const& request)
+{
+ vector<string> parts;
+ boost::split(parts, request[0], boost::is_any_of(" "));
+ if (parts.size() != 3) {
+ return Response::ERROR_404;
+ }
+
+ try {
+ if (parts[0] == "GET") {
+ LOG_HTTP("GET %1", parts[1]);
+ return get(parts[1]);
+ } else if (parts[0] == "POST") {
+ LOG_HTTP("POST %1", parts[1]);
+ return post(parts[1]);
+ }
+ } catch (std::exception& e) {
+ LOG_ERROR("Error while handling HTTP request: %1", e.what());
+ } catch (...) {
+ LOG_ERROR_NC("Unknown exception while handling HTTP request");
+ }
+
+ LOG_HTTP("404 %1", parts[0]);
+ return Response::ERROR_404;
+}
+
+
+void
+HTTPServer::handle(shared_ptr<Socket> socket)
+{
+ class Reader
+ {
+ public:
+ void read_block(boost::system::error_code const& ec, uint8_t* data, std::size_t size)
+ {
+ if (ec.value() != boost::system::errc::success) {
+ _close = true;
+ _error_code = ec;
+ return;
+ }
+
+ for (std::size_t i = 0; i < size; ++i) {
+ if (_line.length() >= 1024) {
+ _close = true;
+ return;
+ }
+ _line += data[i];
+ if (_line.length() >= 2 && _line.substr(_line.length() - 2) == "\r\n") {
+ if (_line.length() == 2) {
+ _got_request = true;
+ return;
+ } else if (_request.size() > 64) {
+ _close = true;
+ return;
+ } else if (_line.size() >= 2) {
+ _line = _line.substr(0, _line.length() - 2);
+ }
+ LOG_HTTP("Receive: %1", _line);
+ _request.push_back(_line);
+ _line = "";
+ }
+ }
+ }
+
+
+ bool got_request() const {
+ return _got_request;
+ }
+
+ bool close() const {
+ return _close;
+ }
+
+ boost::system::error_code error_code() const {
+ return _error_code;
+ }
+
+ vector<std::string> const& get() const {
+ return _request;
+ }
+
+ private:
+ std::string _line;
+ vector<std::string> _request;
+ bool _got_request = false;
+ bool _close = false;
+ boost::system::error_code _error_code;
+ };
+
+ while (true) {
+
+ Reader reader;
+
+ vector<uint8_t> buffer(2048);
+ socket->socket().async_read_some(
+ boost::asio::buffer(buffer.data(), buffer.size()),
+ [&reader, &buffer, socket](boost::system::error_code const& ec, std::size_t bytes_transferred) {
+ socket->set_deadline_from_now(1);
+ reader.read_block(ec, buffer.data(), bytes_transferred);
+ });
+
+ while (!reader.got_request() && !reader.close() && socket->is_open()) {
+ socket->run();
+ }
+
+ if (reader.got_request() && !reader.close()) {
+ try {
+ auto response = request(reader.get());
+ response.send(socket);
+ } catch (runtime_error& e) {
+ LOG_ERROR_NC(e.what());
+ }
+ }
+
+ if (reader.close()) {
+ break;
+ }
+ }
+}
diff --git a/src/lib/http_server.h b/src/lib/http_server.h
new file mode 100644
index 000000000..f0ee50ef5
--- /dev/null
+++ b/src/lib/http_server.h
@@ -0,0 +1,91 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcpomatic_time.h"
+#include "server.h"
+#include "signaller.h"
+#include <boost/signals2.hpp>
+
+
+class Response
+{
+public:
+ Response(int code);
+ Response(int code, std::string payload);
+
+ enum class Type {
+ HTML,
+ JSON
+ };
+
+ void add_header(std::string key, std::string value);
+ void set_type(Type type) {
+ _type = type;
+ }
+
+ void send(std::shared_ptr<Socket> socket);
+
+ static Response ERROR_404;
+
+private:
+ int _code;
+
+ Type _type = Type::HTML;
+ std::string _payload;
+ std::vector<std::pair<std::string, std::string>> _headers;
+};
+
+
+class HTTPServer : public Server, public Signaller
+{
+public:
+ explicit HTTPServer(int port, int timeout = 30);
+
+ boost::signals2::signal<void ()> Play;
+ boost::signals2::signal<void ()> Stop;
+
+ void set_playing(bool playing) {
+ boost::mutex::scoped_lock lm(_mutex);
+ _playing = playing;
+ }
+
+ void set_position(dcpomatic::DCPTime position) {
+ boost::mutex::scoped_lock lm(_mutex);
+ _position = position;
+ }
+
+ void set_dcp_name(std::string name) {
+ boost::mutex::scoped_lock lm(_mutex);
+ _dcp_name = name;
+ }
+
+private:
+ void handle(std::shared_ptr<Socket> socket) override;
+ Response request(std::vector<std::string> const& request);
+ Response get(std::string const& url);
+ Response post(std::string const& url);
+
+ boost::mutex _mutex;
+ bool _playing = false;
+ dcpomatic::DCPTime _position;
+ std::string _dcp_name;
+};
+
diff --git a/src/lib/id.cc b/src/lib/id.cc
new file mode 100644
index 000000000..2891fb4ab
--- /dev/null
+++ b/src/lib/id.cc
@@ -0,0 +1,30 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "id.h"
+
+
+bool
+operator==(ID const& a, ID const& b)
+{
+ return a.get() == b.get();
+}
+
diff --git a/src/lib/id.h b/src/lib/id.h
new file mode 100644
index 000000000..ca4721039
--- /dev/null
+++ b/src/lib/id.h
@@ -0,0 +1,48 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_ID_H
+#define DCPOMATIC_ID_H
+
+
+#include <sqlite3.h>
+
+
+class ID
+{
+public:
+ sqlite3_int64 get() const {
+ return _id;
+ }
+
+protected:
+ ID(sqlite3_int64 id)
+ : _id(id) {}
+
+private:
+ sqlite3_int64 _id;
+};
+
+
+bool operator==(ID const& a, ID const& b);
+
+
+#endif
diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc
index 1a92c944e..e7ba88194 100644
--- a/src/lib/image_content.cc
+++ b/src/lib/image_content.cc
@@ -43,6 +43,7 @@ using std::make_shared;
using std::shared_ptr;
using std::string;
using std::vector;
+using boost::optional;
using namespace dcpomatic;
@@ -60,8 +61,8 @@ ImageContent::ImageContent (boost::filesystem::path p)
}
-ImageContent::ImageContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+ImageContent::ImageContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content(node, film_directory)
{
video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
}
@@ -99,13 +100,13 @@ ImageContent::technical_summary () const
void
-ImageContent::as_xml (xmlpp::Node* node, bool with_paths) const
+ImageContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
- node->add_child("Type")->add_child_text ("Image");
- Content::as_xml (node, with_paths);
+ cxml::add_text_child(element, "Type", "Image");
+ Content::as_xml(element, with_paths, path_behaviour, film_directory);
if (video) {
- video->as_xml (node);
+ video->as_xml(element);
}
}
diff --git a/src/lib/image_content.h b/src/lib/image_content.h
index d817eeee8..73ae696ad 100644
--- a/src/lib/image_content.h
+++ b/src/lib/image_content.h
@@ -27,7 +27,7 @@ class ImageContent : public Content
{
public:
ImageContent (boost::filesystem::path);
- ImageContent (cxml::ConstNodePtr, int);
+ ImageContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int);
std::shared_ptr<ImageContent> shared_from_this () {
return std::dynamic_pointer_cast<ImageContent> (Content::shared_from_this ());
@@ -40,7 +40,14 @@ public:
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override;
std::string summary () const override;
std::string technical_summary () const override;
- void as_xml (xmlpp::Node *, bool with_paths) const override;
+
+ void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const override;
+
dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override;
dcpomatic::DCPTime approximate_length () const override;
diff --git a/src/lib/image_decoder.cc b/src/lib/image_decoder.cc
index ce5c8757f..527a98c7d 100644
--- a/src/lib/image_decoder.cc
+++ b/src/lib/image_decoder.cc
@@ -81,7 +81,7 @@ ImageDecoder::pass ()
}
}
- video->emit (film(), _image, _frame_video_position);
+ video->emit(film(), _image, dcpomatic::ContentTime::from_frames(_frame_video_position, _image_content->video_frame_rate().get_value_or(24)));
++_frame_video_position;
return false;
}
diff --git a/src/lib/image_proxy.h b/src/lib/image_proxy.h
index a37be580f..cec13b773 100644
--- a/src/lib/image_proxy.h
+++ b/src/lib/image_proxy.h
@@ -41,7 +41,7 @@ class Image;
class Socket;
namespace xmlpp {
- class Node;
+ class Element;
}
namespace cxml {
@@ -101,7 +101,7 @@ public:
boost::optional<dcp::Size> size = boost::optional<dcp::Size> ()
) const = 0;
- virtual void add_metadata (xmlpp::Node *) const = 0;
+ virtual void add_metadata(xmlpp::Element *) const = 0;
virtual void write_to_socket (std::shared_ptr<Socket>) const = 0;
/** @return true if our image is definitely the same as another, false if it is probably not */
virtual bool same (std::shared_ptr<const ImageProxy>) const = 0;
diff --git a/src/lib/internal_player_server.cc b/src/lib/internal_player_server.cc
new file mode 100644
index 000000000..676cfa412
--- /dev/null
+++ b/src/lib/internal_player_server.cc
@@ -0,0 +1,48 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcpomatic_socket.h"
+#include "internal_player_server.h"
+
+
+using std::shared_ptr;
+using std::string;
+using std::vector;
+
+
+void
+InternalPlayerServer::handle(shared_ptr<Socket> socket)
+{
+ try {
+ uint32_t const length = socket->read_uint32();
+ if (length > 65536) {
+ return;
+ }
+ vector<uint8_t> buffer(length);
+ socket->read(buffer.data(), buffer.size());
+ string s(reinterpret_cast<char*>(buffer.data()));
+ emit(boost::bind(boost::ref(LoadDCP), s));
+ socket->write(reinterpret_cast<uint8_t const *>("OK"), 3);
+ } catch (...) {
+
+ }
+}
+
diff --git a/src/lib/internal_player_server.h b/src/lib/internal_player_server.h
new file mode 100644
index 000000000..0648c9657
--- /dev/null
+++ b/src/lib/internal_player_server.h
@@ -0,0 +1,46 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "config.h"
+#include "server.h"
+#include "signaller.h"
+#include "types.h"
+#include <boost/filesystem.hpp>
+#include <boost/signals2.hpp>
+
+
+/** A server which is always started, that listens for requests from the main
+ * DCP-o-matic to play a DCP.
+ */
+
+class InternalPlayerServer : public Server, public Signaller
+{
+public:
+ InternalPlayerServer()
+ : Server(PLAYER_PLAY_PORT)
+ {}
+
+ boost::signals2::signal<void (boost::filesystem::path)> LoadDCP;
+
+private:
+ void handle(std::shared_ptr<Socket> socket) override;
+};
+
diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc
index 32d2fefc2..0b50bcd5a 100644
--- a/src/lib/j2k_encoder.cc
+++ b/src/lib/j2k_encoder.cc
@@ -32,6 +32,12 @@
#include "encode_server_description.h"
#include "encode_server_finder.h"
#include "film.h"
+#include "cpu_j2k_encoder_thread.h"
+#ifdef DCPOMATIC_GROK
+#include "grok/context.h"
+#include "grok_j2k_encoder_thread.h"
+#endif
+#include "remote_j2k_encoder_thread.h"
#include "j2k_encoder.h"
#include "log.h"
#include "player_video.h"
@@ -44,6 +50,7 @@
using std::cout;
+using std::dynamic_pointer_cast;
using std::exception;
using std::list;
using std::make_shared;
@@ -53,15 +60,47 @@ using boost::optional;
using dcp::Data;
using namespace dcpomatic;
+#ifdef DCPOMATIC_GROK
+
+namespace grk_plugin {
+
+IMessengerLogger* sLogger = nullptr;
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-function"
+#endif
+void setMessengerLogger(grk_plugin::IMessengerLogger* logger)
+{
+ delete sLogger;
+ sLogger = logger;
+}
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+grk_plugin::IMessengerLogger* getMessengerLogger(void)
+{
+ return sLogger;
+}
+
+}
+
+#endif
+
/** @param film Film that we are encoding.
* @param writer Writer that we are using.
*/
J2KEncoder::J2KEncoder(shared_ptr<const Film> film, Writer& writer)
- : _film (film)
- , _history (200)
- , _writer (writer)
+ : VideoEncoder(film, writer)
{
+#ifdef DCPOMATIC_GROK
+ auto grok = Config::instance()->grok().get_value_or({});
+ _dcpomatic_context = new grk_plugin::DcpomaticContext(film, writer, _history, grok.binary_location);
+ if (grok.enable) {
+ _context = new grk_plugin::GrokContext(_dcpomatic_context);
+ }
+#endif
}
@@ -79,8 +118,29 @@ J2KEncoder::~J2KEncoder ()
*/
_writer.zombify();
- boost::mutex::scoped_lock lm (_threads_mutex);
- terminate_threads ();
+ terminate_threads();
+
+#ifdef DCPOMATIC_GROK
+ delete _context;
+ delete _dcpomatic_context;
+#endif
+}
+
+
+void
+J2KEncoder::servers_list_changed()
+{
+ auto config = Config::instance();
+#ifdef DCPOMATIC_GROK
+ auto const grok_enable = config->grok().get_value_or({}).enable;
+#else
+ auto const grok_enable = false;
+#endif
+
+ auto const cpu = (grok_enable || config->only_servers_encode()) ? 0 : config->master_encoding_threads();
+ auto const gpu = grok_enable ? config->master_encoding_threads() : 0;
+
+ remake_threads(cpu, gpu, EncodeServerFinder::instance()->servers());
}
@@ -95,7 +155,42 @@ J2KEncoder::begin ()
void
-J2KEncoder::end ()
+J2KEncoder::pause()
+{
+#ifdef DCPOMATIC_GROK
+ if (!Config::instance()->grok().get_value_or({}).enable) {
+ return;
+ }
+ return;
+
+ /* XXX; the same problem may occur here as in the destructor, perhaps? */
+
+ terminate_threads ();
+
+ /* Something might have been thrown during terminate_threads */
+ rethrow ();
+
+ delete _context;
+ _context = nullptr;
+#endif
+}
+
+
+void J2KEncoder::resume()
+{
+#ifdef DCPOMATIC_GROK
+ if (!Config::instance()->grok().get_value_or({}).enable) {
+ return;
+ }
+
+ _context = new grk_plugin::GrokContext(_dcpomatic_context);
+ servers_list_changed();
+#endif
+}
+
+
+void
+J2KEncoder::end()
{
boost::mutex::scoped_lock lock (_queue_mutex);
@@ -104,18 +199,13 @@ J2KEncoder::end ()
/* Keep waking workers until the queue is empty */
while (!_queue.empty ()) {
rethrow ();
- _empty_condition.notify_all ();
_full_condition.wait (lock);
}
-
lock.unlock ();
LOG_GENERAL_NC (N_("Terminating encoder threads"));
- {
- boost::mutex::scoped_lock lm (_threads_mutex);
- terminate_threads ();
- }
+ terminate_threads ();
/* Something might have been thrown during terminate_threads */
rethrow ();
@@ -130,42 +220,35 @@ J2KEncoder::end ()
So just mop up anything left in the queue here.
*/
-
- for (auto const& i: _queue) {
- LOG_GENERAL(N_("Encode left-over frame %1"), i.index());
- try {
- _writer.write(
- make_shared<dcp::ArrayData>(i.encode_locally()),
- i.index(),
- i.eyes()
- );
- frame_done ();
- } catch (std::exception& e) {
- LOG_ERROR (N_("Local encode failed (%1)"), e.what ());
+ for (auto & i: _queue) {
+#ifdef DCPOMATIC_GROK
+ if (Config::instance()->grok().get_value_or({}).enable) {
+ if (!_context->scheduleCompress(i)){
+ LOG_GENERAL (N_("[%1] J2KEncoder thread pushes frame %2 back onto queue after failure"), thread_id(), i.index());
+ // handle error
+ }
+ } else {
+#else
+ {
+#endif
+ LOG_GENERAL(N_("Encode left-over frame %1"), i.index());
+ try {
+ _writer.write(
+ make_shared<dcp::ArrayData>(i.encode_locally()),
+ i.index(),
+ i.eyes()
+ );
+ frame_done ();
+ } catch (std::exception& e) {
+ LOG_ERROR (N_("Local encode failed (%1)"), e.what ());
+ }
}
}
-}
-
-/** @return an estimate of the current number of frames we are encoding per second,
- * if known.
- */
-optional<float>
-J2KEncoder::current_encoding_rate () const
-{
- return _history.rate ();
-}
-
-
-/** @return Number of video frames that have been queued for encoding */
-int
-J2KEncoder::video_frames_enqueued () const
-{
- if (!_last_player_video_time) {
- return 0;
- }
-
- return _last_player_video_time->frames_floor (_film->video_frame_rate ());
+#ifdef DCPOMATIC_GROK
+ delete _context;
+ _context = nullptr;
+#endif
}
@@ -188,12 +271,14 @@ J2KEncoder::frame_done ()
void
J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
{
+ VideoEncoder::encode(pv, time);
+
_waker.nudge ();
size_t threads = 0;
{
boost::mutex::scoped_lock lm (_threads_mutex);
- threads = _threads->size();
+ threads = _threads.size();
}
boost::mutex::scoped_lock queue_lock (_queue_mutex);
@@ -233,13 +318,14 @@ J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
LOG_DEBUG_ENCODE("Frame @ %1 ENCODE", to_string(time));
/* Queue this new frame for encoding */
LOG_TIMING ("add-frame-to-queue queue=%1", _queue.size ());
- _queue.push_back (DCPVideo(
+ auto dcpv = DCPVideo(
pv,
position,
_film->video_frame_rate(),
- _film->j2k_bandwidth(),
+ _film->video_bit_rate(VideoEncoding::JPEG2000),
_film->resolution()
- ));
+ );
+ _queue.push_back (dcpv);
/* The queue might not be empty any more, so notify anything which is
waiting on that.
@@ -248,174 +334,144 @@ J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
}
_last_player_video[pv->eyes()] = pv;
- _last_player_video_time = time;
}
-/** Caller must hold a lock on _threads_mutex */
void
J2KEncoder::terminate_threads ()
{
+ boost::mutex::scoped_lock lm(_threads_mutex);
boost::this_thread::disable_interruption dis;
- if (!_threads) {
- return;
- }
-
- _threads->interrupt_all ();
- try {
- _threads->join_all ();
- } catch (exception& e) {
- LOG_ERROR ("join() threw an exception: %1", e.what());
- } catch (...) {
- LOG_ERROR_NC ("join() threw an exception");
+ for (auto& thread: _threads) {
+ thread->stop();
}
- _threads.reset ();
+ _threads.clear();
+ _ending = true;
}
void
-J2KEncoder::encoder_thread (optional<EncodeServerDescription> server)
-try
+J2KEncoder::remake_threads(int cpu, int gpu, list<EncodeServerDescription> servers)
{
- start_of_thread ("J2KEncoder");
+ LOG_GENERAL("Making threads: CPU=%1, GPU=%2, Remote=%3", cpu, gpu, servers.size());
- if (server) {
- LOG_TIMING ("start-encoder-thread thread=%1 server=%2", thread_id (), server->host_name ());
- } else {
- LOG_TIMING ("start-encoder-thread thread=%1 server=localhost", thread_id ());
+ boost::mutex::scoped_lock lm (_threads_mutex);
+ if (_ending) {
+ return;
}
- /* Number of seconds that we currently wait between attempts
- to connect to the server; not relevant for localhost
- encodings.
- */
- int remote_backoff = 0;
+ auto remove_threads = [this](int wanted, int current, std::function<bool (shared_ptr<J2KEncoderThread>)> predicate) {
+ for (auto i = wanted; i < current; ++i) {
+ auto iter = std::find_if(_threads.begin(), _threads.end(), predicate);
+ if (iter != _threads.end()) {
+ (*iter)->stop();
+ _threads.erase(iter);
+ }
+ }
+ };
+
+
+ /* CPU */
+
+ auto const is_cpu_thread = [](shared_ptr<J2KEncoderThread> thread) {
+ return static_cast<bool>(dynamic_pointer_cast<CPUJ2KEncoderThread>(thread));
+ };
+
+ auto const current_cpu_threads = std::count_if(_threads.begin(), _threads.end(), is_cpu_thread);
+
+ for (auto i = current_cpu_threads; i < cpu; ++i) {
+ auto thread = make_shared<CPUJ2KEncoderThread>(*this);
+ thread->start();
+ _threads.push_back(thread);
+ }
+
+ remove_threads(cpu, current_cpu_threads, is_cpu_thread);
+
+#ifdef DCPOMATIC_GROK
+ /* GPU */
+
+ auto const is_grok_thread = [](shared_ptr<J2KEncoderThread> thread) {
+ return static_cast<bool>(dynamic_pointer_cast<GrokJ2KEncoderThread>(thread));
+ };
+
+ auto const current_gpu_threads = std::count_if(_threads.begin(), _threads.end(), is_grok_thread);
+
+ for (auto i = current_gpu_threads; i < gpu; ++i) {
+ auto thread = make_shared<GrokJ2KEncoderThread>(*this, _context);
+ thread->start();
+ _threads.push_back(thread);
+ }
+
+ remove_threads(gpu, current_gpu_threads, is_grok_thread);
+#endif
- while (true) {
+ /* Remote */
- LOG_TIMING ("encoder-sleep thread=%1", thread_id ());
- boost::mutex::scoped_lock lock (_queue_mutex);
- while (_queue.empty ()) {
- _empty_condition.wait (lock);
+ for (auto const& server: servers) {
+ if (!server.current_link_version()) {
+ continue;
}
- LOG_TIMING ("encoder-wake thread=%1 queue=%2", thread_id(), _queue.size());
- auto vf = _queue.front ();
+ auto is_remote_thread = [server](shared_ptr<J2KEncoderThread> thread) {
+ auto remote = dynamic_pointer_cast<RemoteJ2KEncoderThread>(thread);
+ return remote && remote->server().host_name() == server.host_name();
+ };
- /* We're about to commit to either encoding this frame or putting it back onto the queue,
- so we must not be interrupted until one or other of these things have happened. This
- block has thread interruption disabled.
- */
- {
- boost::this_thread::disable_interruption dis;
-
- LOG_TIMING ("encoder-pop thread=%1 frame=%2 eyes=%3", thread_id(), vf.index(), static_cast<int>(vf.eyes()));
- _queue.pop_front ();
-
- lock.unlock ();
-
- shared_ptr<Data> encoded;
-
- /* We need to encode this input */
- if (server) {
- try {
- encoded = make_shared<dcp::ArrayData>(vf.encode_remotely(server.get()));
-
- if (remote_backoff > 0) {
- LOG_GENERAL ("%1 was lost, but now she is found; removing backoff", server->host_name ());
- }
-
- /* This job succeeded, so remove any backoff */
- remote_backoff = 0;
-
- } catch (std::exception& e) {
- if (remote_backoff < 60) {
- /* back off more */
- remote_backoff += 10;
- }
- LOG_ERROR (
- N_("Remote encode of %1 on %2 failed (%3); thread sleeping for %4s"),
- vf.index(), server->host_name(), e.what(), remote_backoff
- );
- }
-
- } else {
- try {
- LOG_TIMING ("start-local-encode thread=%1 frame=%2", thread_id(), vf.index());
- encoded = make_shared<dcp::ArrayData>(vf.encode_locally());
- LOG_TIMING ("finish-local-encode thread=%1 frame=%2", thread_id(), vf.index());
- } catch (std::exception& e) {
- /* This is very bad, so don't cope with it, just pass it on */
- LOG_ERROR (N_("Local encode failed (%1)"), e.what ());
- throw;
- }
- }
+ auto const current_threads = std::count_if(_threads.begin(), _threads.end(), is_remote_thread);
- if (encoded) {
- _writer.write(encoded, vf.index(), vf.eyes());
- frame_done ();
- } else {
- lock.lock ();
- LOG_GENERAL (N_("[%1] J2KEncoder thread pushes frame %2 back onto queue after failure"), thread_id(), vf.index());
- _queue.push_front (vf);
- lock.unlock ();
- }
+ auto const wanted_threads = server.threads();
+
+ if (wanted_threads > current_threads) {
+ LOG_GENERAL(N_("Adding %1 worker threads for remote %2"), wanted_threads - current_threads, server.host_name());
+ } else if (wanted_threads < current_threads) {
+ LOG_GENERAL(N_("Removing %1 worker threads for remote %2"), current_threads - wanted_threads, server.host_name());
}
- if (remote_backoff > 0) {
- boost::this_thread::sleep (boost::posix_time::seconds (remote_backoff));
+ for (auto i = current_threads; i < wanted_threads; ++i) {
+ auto thread = make_shared<RemoteJ2KEncoderThread>(*this, server);
+ thread->start();
+ _threads.push_back(thread);
}
- /* The queue might not be full any more, so notify anything that is waiting on that */
- lock.lock ();
- _full_condition.notify_all ();
+ remove_threads(wanted_threads, current_threads, is_remote_thread);
}
-}
-catch (boost::thread_interrupted& e) {
- /* Ignore these and just stop the thread */
- _full_condition.notify_all ();
-}
-catch (...)
-{
- store_current ();
- /* Wake anything waiting on _full_condition so it can see the exception */
- _full_condition.notify_all ();
+
+ _writer.set_encoder_threads(_threads.size());
}
-void
-J2KEncoder::servers_list_changed ()
+DCPVideo
+J2KEncoder::pop()
{
- boost::mutex::scoped_lock lm (_threads_mutex);
+ boost::mutex::scoped_lock lock(_queue_mutex);
+ while (_queue.empty()) {
+ _empty_condition.wait (lock);
+ }
- terminate_threads ();
- _threads = make_shared<boost::thread_group>();
+ LOG_TIMING("encoder-wake thread=%1 queue=%2", thread_id(), _queue.size());
- /* XXX: could re-use threads */
+ auto vf = _queue.front();
+ _queue.pop_front();
- if (!Config::instance()->only_servers_encode ()) {
- for (int i = 0; i < Config::instance()->master_encoding_threads (); ++i) {
-#ifdef DCPOMATIC_LINUX
- auto t = _threads->create_thread(boost::bind(&J2KEncoder::encoder_thread, this, optional<EncodeServerDescription>()));
- pthread_setname_np (t->native_handle(), "encode-worker");
-#else
- _threads->create_thread(boost::bind(&J2KEncoder::encoder_thread, this, optional<EncodeServerDescription>()));
-#endif
- }
- }
+ _full_condition.notify_all();
+ return vf;
+}
- for (auto i: EncodeServerFinder::instance()->servers()) {
- if (!i.current_link_version()) {
- continue;
- }
- LOG_GENERAL (N_("Adding %1 worker threads for remote %2"), i.threads(), i.host_name ());
- for (int j = 0; j < i.threads(); ++j) {
- _threads->create_thread(boost::bind(&J2KEncoder::encoder_thread, this, i));
- }
- }
+void
+J2KEncoder::retry(DCPVideo video)
+{
+ boost::mutex::scoped_lock lock(_queue_mutex);
+ _queue.push_front(video);
+ _empty_condition.notify_all();
+}
+
- _writer.set_encoder_threads(_threads->size());
+void
+J2KEncoder::write(shared_ptr<const dcp::Data> data, int index, Eyes eyes)
+{
+ _writer.write(data, index, eyes);
+ frame_done();
}
diff --git a/src/lib/j2k_encoder.h b/src/lib/j2k_encoder.h
index 63228a6b8..c72a1debe 100644
--- a/src/lib/j2k_encoder.h
+++ b/src/lib/j2k_encoder.h
@@ -32,7 +32,9 @@
#include "enum_indexed_vector.h"
#include "event_history.h"
#include "exception_store.h"
+#include "j2k_encoder_thread.h"
#include "writer.h"
+#include "video_encoder.h"
#include <boost/optional.hpp>
#include <boost/signals2.hpp>
#include <boost/thread.hpp>
@@ -48,6 +50,15 @@ class Film;
class Job;
class PlayerVideo;
+namespace grk_plugin {
+ struct DcpomaticContext;
+ struct GrokContext;
+}
+
+struct local_threads_created_and_destroyed;
+struct remote_threads_created_and_destroyed;
+struct frames_not_lost_when_threads_disappear;
+
/** @class J2KEncoder
* @brief Class to manage encoding to J2K.
@@ -55,7 +66,7 @@ class PlayerVideo;
* This class keeps a queue of frames to be encoded and distributes
* the work around threads and encoding servers.
*/
-class J2KEncoder : public ExceptionStore
+class J2KEncoder : public VideoEncoder, public ExceptionStore
{
public:
J2KEncoder(std::shared_ptr<const Film> film, Writer& writer);
@@ -65,33 +76,33 @@ public:
J2KEncoder& operator= (J2KEncoder const&) = delete;
/** Called to indicate that a processing run is about to begin */
- void begin ();
+ void begin() override;
/** Called to pass a bit of video to be encoded as the next DCP frame */
- void encode (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time);
+ void encode (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time) override;
- /** Called when a processing run has finished */
- void end ();
+ void pause() override;
+ void resume() override;
- boost::optional<float> current_encoding_rate () const;
- int video_frames_enqueued () const;
+ /** Called when a processing run has finished */
+ void end() override;
- void servers_list_changed ();
+ DCPVideo pop();
+ void retry(DCPVideo frame);
+ void write(std::shared_ptr<const dcp::Data> data, int index, Eyes eyes);
private:
+ friend struct ::local_threads_created_and_destroyed;
+ friend struct ::remote_threads_created_and_destroyed;
+ friend struct ::frames_not_lost_when_threads_disappear;
void frame_done ();
-
- void encoder_thread (boost::optional<EncodeServerDescription>);
+ void servers_list_changed ();
+ void remake_threads(int cpu, int gpu, std::list<EncodeServerDescription> servers);
void terminate_threads ();
- /** Film that we are encoding */
- std::shared_ptr<const Film> _film;
-
- EventHistory _history;
-
boost::mutex _threads_mutex;
- std::shared_ptr<boost::thread_group> _threads;
+ std::vector<std::shared_ptr<J2KEncoderThread>> _threads;
mutable boost::mutex _queue_mutex;
std::list<DCPVideo> _queue;
@@ -100,13 +111,18 @@ private:
/** condition to manage thread wakeups when we have too much to do */
boost::condition _full_condition;
- Writer& _writer;
Waker _waker;
EnumIndexedVector<std::shared_ptr<PlayerVideo>, Eyes> _last_player_video;
- boost::optional<dcpomatic::DCPTime> _last_player_video_time;
boost::signals2::scoped_connection _server_found_connection;
+
+#ifdef DCPOMATIC_GROK
+ grk_plugin::DcpomaticContext* _dcpomatic_context = nullptr;
+ grk_plugin::GrokContext *_context = nullptr;
+#endif
+
+ bool _ending = false;
};
diff --git a/src/lib/j2k_encoder_thread.cc b/src/lib/j2k_encoder_thread.cc
new file mode 100644
index 000000000..d0e8a439c
--- /dev/null
+++ b/src/lib/j2k_encoder_thread.cc
@@ -0,0 +1,58 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcp_video.h"
+#include "dcpomatic_log.h"
+#include "j2k_encoder.h"
+#include "j2k_encoder_thread.h"
+
+
+J2KEncoderThread::J2KEncoderThread(J2KEncoder& encoder)
+ : _encoder(encoder)
+{
+
+}
+
+
+void
+J2KEncoderThread::start()
+{
+ _thread = boost::thread(boost::bind(&J2KEncoderThread::run, this));
+#ifdef DCPOMATIC_LINUX
+ pthread_setname_np(_thread.native_handle(), "encode-worker");
+#endif
+}
+
+
+void
+J2KEncoderThread::stop()
+{
+ _thread.interrupt();
+ try {
+ _thread.join();
+ } catch (std::exception& e) {
+ LOG_ERROR("join() threw an exception: %1", e.what());
+ } catch (...) {
+ LOG_ERROR_NC("join() threw an exception");
+ }
+}
+
+
diff --git a/src/lib/j2k_encoder_thread.h b/src/lib/j2k_encoder_thread.h
new file mode 100644
index 000000000..b03b6f356
--- /dev/null
+++ b/src/lib/j2k_encoder_thread.h
@@ -0,0 +1,53 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_J2K_ENCODER_THREAD
+#define DCPOMATIC_J2K_ENCODER_THREAD
+
+
+#include <boost/thread.hpp>
+
+
+class J2KEncoder;
+
+
+class J2KEncoderThread
+{
+public:
+ J2KEncoderThread(J2KEncoder& encoder);
+
+ J2KEncoderThread(J2KEncoderThread const&) = delete;
+ J2KEncoderThread& operator=(J2KEncoderThread const&) = delete;
+
+ void start();
+ void stop();
+
+ virtual void run() = 0;
+
+protected:
+ J2KEncoder& _encoder;
+
+private:
+ boost::thread _thread;
+};
+
+
+#endif
diff --git a/src/lib/j2k_image_proxy.cc b/src/lib/j2k_image_proxy.cc
index 269b01bca..023723c8b 100644
--- a/src/lib/j2k_image_proxy.cc
+++ b/src/lib/j2k_image_proxy.cc
@@ -25,11 +25,11 @@
#include "j2k_image_proxy.h"
#include <dcp/colour_conversion.h>
#include <dcp/j2k_transcode.h>
-#include <dcp/mono_picture_frame.h>
+#include <dcp/mono_j2k_picture_frame.h>
#include <dcp/openjpeg_image.h>
#include <dcp/raw_convert.h>
#include <dcp/rgb_xyz.h>
-#include <dcp/stereo_picture_frame.h>
+#include <dcp/stereo_j2k_picture_frame.h>
#include <dcp/warnings.h>
#include <libcxml/cxml.h>
LIBDCP_DISABLE_WARNINGS
@@ -64,7 +64,7 @@ J2KImageProxy::J2KImageProxy (boost::filesystem::path path, dcp::Size size, AVPi
J2KImageProxy::J2KImageProxy (
- shared_ptr<const dcp::MonoPictureFrame> frame,
+ shared_ptr<const dcp::MonoJ2KPictureFrame> frame,
dcp::Size size,
AVPixelFormat pixel_format,
optional<int> forced_reduction
@@ -81,7 +81,7 @@ J2KImageProxy::J2KImageProxy (
J2KImageProxy::J2KImageProxy (
- shared_ptr<const dcp::StereoPictureFrame> frame,
+ shared_ptr<const dcp::StereoJ2KPictureFrame> frame,
dcp::Size size,
dcp::Eye eye,
AVPixelFormat pixel_format,
@@ -192,15 +192,15 @@ J2KImageProxy::image (Image::Alignment alignment, optional<dcp::Size> target_siz
void
-J2KImageProxy::add_metadata (xmlpp::Node* node) const
+J2KImageProxy::add_metadata(xmlpp::Element* element) const
{
- node->add_child("Type")->add_child_text(N_("J2K"));
- node->add_child("Width")->add_child_text(raw_convert<string>(_size.width));
- node->add_child("Height")->add_child_text(raw_convert<string>(_size.height));
+ cxml::add_text_child(element, "Type", N_("J2K"));
+ cxml::add_text_child(element, "Width", raw_convert<string>(_size.width));
+ cxml::add_text_child(element, "Height", raw_convert<string>(_size.height));
if (_eye) {
- node->add_child("Eye")->add_child_text(raw_convert<string>(static_cast<int>(_eye.get())));
+ cxml::add_text_child(element, "Eye", raw_convert<string>(static_cast<int>(_eye.get())));
}
- node->add_child("Size")->add_child_text(raw_convert<string>(_data->size()));
+ cxml::add_text_child(element, "Size", raw_convert<string>(_data->size()));
}
diff --git a/src/lib/j2k_image_proxy.h b/src/lib/j2k_image_proxy.h
index 9666ea406..1d2d5cc21 100644
--- a/src/lib/j2k_image_proxy.h
+++ b/src/lib/j2k_image_proxy.h
@@ -26,8 +26,8 @@
namespace dcp {
- class MonoPictureFrame;
- class StereoPictureFrame;
+ class MonoJ2KPictureFrame;
+ class StereoJ2KPictureFrame;
}
@@ -37,14 +37,14 @@ public:
J2KImageProxy (boost::filesystem::path path, dcp::Size, AVPixelFormat pixel_format);
J2KImageProxy (
- std::shared_ptr<const dcp::MonoPictureFrame> frame,
+ std::shared_ptr<const dcp::MonoJ2KPictureFrame> frame,
dcp::Size,
AVPixelFormat pixel_format,
boost::optional<int> forced_reduction
);
J2KImageProxy (
- std::shared_ptr<const dcp::StereoPictureFrame> frame,
+ std::shared_ptr<const dcp::StereoJ2KPictureFrame> frame,
dcp::Size,
dcp::Eye,
AVPixelFormat pixel_format,
@@ -61,7 +61,7 @@ public:
boost::optional<dcp::Size> size = boost::optional<dcp::Size> ()
) const override;
- void add_metadata (xmlpp::Node *) const override;
+ void add_metadata(xmlpp::Element*) const override;
void write_to_socket (std::shared_ptr<Socket> override) const override;
/** @return true if our image is definitely the same as another, false if it is probably not */
bool same (std::shared_ptr<const ImageProxy>) const override;
diff --git a/src/lib/j2k_sync_encoder_thread.cc b/src/lib/j2k_sync_encoder_thread.cc
new file mode 100644
index 000000000..ef6834f60
--- /dev/null
+++ b/src/lib/j2k_sync_encoder_thread.cc
@@ -0,0 +1,65 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcp_video.h"
+#include "dcpomatic_log.h"
+#include "j2k_encoder.h"
+#include "j2k_sync_encoder_thread.h"
+#include <dcp/scope_guard.h>
+
+
+J2KSyncEncoderThread::J2KSyncEncoderThread(J2KEncoder& encoder)
+ : J2KEncoderThread(encoder)
+{
+
+}
+
+
+void
+J2KSyncEncoderThread::run()
+try
+{
+ log_thread_start();
+
+ while (true) {
+ LOG_TIMING("encoder-sleep thread=%1", thread_id());
+ auto frame = _encoder.pop();
+
+ dcp::ScopeGuard frame_guard([this, &frame]() {
+ boost::this_thread::disable_interruption dis;
+ _encoder.retry(frame);
+ });
+
+ LOG_TIMING("encoder-pop thread=%1 frame=%2 eyes=%3", thread_id(), frame.index(), static_cast<int>(frame.eyes()));
+
+ auto encoded = encode(frame);
+
+ if (encoded) {
+ boost::this_thread::disable_interruption dis;
+ frame_guard.cancel();
+ _encoder.write(encoded, frame.index(), frame.eyes());
+ }
+ }
+} catch (boost::thread_interrupted& e) {
+} catch (...) {
+ store_current();
+}
+
diff --git a/src/lib/j2k_sync_encoder_thread.h b/src/lib/j2k_sync_encoder_thread.h
new file mode 100644
index 000000000..45222279e
--- /dev/null
+++ b/src/lib/j2k_sync_encoder_thread.h
@@ -0,0 +1,32 @@
+#ifndef DCPOMATIC_J2K_SYNC_ENCODER_THREAD_H
+#define DCPOMATIC_J2K_SYNC_ENCODER_THREAD_H
+
+
+#include "exception_store.h"
+#include "j2k_encoder_thread.h"
+#include <dcp/array_data.h>
+#include <boost/thread.hpp>
+
+
+class DCPVideo;
+class J2KEncoder;
+
+
+class J2KSyncEncoderThread : public J2KEncoderThread, public ExceptionStore
+{
+public:
+ J2KSyncEncoderThread(J2KEncoder& encoder);
+
+ J2KSyncEncoderThread(J2KSyncEncoderThread const&) = delete;
+ J2KSyncEncoderThread& operator=(J2KSyncEncoderThread const&) = delete;
+
+ virtual ~J2KSyncEncoderThread() {}
+
+ void run() override;
+
+ virtual void log_thread_start() const = 0;
+ virtual std::shared_ptr<dcp::ArrayData> encode(DCPVideo const& frame) = 0;
+};
+
+
+#endif
diff --git a/src/lib/job.cc b/src/lib/job.cc
index 9c9530b7a..ee6ad4e70 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -33,6 +33,7 @@
#include "job.h"
#include "log.h"
#include "util.h"
+#include "variant.h"
#include <dcp/exceptions.h>
#include <sub/exceptions.h>
#include <boost/date_time/posix_time/posix_time.hpp>
@@ -137,9 +138,13 @@ Job::run_wrapper ()
/* 32-bit */
set_error (
_("Failed to encode the DCP."),
- _("This error has probably occurred because you are running the 32-bit version of DCP-o-matic and "
- "trying to use too many encoding threads. Please reduce the 'number of threads DCP-o-matic should "
- "use' in the General tab of Preferences and try again.")
+ String::compose(
+ _("This error has probably occurred because you are running the 32-bit version of %1 and "
+ "trying to use too many encoding threads. Please reduce the 'number of threads %2 should "
+ "use' in the General tab of Preferences and try again."),
+ variant::dcpomatic(),
+ variant::dcpomatic()
+ )
);
done = true;
#else
@@ -147,7 +152,12 @@ Job::run_wrapper ()
if (running_32_on_64()) {
set_error (
_("Failed to encode the DCP."),
- _("This error has probably occurred because you are running the 32-bit version of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and try again.")
+ String::compose(
+ _("This error has probably occurred because you are running the 32-bit version of %1. "
+ "Please re-install %2 with the 64-bit installer and try again."),
+ variant::dcpomatic(),
+ variant::dcpomatic()
+ )
);
done = true;
}
@@ -157,7 +167,7 @@ Job::run_wrapper ()
if (!done) {
set_error (
e.what (),
- string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM
+ String::compose(_("It is not known what caused this error. %1"), report_problem())
);
}
@@ -168,8 +178,8 @@ Job::run_wrapper ()
set_error (
String::compose (_("Could not open %1"), e.file().string()),
- String::compose (
- _("DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or is in an unexpected format."),
+ String::compose(_("%1 could not open the file %2 (%3). Perhaps it does not exist or is in an unexpected format."),
+ variant::dcpomatic(),
dcp::filesystem::absolute(e.file()).string(),
e.what()
)
@@ -183,8 +193,8 @@ Job::run_wrapper ()
if (e.code() == boost::system::errc::no_such_file_or_directory) {
set_error (
String::compose (_("Could not open %1"), e.path1().string ()),
- String::compose (
- _("DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or is in an unexpected format."),
+ String::compose(_("%1 could not open the file %2 (%3). Perhaps it does not exist or is in an unexpected format."),
+ variant::dcpomatic(),
dcp::filesystem::absolute(e.path1()).string(),
e.what()
)
@@ -192,7 +202,7 @@ Job::run_wrapper ()
} else {
set_error (
e.what (),
- string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM
+ String::compose(_("It is not known what caused this error. %1"), report_problem())
);
}
@@ -252,7 +262,7 @@ Job::run_wrapper ()
set_error (
e.what (),
- string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM
+ String::compose(_("It is not known what caused this error. %1"), report_problem())
);
set_progress (1);
@@ -262,7 +272,7 @@ Job::run_wrapper ()
set_error (
_("Unknown error"),
- string (_("It is not known what caused this error.")) + " " + REPORT_PROBLEM
+ String::compose(_("It is not known what caused this error. %1"), report_problem())
);
set_progress (1);
@@ -662,7 +672,7 @@ void
Job::cancel ()
{
if (_thread.joinable()) {
- resume();
+ Job::resume();
_thread.interrupt ();
_thread.join ();
@@ -689,6 +699,7 @@ Job::pause_by_user ()
}
if (paused) {
+ pause();
_pause_changed.notify_all ();
}
@@ -701,6 +712,7 @@ Job::pause_by_priority ()
{
if (running ()) {
set_state (PAUSED_BY_PRIORITY);
+ pause();
_pause_changed.notify_all ();
}
}
diff --git a/src/lib/job.h b/src/lib/job.h
index d4d0f9510..9b5fdfa6e 100644
--- a/src/lib/job.h
+++ b/src/lib/job.h
@@ -62,9 +62,10 @@ public:
}
void start ();
+ virtual void pause() {}
bool pause_by_user ();
void pause_by_priority ();
- void resume ();
+ virtual void resume ();
void cancel ();
bool is_new () const;
diff --git a/src/lib/kdm_cli.cc b/src/lib/kdm_cli.cc
index bba8fb7c0..20cbf33e6 100644
--- a/src/lib/kdm_cli.cc
+++ b/src/lib/kdm_cli.cc
@@ -25,6 +25,7 @@
#include "cinema.h"
+#include "cinema_list.h"
#include "cross.h"
#include "config.h"
#include "dkdm_wrapper.h"
@@ -33,6 +34,7 @@
#include "film.h"
#include "kdm_with_metadata.h"
#include "screen.h"
+#include "variant.h"
#include <dcp/certificate.h>
#include <dcp/decrypted_kdm.h>
#include <dcp/encrypted_kdm.h>
@@ -44,6 +46,7 @@
using std::dynamic_pointer_cast;
using std::list;
using std::make_shared;
+using std::pair;
using std::runtime_error;
using std::shared_ptr;
using std::string;
@@ -59,13 +62,19 @@ using namespace dcpomatic;
static void
help (std::function<void (string)> out)
{
- out (String::compose("Syntax: %1 [OPTION] <FILM|CPL-ID|DKDM>", program_name));
+ out (String::compose("Syntax: %1 [OPTION] [COMMAND] <FILM|CPL-ID|DKDM>", program_name));
+ out ("Commands:");
+ out ("create create KDMs; default if no other command is specified");
+ out (variant::insert_dcpomatic("list-cinemas list known cinemas from %1 settings"));
+ out (variant::insert_dcpomatic("list-dkdm-cpls list CPLs for which %1 has DKDMs"));
+ out (variant::insert_dcpomatic("add-dkdm add DKDM to %1's list"));
+ out (variant::insert_dcpomatic("dump-decryption-certificate write the %1 KDM decryption certificate to the console"));
out (" -h, --help show this help");
out (" -o, --output <path> output file or directory");
out (" -K, --filename-format <format> filename format for KDMs");
out (" -Z, --container-name-format <format> filename format for ZIP containers");
- out (" -f, --valid-from <time> valid from time (in local time zone of the cinema) (e.g. \"2013-09-28 01:41:51\") or \"now\"");
- out (" -t, --valid-to <time> valid to time (in local time zone of the cinema) (e.g. \"2014-09-28 01:41:51\")");
+ out (" -f, --valid-from <time> valid from time (e.g. \"2013-09-28T01:41:51+04:00\", \"2018-01-01T12:00:30\") or \"now\"");
+ out (" -t, --valid-to <time> valid to time (e.g. \"2014-09-28T01:41:51\")");
out (" -d, --valid-duration <duration> valid duration (e.g. \"1 day\", \"4 hours\", \"2 weeks\")");
out (" -F, --formulation <formulation> modified-transitional-1, multiple-modified-transitional-1, dci-any or dci-specific [default modified-transitional-1]");
out (" -p, --disable-forensic-marking-picture disable forensic marking of pictures essences");
@@ -75,19 +84,18 @@ help (std::function<void (string)> out)
out (" -v, --verbose be verbose");
out (" -c, --cinema <name|email> cinema name (when using -C) or name/email (to filter cinemas)");
out (" -S, --screen <name> screen name (when using -C) or screen name (to filter screens when using -c)");
- out (" -C, --certificate <file> file containing projector certificate");
- out (" -T, --trusted-device <file> file containing a trusted device's certificate");
+ out (" -C, --projector-certificate <file> file containing projector certificate");
+ out (" -T, --trusted-device-certificate <file> file containing a trusted device's certificate");
+ out (" --decryption-key <file> file containing the private key which can decrypt the given DKDM");
+ out (variant::insert_dcpomatic(" (%1's configured private key will be used otherwise)"));
out (" --cinemas-file <file> use the given file as a list of cinemas instead of the current configuration");
- out (" --dump-decryption-certificate write the DCP-o-matic KDM decryption certificate to the console");
- out (" --list-cinemas list known cinemas from the DCP-o-matic settings");
- out (" --list-dkdm-cpls list CPLs for which DCP-o-matic has DKDMs");
out ("");
- out ("CPL-ID must be the ID of a CPL that is mentioned in DCP-o-matic's DKDM list.");
+ out (variant::insert_dcpomatic("CPL-ID must be the ID of a CPL that is mentioned in %1's DKDM list."));
out ("");
out ("For example:");
out ("");
out ("Create KDMs for my_great_movie to play in all of Fred's Cinema's screens for the next two weeks and zip them up.");
- out ("(Fred's Cinema must have been set up in DCP-o-matic's KDM window)");
+ out (variant::insert_dcpomatic("(Fred's Cinema must have been set up in %1's KDM window)"));
out ("");
out (String::compose("\t%1 -c \"Fred's Cinema\" -f now -d \"2 weeks\" -z my_great_movie", program_name));
}
@@ -102,17 +110,6 @@ public:
};
-static boost::posix_time::ptime
-time_from_string (string t)
-{
- if (t == "now") {
- return boost::posix_time::second_clock::local_time ();
- }
-
- return boost::posix_time::time_from_string (t);
-}
-
-
static boost::posix_time::time_duration
duration_from_string (string d)
{
@@ -183,39 +180,32 @@ write_files (
}
-static
-shared_ptr<Cinema>
-find_cinema (string cinema_name)
+class ScreenDetails
{
- auto cinemas = Config::instance()->cinemas ();
- auto i = cinemas.begin();
- while (
- i != cinemas.end() &&
- (*i)->name != cinema_name &&
- find ((*i)->emails.begin(), (*i)->emails.end(), cinema_name) == (*i)->emails.end()) {
-
- ++i;
- }
-
- if (i == cinemas.end ()) {
- throw KDMCLIError (String::compose("could not find cinema \"%1\"", cinema_name));
- }
+public:
+ ScreenDetails(CinemaID const& cinema_id, Cinema const& cinema, Screen const& screen)
+ : cinema_id(cinema_id)
+ , cinema(cinema)
+ , screen(screen)
+ {}
- return *i;
-}
+ CinemaID cinema_id;
+ Cinema cinema;
+ Screen screen;
+};
static
void
from_film (
- vector<shared_ptr<Screen>> screens,
+ vector<ScreenDetails> const& screens,
boost::filesystem::path film_dir,
bool verbose,
boost::filesystem::path output,
dcp::NameFormat container_name_format,
dcp::NameFormat filename_format,
- boost::posix_time::ptime valid_from,
- boost::posix_time::ptime valid_to,
+ dcp::LocalTime valid_from,
+ dcp::LocalTime valid_to,
dcp::Formulation formulation,
bool disable_forensic_marking_picture,
optional<int> disable_forensic_marking_audio,
@@ -249,17 +239,27 @@ from_film (
try {
list<KDMWithMetadataPtr> kdms;
- for (auto i: screens) {
+ for (auto screen_details: screens) {
std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm = [film, cpl](dcp::LocalTime begin, dcp::LocalTime end) {
return film->make_kdm(cpl, begin, end);
};
- auto p = kdm_for_screen(make_kdm, i, valid_from, valid_to, formulation, disable_forensic_marking_picture, disable_forensic_marking_audio, period_checks);
+ auto p = kdm_for_screen(
+ make_kdm,
+ screen_details.cinema_id,
+ screen_details.cinema,
+ screen_details.screen,
+ valid_from,
+ valid_to,
+ formulation,
+ disable_forensic_marking_picture,
+ disable_forensic_marking_audio,
+ period_checks
+ );
if (p) {
kdms.push_back (p);
}
}
-
if (find_if(
period_checks.begin(),
period_checks.end(),
@@ -359,14 +359,14 @@ kdm_from_dkdm (
static
void
from_dkdm (
- vector<shared_ptr<Screen>> screens,
+ vector<ScreenDetails> const& screens,
dcp::DecryptedKDM dkdm,
bool verbose,
boost::filesystem::path output,
dcp::NameFormat container_name_format,
dcp::NameFormat filename_format,
- boost::posix_time::ptime valid_from,
- boost::posix_time::ptime valid_to,
+ dcp::LocalTime valid_from,
+ dcp::LocalTime valid_to,
dcp::Formulation formulation,
bool disable_forensic_marking_picture,
optional<int> disable_forensic_marking_audio,
@@ -379,37 +379,31 @@ from_dkdm (
try {
list<KDMWithMetadataPtr> kdms;
- for (auto i: screens) {
- if (!i->recipient) {
+ for (auto const& screen_details: screens) {
+ if (!screen_details.screen.recipient) {
continue;
}
- int const offset_hour = i->cinema ? i->cinema->utc_offset_hour() : 0;
- int const offset_minute = i->cinema ? i->cinema->utc_offset_minute() : 0;
-
- dcp::LocalTime begin(valid_from, dcp::UTCOffset(offset_hour, offset_minute));
- dcp::LocalTime end(valid_to, dcp::UTCOffset(offset_hour, offset_minute));
-
auto const kdm = kdm_from_dkdm(
dkdm,
- i->recipient.get(),
- i->trusted_device_thumbprints(),
- begin,
- end,
+ screen_details.screen.recipient.get(),
+ screen_details.screen.trusted_device_thumbprints(),
+ valid_from,
+ valid_to,
formulation,
disable_forensic_marking_picture,
disable_forensic_marking_audio
);
dcp::NameFormat::Map name_values;
- name_values['c'] = i->cinema ? i->cinema->name : "";
- name_values['s'] = i->name;
+ name_values['c'] = screen_details.cinema.name;
+ name_values['s'] = screen_details.screen.name;
name_values['f'] = kdm.content_title_text();
- name_values['b'] = begin.date() + " " + begin.time_of_day(true, false);
- name_values['e'] = end.date() + " " + end.time_of_day(true, false);
+ name_values['b'] = valid_from.date() + " " + valid_from.time_of_day(true, false);
+ name_values['e'] = valid_to.date() + " " + valid_to.time_of_day(true, false);
name_values['i'] = kdm.cpl_id();
- kdms.push_back(make_shared<KDMWithMetadata>(name_values, i->cinema.get(), i->cinema ? i->cinema->emails : vector<string>(), kdm));
+ kdms.push_back(make_shared<KDMWithMetadata>(name_values, screen_details.cinema_id, screen_details.cinema.emails, kdm));
}
write_files (kdms, zip, output, container_name_format, filename_format, verbose, out);
if (email) {
@@ -443,6 +437,22 @@ dump_dkdm_group (shared_ptr<DKDMGroup> group, int indent, std::function<void (st
}
+static
+dcp::LocalTime
+time_from_string(string time)
+{
+ if (time == "now") {
+ return {};
+ }
+
+ if (time.length() > 10 && time[10] == ' ') {
+ time[10] = 'T';
+ }
+
+ return dcp::LocalTime(time);
+}
+
+
void
dump_decryption_certificate(std::function<void (string)> out)
{
@@ -462,17 +472,20 @@ try
boost::filesystem::path output = dcp::filesystem::current_path();
auto container_name_format = Config::instance()->kdm_container_name_format();
auto filename_format = Config::instance()->kdm_filename_format();
+ /* either a cinema name to search for, or the name of a cinema to associate with certificate */
optional<string> cinema_name;
- shared_ptr<Cinema> cinema;
- optional<boost::filesystem::path> certificate;
- optional<string> screen;
- vector<shared_ptr<Screen>> screens;
+ /* either a screen name to search for, or the name of a screen to associate with certificate */
+ optional<string> screen_name;
+ /* a certificate that we will use to make up a temporary cinema and screen */
+ optional<boost::filesystem::path> projector_certificate;
+ optional<boost::filesystem::path> decryption_key;
+ /* trusted devices that we will use to make up a temporary cinema and screen */
+ vector<TrustedDevice> trusted_devices;
optional<dcp::EncryptedKDM> dkdm;
- optional<boost::posix_time::ptime> valid_from;
- optional<boost::posix_time::ptime> valid_to;
+ optional<dcp::LocalTime> valid_from;
+ optional<dcp::LocalTime> valid_to;
bool zip = false;
- bool list_cinemas = false;
- bool list_dkdm_cpls = false;
+ string command = "create";
optional<string> duration_string;
bool verbose = false;
dcp::Formulation formulation = dcp::Formulation::MODIFIED_TRANSITIONAL_1;
@@ -504,16 +517,14 @@ try
{ "verbose", no_argument, 0, 'v' },
{ "cinema", required_argument, 0, 'c' },
{ "screen", required_argument, 0, 'S' },
- { "certificate", required_argument, 0, 'C' },
- { "trusted-device", required_argument, 0, 'T' },
- { "list-cinemas", no_argument, 0, 'B' },
- { "list-dkdm-cpls", no_argument, 0, 'D' },
+ { "projector-certificate", required_argument, 0, 'C' },
+ { "trusted-device-certificate", required_argument, 0, 'T' },
+ { "decryption-key", required_argument, 0, 'G' },
{ "cinemas-file", required_argument, 0, 'E' },
- { "dump-decryption-certificate", no_argument, 0, 'G' },
{ 0, 0, 0, 0 }
};
- int c = getopt_long(argc, argv, "ho:K:Z:f:t:d:F:pae::zvc:S:C:T:BDE:G", long_options, &option_index);
+ int c = getopt_long(argc, argv, "ho:K:Z:f:t:d:F:pae::zvc:S:C:T:E:G", long_options, &option_index);
if (c == -1) {
break;
@@ -533,10 +544,10 @@ try
container_name_format = dcp::NameFormat (optarg);
break;
case 'f':
- valid_from = time_from_string (optarg);
+ valid_from = time_from_string(optarg);
break;
case 't':
- valid_to = time_from_string (optarg);
+ valid_to = dcp::LocalTime(optarg);
break;
case 'd':
duration_string = optarg;
@@ -575,70 +586,92 @@ try
verbose = true;
break;
case 'c':
- /* This could be a cinema to search for in the configured list or the name of a cinema being
- built up on-the-fly in the option. Cater for both possilibities here by storing the name
- (for lookup) and by creating a Cinema which the next Screen will be added to.
- */
cinema_name = optarg;
- cinema = make_shared<Cinema>(optarg, vector<string>(), "", 0, 0);
break;
case 'S':
- /* Similarly, this could be the name of a new (temporary) screen or the name of a screen
- * to search for.
- */
- screen = optarg;
+ screen_name = optarg;
break;
case 'C':
- certificate = optarg;
+ projector_certificate = optarg;
break;
case 'T':
- /* A trusted device ends up in the last screen we made */
- if (!screens.empty ()) {
- screens.back()->trusted_devices.push_back(TrustedDevice(dcp::Certificate(dcp::file_to_string(optarg))));
- }
- break;
- case 'B':
- list_cinemas = true;
+ trusted_devices.push_back(TrustedDevice(dcp::Certificate(dcp::file_to_string(optarg))));
break;
- case 'D':
- list_dkdm_cpls = true;
+ case 'G':
+ decryption_key = optarg;
break;
case 'E':
cinemas_file = optarg;
break;
- case 'G':
- dump_decryption_certificate(out);
- return {};
}
}
+ vector<string> commands = {
+ "create",
+ "list-cinemas",
+ "list-dkdm-cpls",
+ "add-dkdm",
+ "dump-decryption-certificate"
+ };
+
+ if (optind < argc - 1) {
+ /* Command with some KDM / CPL / whever specified afterwards */
+ command = argv[optind++];
+ } else if (optind < argc) {
+ /* Look for a valid command, hoping that it's not the name of the KDM / CPL / whatever */
+ if (std::find(commands.begin(), commands.end(), argv[optind]) != commands.end()) {
+ command = argv[optind++];
+ }
+ }
+
+ if (std::find(commands.begin(), commands.end(), command) == commands.end()) {
+ throw KDMCLIError(String::compose("Unrecognised command %1", command));
+ }
+
if (cinemas_file) {
Config::instance()->set_cinemas_file(*cinemas_file);
}
- if (certificate) {
- /* Make a new screen and add it to the current cinema */
- dcp::CertificateChain chain(dcp::file_to_string(*certificate));
- auto screen_to_add = std::make_shared<Screen>(screen.get_value_or(""), "", chain.leaf(), boost::none, vector<TrustedDevice>());
- if (cinema) {
- cinema->add_screen(screen_to_add);
- }
- screens.push_back(screen_to_add);
+ /* If we've been given a certificate we can make up a temporary cinema and screen (not written to the
+ * database) to then use for making KDMs.
+ */
+ optional<Cinema> temp_cinema;
+ optional<Screen> temp_screen;
+ if (projector_certificate) {
+ temp_cinema = Cinema(cinema_name.get_value_or(""), {}, "", dcp::UTCOffset());
+ dcp::CertificateChain chain(dcp::file_to_string(*projector_certificate));
+ temp_screen = Screen(screen_name.get_value_or(""), "", chain.leaf(), boost::none, trusted_devices);
}
- if (list_cinemas) {
- auto cinemas = Config::instance()->cinemas ();
- for (auto i: cinemas) {
- out (String::compose("%1 (%2)", i->name, Email::address_list(i->emails)));
+ if (command == "list-cinemas") {
+ CinemaList cinemas;
+ for (auto const& cinema: cinemas.cinemas()) {
+ out(String::compose("%1 (%2)", cinema.second.name, Email::address_list(cinema.second.emails)));
}
return {};
}
- if (list_dkdm_cpls) {
+ if (command == "list-dkdm-cpls") {
dump_dkdm_group (Config::instance()->dkdms(), 0, out);
return {};
}
+ if (command == "dump-deccryption-certificate") {
+ dump_decryption_certificate(out);
+ return {};
+ }
+
+ if (optind >= argc) {
+ throw KDMCLIError("no film, CPL ID or DKDM specified");
+ }
+
+ if (command == "add-dkdm") {
+ auto dkdms = Config::instance()->dkdms();
+ dkdms->add(make_shared<DKDM>(dcp::EncryptedKDM(dcp::file_to_string(argv[optind]))));
+ Config::instance()->write_config();
+ return {};
+ }
+
if (!duration_string && !valid_to) {
throw KDMCLIError ("you must specify a --valid-duration or --valid-to");
}
@@ -651,23 +684,37 @@ try
throw KDMCLIError ("no film, CPL ID or DKDM specified");
}
- if (screens.empty()) {
+ vector<ScreenDetails> screens;
+
+ if (!temp_cinema) {
if (!cinema_name) {
- throw KDMCLIError ("you must specify either a cinema or one or more screens using certificate files");
+ throw KDMCLIError("you must specify either a cinema or one or more screens using certificate files");
}
- screens = find_cinema (*cinema_name)->screens ();
- if (screen) {
- screens.erase(std::remove_if(screens.begin(), screens.end(), [&screen](shared_ptr<Screen> s) { return s->name != *screen; }), screens.end());
+ CinemaList cinema_list;
+ if (auto cinema = cinema_list.cinema_by_name_or_email(*cinema_name)) {
+ if (screen_name) {
+ for (auto screen: cinema_list.screens_by_cinema_and_name(cinema->first, *screen_name)) {
+ screens.push_back({cinema->first, cinema->second, screen.second});
+ }
+ } else {
+ for (auto screen: cinema_list.screens(cinema->first)) {
+ screens.push_back({cinema->first, cinema->second, screen.second});
+ }
+ }
}
+ } else {
+ DCPOMATIC_ASSERT(temp_screen);
+ screens.push_back({CinemaID(0), *temp_cinema, *temp_screen});
}
if (duration_string) {
- valid_to = valid_from.get() + duration_from_string (*duration_string);
+ valid_to = valid_from.get();
+ valid_to->add(duration_from_string(*duration_string));
}
if (verbose) {
- out (String::compose("Making KDMs valid from %1 to %2", boost::posix_time::to_simple_string(valid_from.get()), boost::posix_time::to_simple_string(valid_to.get())));
+ out(String::compose("Making KDMs valid from %1 to %2", valid_from->as_string(), valid_to->as_string()));
}
string const thing = argv[optind];
@@ -699,9 +746,11 @@ try
throw KDMCLIError ("could not find film or CPL ID corresponding to " + thing);
}
+ string const key = decryption_key ? dcp::file_to_string(*decryption_key) : Config::instance()->decryption_chain()->key().get();
+
from_dkdm (
screens,
- dcp::DecryptedKDM (*dkdm, Config::instance()->decryption_chain()->key().get()),
+ dcp::DecryptedKDM(*dkdm, key),
verbose,
output,
container_name_format,
diff --git a/src/lib/kdm_recipient.cc b/src/lib/kdm_recipient.cc
index 671e9797c..c33eb1b9f 100644
--- a/src/lib/kdm_recipient.cc
+++ b/src/lib/kdm_recipient.cc
@@ -39,14 +39,14 @@ KDMRecipient::KDMRecipient (cxml::ConstNodePtr node)
void
KDMRecipient::as_xml (xmlpp::Element* parent) const
{
- parent->add_child("Name")->add_child_text(name);
+ cxml::add_text_child(parent, "Name", name);
if (recipient) {
- parent->add_child("Recipient")->add_child_text(recipient->certificate(true));
+ cxml::add_text_child(parent, "Recipient", recipient->certificate(true));
}
if (recipient_file) {
- parent->add_child("RecipientFile")->add_child_text(*recipient_file);
+ cxml::add_text_child(parent, "RecipientFile", *recipient_file);
}
- parent->add_child("Notes")->add_child_text(notes);
+ cxml::add_text_child(parent, "Notes", notes);
}
diff --git a/src/lib/kdm_with_metadata.h b/src/lib/kdm_with_metadata.h
index fbeeffbc1..6198564b1 100644
--- a/src/lib/kdm_with_metadata.h
+++ b/src/lib/kdm_with_metadata.h
@@ -23,6 +23,7 @@
#define DCPOMATIC_KDM_WITH_METADATA_H
+#include "id.h"
#include <dcp/encrypted_kdm.h>
#include <dcp/name_format.h>
@@ -33,7 +34,7 @@ class Cinema;
class KDMWithMetadata
{
public:
- KDMWithMetadata(dcp::NameFormat::Map const& name_values, void const* group, std::vector<std::string> emails, dcp::EncryptedKDM kdm)
+ KDMWithMetadata(dcp::NameFormat::Map const& name_values, ID group, std::vector<std::string> emails, dcp::EncryptedKDM kdm)
: _name_values (name_values)
, _group (group)
, _emails (emails)
@@ -54,7 +55,7 @@ public:
boost::optional<std::string> get (char k) const;
- void const* group () const {
+ ID group() const {
return _group;
}
@@ -64,7 +65,7 @@ public:
private:
dcp::NameFormat::Map _name_values;
- void const* _group;
+ ID _group;
std::vector<std::string> _emails;
dcp::EncryptedKDM _kdm;
};
diff --git a/src/lib/log_entry.cc b/src/lib/log_entry.cc
index d5065e03a..af9148e68 100644
--- a/src/lib/log_entry.cc
+++ b/src/lib/log_entry.cc
@@ -38,6 +38,7 @@ int const LogEntry::TYPE_DEBUG_VIDEO_VIEW = 0x080;
int const LogEntry::TYPE_DISK = 0x100;
int const LogEntry::TYPE_DEBUG_PLAYER = 0x200;
int const LogEntry::TYPE_DEBUG_AUDIO_ANALYSIS = 0x400;
+int const LogEntry::TYPE_HTTP = 0x800;
using std::string;
diff --git a/src/lib/log_entry.h b/src/lib/log_entry.h
index 95c4e4f1f..89357d201 100644
--- a/src/lib/log_entry.h
+++ b/src/lib/log_entry.h
@@ -42,6 +42,7 @@ public:
static const int TYPE_DISK;
static const int TYPE_DEBUG_PLAYER; ///< the Player class
static const int TYPE_DEBUG_AUDIO_ANALYSIS; ///< audio analysis job
+ static const int TYPE_HTTP;
explicit LogEntry (int type);
virtual ~LogEntry () {}
diff --git a/src/lib/make_dcp.cc b/src/lib/make_dcp.cc
index 17d45be46..b72756194 100644
--- a/src/lib/make_dcp.cc
+++ b/src/lib/make_dcp.cc
@@ -21,7 +21,7 @@
#include "config.h"
#include "dcp_content.h"
-#include "dcp_encoder.h"
+#include "dcp_film_encoder.h"
#include "dcp_transcode_job.h"
#include "dcpomatic_log.h"
#include "environment_info.h"
@@ -40,8 +40,8 @@ using std::shared_ptr;
using std::string;
-/** Add suitable Jobs to the JobManager to create a DCP for a Film */
-void
+/** Add suitable Job to the JobManager to create a DCP for a Film */
+shared_ptr<TranscodeJob>
make_dcp (shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour)
{
if (film->dcp_name().find("/") != string::npos) {
@@ -91,15 +91,12 @@ make_dcp (shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour)
LOG_GENERAL ("Content: %1", content->technical_summary());
}
LOG_GENERAL ("DCP video rate %1 fps", film->video_frame_rate());
- if (Config::instance()->only_servers_encode()) {
- LOG_GENERAL_NC ("0 threads: ONLY SERVERS SET TO ENCODE");
- } else {
- LOG_GENERAL ("%1 threads", Config::instance()->master_encoding_threads());
- }
- LOG_GENERAL ("J2K bandwidth %1", film->j2k_bandwidth());
+ LOG_GENERAL("Video bit rate %1", film->video_bit_rate(film->video_encoding()));
auto tj = make_shared<DCPTranscodeJob>(film, behaviour);
- tj->set_encoder (make_shared<DCPEncoder>(film, tj));
+ tj->set_encoder(make_shared<DCPFilmEncoder>(film, tj));
JobManager::instance()->add (tj);
+
+ return tj;
}
diff --git a/src/lib/make_dcp.h b/src/lib/make_dcp.h
index 9f5072782..fe0bcd2f6 100644
--- a/src/lib/make_dcp.h
+++ b/src/lib/make_dcp.h
@@ -25,5 +25,5 @@
class Film;
-void make_dcp (std::shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour);
+std::shared_ptr<TranscodeJob> make_dcp(std::shared_ptr<Film> film, TranscodeJob::ChangedBehaviour behaviour);
diff --git a/src/lib/map_cli.cc b/src/lib/map_cli.cc
index b158499a8..149e09fbc 100644
--- a/src/lib/map_cli.cc
+++ b/src/lib/map_cli.cc
@@ -24,20 +24,19 @@
#include "util.h"
#include <dcp/cpl.h>
#include <dcp/dcp.h>
-#include <dcp/interop_subtitle_asset.h>
+#include <dcp/interop_text_asset.h>
#include <dcp/filesystem.h>
#include <dcp/font_asset.h>
-#include <dcp/mono_picture_asset.h>
+#include <dcp/mono_j2k_picture_asset.h>
#include <dcp/reel.h>
#include <dcp/reel_atmos_asset.h>
-#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_file_asset.h>
#include <dcp/reel_picture_asset.h>
#include <dcp/reel_sound_asset.h>
-#include <dcp/reel_subtitle_asset.h>
-#include <dcp/smpte_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
+#include <dcp/smpte_text_asset.h>
#include <dcp/sound_asset.h>
-#include <dcp/stereo_picture_asset.h>
+#include <dcp/stereo_j2k_picture_asset.h>
#include <boost/optional.hpp>
#include <getopt.h>
#include <algorithm>
@@ -292,16 +291,16 @@ map_cli(int argc, char* argv[], std::function<void (string)> out)
}
};
- auto maybe_copy_font_and_images = [&maybe_copy, output_dir, copy](shared_ptr<const dcp::SubtitleAsset> asset, bool rename, bool hard_link, bool soft_link) {
- auto interop = dynamic_pointer_cast<const dcp::InteropSubtitleAsset>(asset);
+ auto maybe_copy_font_and_images = [&maybe_copy, output_dir, copy](shared_ptr<const dcp::TextAsset> asset, bool rename, bool hard_link, bool soft_link) {
+ auto interop = dynamic_pointer_cast<const dcp::InteropTextAsset>(asset);
boost::optional<boost::filesystem::path> extra;
if (interop) {
extra = interop->id();
for (auto font_asset: interop->font_assets()) {
maybe_copy(font_asset->id(), rename, hard_link, soft_link, extra);
}
- for (auto subtitle: interop->subtitles()) {
- if (auto image = dynamic_pointer_cast<const dcp::SubtitleImage>(subtitle)) {
+ for (auto subtitle: interop->texts()) {
+ if (auto image = dynamic_pointer_cast<const dcp::TextImage>(subtitle)) {
auto const output_path = *output_dir / asset->id() / image->file()->filename();
copy(*image->file(), output_path, hard_link, soft_link);
}
diff --git a/src/lib/mpeg2_encoder.cc b/src/lib/mpeg2_encoder.cc
new file mode 100644
index 000000000..9b9cdfd09
--- /dev/null
+++ b/src/lib/mpeg2_encoder.cc
@@ -0,0 +1,80 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "mpeg2_encoder.h"
+#include "writer.h"
+#include <dcp/ffmpeg_image.h>
+extern "C" {
+#include <libavutil/pixfmt.h>
+}
+
+
+using std::shared_ptr;
+
+
+MPEG2Encoder::MPEG2Encoder(shared_ptr<const Film> film, Writer& writer)
+ : VideoEncoder(film, writer)
+ , _transcoder(film->frame_size(), film->video_frame_rate(), film->video_bit_rate(VideoEncoding::MPEG2))
+{
+
+}
+
+
+void
+MPEG2Encoder::encode(shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time)
+{
+ VideoEncoder::encode(pv, time);
+
+ auto image = pv->image(
+ [](AVPixelFormat) { return AV_PIX_FMT_YUV420P; },
+ VideoRange::VIDEO,
+ false
+ );
+
+ dcp::FFmpegImage ffmpeg_image(time.get() * _film->video_frame_rate() / dcpomatic::DCPTime::HZ);
+
+ DCPOMATIC_ASSERT(image->size() == ffmpeg_image.size());
+
+ auto height = image->size().height;
+
+ for (int y = 0; y < height; ++y) {
+ memcpy(ffmpeg_image.y() + ffmpeg_image.y_stride() * y, image->data()[0] + image->stride()[0] * y, ffmpeg_image.y_stride());
+ }
+
+ for (int y = 0; y < height / 2; ++y) {
+ memcpy(ffmpeg_image.u() + ffmpeg_image.u_stride() * y, image->data()[1] + image->stride()[1] * y, ffmpeg_image.u_stride());
+ memcpy(ffmpeg_image.v() + ffmpeg_image.v_stride() * y, image->data()[2] + image->stride()[2] * y, ffmpeg_image.v_stride());
+ }
+
+ if (auto compressed = _transcoder.compress_frame(std::move(ffmpeg_image))) {
+ _writer.write(compressed->first, compressed->second);
+ }
+}
+
+
+void
+MPEG2Encoder::end()
+{
+ if (auto compressed = _transcoder.flush()) {
+ _writer.write(compressed->first, compressed->second);
+ }
+}
+
diff --git a/src/lib/mpeg2_encoder.h b/src/lib/mpeg2_encoder.h
new file mode 100644
index 000000000..1b2259d26
--- /dev/null
+++ b/src/lib/mpeg2_encoder.h
@@ -0,0 +1,42 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "video_encoder.h"
+#include <dcp/mpeg2_transcode.h>
+
+
+class MPEG2Encoder : public VideoEncoder
+{
+public:
+ MPEG2Encoder(std::shared_ptr<const Film> film, Writer& writer);
+
+ void encode(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time) override;
+
+ void pause() override {}
+ void resume() override {}
+
+ /** Called when a processing run has finished */
+ void end() override;
+
+private:
+ dcp::MPEG2Compressor _transcoder;
+};
+
diff --git a/src/lib/overlaps.cc b/src/lib/overlaps.cc
index fbc6b5cb1..bed75a822 100644
--- a/src/lib/overlaps.cc
+++ b/src/lib/overlaps.cc
@@ -28,7 +28,8 @@ using std::shared_ptr;
using namespace dcpomatic;
-ContentList overlaps (shared_ptr<const Film> film, ContentList cl, function<bool (shared_ptr<const Content>)> part, DCPTime from, DCPTime to)
+ContentList
+dcpomatic::overlaps(shared_ptr<const Film> film, ContentList cl, function<bool (shared_ptr<const Content>)> part, DCPTime from, DCPTime to)
{
ContentList overlaps;
DCPTimePeriod period (from, to);
diff --git a/src/lib/overlaps.h b/src/lib/overlaps.h
index bb8277eaa..f405c0fab 100644
--- a/src/lib/overlaps.h
+++ b/src/lib/overlaps.h
@@ -27,6 +27,9 @@ class ContentPart;
class Film;
+namespace dcpomatic {
+
+
/** @return Pieces of content with a given part (video, audio,
* subtitle) that overlap a specified time range in the given
* ContentList
@@ -34,3 +37,7 @@ class Film;
ContentList overlaps (
std::shared_ptr<const Film> film, ContentList cl, std::function<bool (std::shared_ptr<const Content>)> part, dcpomatic::DCPTime from, dcpomatic::DCPTime to
);
+
+
+}
+
diff --git a/src/lib/path_behaviour.h b/src/lib/path_behaviour.h
new file mode 100644
index 000000000..cf966af5a
--- /dev/null
+++ b/src/lib/path_behaviour.h
@@ -0,0 +1,33 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_PATH_BEHAVIOUR_H
+#define DCPOMATIC_PATH_BEHAVIOUR_H
+
+
+enum class PathBehaviour {
+ KEEP_ABSOLUTE,
+ MAKE_RELATIVE,
+};
+
+
+#endif
+
diff --git a/src/lib/pixel_quanta.cc b/src/lib/pixel_quanta.cc
index 7c1d285cf..07690f3ac 100644
--- a/src/lib/pixel_quanta.cc
+++ b/src/lib/pixel_quanta.cc
@@ -34,8 +34,8 @@ PixelQuanta::PixelQuanta (cxml::ConstNodePtr node)
void
PixelQuanta::as_xml (xmlpp::Element* node) const
{
- node->add_child("X")->add_child_text(dcp::raw_convert<std::string>(x));
- node->add_child("Y")->add_child_text(dcp::raw_convert<std::string>(y));
+ cxml::add_text_child(node, "X", dcp::raw_convert<std::string>(x));
+ cxml::add_text_child(node, "Y", dcp::raw_convert<std::string>(y));
}
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 75f6b7919..f348f6b28 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -54,10 +54,9 @@
#include "timer.h"
#include "video_decoder.h"
#include <dcp/reel.h>
-#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_picture_asset.h>
#include <dcp/reel_sound_asset.h>
-#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <algorithm>
#include <iostream>
#include <stdint.h>
@@ -71,10 +70,8 @@ using std::dynamic_pointer_cast;
using std::list;
using std::make_pair;
using std::make_shared;
-using std::make_shared;
using std::max;
using std::min;
-using std::min;
using std::pair;
using std::shared_ptr;
using std::vector;
@@ -412,7 +409,6 @@ Player::setup_pieces ()
_silent = Empty(film, playlist(), bind(&have_audio, _1), _playback_length);
_next_video_time = boost::none;
- _next_video_eyes = Eyes::BOTH;
_next_audio_time = boost::none;
}
@@ -525,7 +521,7 @@ Player::black_player_video_frame (Eyes eyes) const
boost::mutex::scoped_lock lm(_black_image_mutex);
return std::make_shared<PlayerVideo> (
- std::make_shared<const RawImageProxy>(_black_image),
+ make_shared<const RawImageProxy>(_black_image),
Crop(),
optional<double>(),
_video_container_size,
@@ -535,7 +531,7 @@ Player::black_player_video_frame (Eyes eyes) const
PresetColourConversion::all().front().conversion,
VideoRange::FULL,
std::weak_ptr<Content>(),
- boost::optional<Frame>(),
+ boost::optional<dcpomatic::ContentTime>(),
false
);
}
@@ -736,7 +732,7 @@ Player::pass ()
if (_playback_length.load() == DCPTime() || !film) {
/* Special; just give one black frame */
- emit_video (black_player_video_frame(Eyes::BOTH), DCPTime());
+ use_video(black_player_video_frame(Eyes::BOTH), DCPTime(), one_video_frame());
return true;
}
@@ -775,22 +771,33 @@ Player::pass ()
LOG_DEBUG_PLAYER ("Calling pass() on %1", earliest_content->content->path(0));
earliest_content->done = earliest_content->decoder->pass ();
auto dcp = dynamic_pointer_cast<DCPContent>(earliest_content->content);
- if (dcp && !_play_referenced && dcp->reference_audio()) {
- /* We are skipping some referenced DCP audio content, so we need to update _next_audio_time
- to `hide' the fact that no audio was emitted during the referenced DCP (though
- we need to behave as though it was).
- */
- _next_audio_time = dcp->end(film);
+ if (dcp && !_play_referenced) {
+ if (dcp->reference_video()) {
+ _next_video_time = dcp->end(film);
+ }
+ if (dcp->reference_audio()) {
+ /* We are skipping some referenced DCP audio content, so we need to update _next_audio_time
+ to `hide' the fact that no audio was emitted during the referenced DCP (though
+ we need to behave as though it was).
+ */
+ _next_audio_time = dcp->end(film);
+ }
}
break;
}
case BLACK:
LOG_DEBUG_PLAYER ("Emit black for gap at %1", to_string(_black.position()));
+ if (!_next_video_time) {
+ /* Deciding to emit black has the same effect as getting some video from the content
+ * when we are inaccurately seeking.
+ */
+ _next_video_time = _black.position();
+ }
if (film->three_d()) {
- emit_video(black_player_video_frame(Eyes::LEFT), _black.position());
- emit_video(black_player_video_frame(Eyes::RIGHT), _black.position());
+ use_video(black_player_video_frame(Eyes::LEFT), _black.position(), _black.period_at_position().to);
+ use_video(black_player_video_frame(Eyes::RIGHT), _black.position(), _black.period_at_position().to);
} else {
- emit_video(black_player_video_frame(Eyes::BOTH), _black.position());
+ use_video(black_player_video_frame(Eyes::BOTH), _black.position(), _black.period_at_position().to);
}
_black.set_position (_black.position() + one_video_frame());
break;
@@ -893,24 +900,16 @@ Player::pass ()
}
if (done) {
+ if (_next_video_time) {
+ LOG_DEBUG_PLAYER("Done: emit video until end of film at %1", to_string(film->length()));
+ emit_video_until(film->length());
+ }
+
if (_shuffler) {
_shuffler->flush ();
}
for (auto const& i: _delay) {
- do_emit_video(i.first, i.second);
- }
-
- /* Perhaps we should have Empty entries for both eyes in the 3D case (somehow).
- * However, if we have L and R video files, and one is shorter than the other,
- * the fill code in ::video mostly takes care of filling in the gaps.
- * However, since it fills at the point when it knows there is more video coming
- * at time t (so it should fill any gap up to t) it can't do anything right at the
- * end. This is particularly bad news if the last frame emitted is a LEFT
- * eye, as the MXF writer will complain about the 3D sequence being wrong.
- * Here's a hack to workaround that particular case.
- */
- if (_next_video_eyes && _next_video_time && *_next_video_eyes == Eyes::RIGHT) {
- do_emit_video (black_player_video_frame(Eyes::RIGHT), *_next_video_time);
+ emit_video(i.first, i.second);
}
}
@@ -920,68 +919,116 @@ Player::pass ()
/** @return Open subtitles for the frame at the given time, converted to images */
optional<PositionImage>
-Player::open_subtitles_for_frame (DCPTime time) const
+Player::open_texts_for_frame(DCPTime time) const
{
auto film = _film.lock();
if (!film) {
return {};
}
- list<PositionImage> captions;
+ list<PositionImage> texts;
int const vfr = film->video_frame_rate();
- for (
- auto j:
- _active_texts[TextType::OPEN_SUBTITLE].get_burnt(DCPTimePeriod(time, time + DCPTime::from_frames(1, vfr)), _always_burn_open_subtitles)
- ) {
+ for (auto type: { TextType::OPEN_SUBTITLE, TextType::OPEN_CAPTION }) {
+ for (
+ auto const& text:
+ _active_texts[type].get_burnt(DCPTimePeriod(time, time + DCPTime::from_frames(1, vfr)), _always_burn_open_subtitles)
+ ) {
- /* Bitmap subtitles */
- for (auto i: j.bitmap) {
- if (!i.image || i.image->size().width == 0 || i.image->size().height == 0) {
- continue;
- }
+ /* Bitmap texts */
+ for (auto i: text.bitmap) {
+ if (!i.image || i.image->size().width == 0 || i.image->size().height == 0) {
+ continue;
+ }
- /* i.image will already have been scaled to fit _video_container_size */
- dcp::Size scaled_size (i.rectangle.width * _video_container_size.load().width, i.rectangle.height * _video_container_size.load().height);
+ /* i.image will already have been scaled to fit _video_container_size */
+ dcp::Size scaled_size (i.rectangle.width * _video_container_size.load().width, i.rectangle.height * _video_container_size.load().height);
- captions.push_back (
- PositionImage (
- i.image,
- Position<int> (
- lrint(_video_container_size.load().width * i.rectangle.x),
- lrint(_video_container_size.load().height * i.rectangle.y)
+ texts.push_back(
+ PositionImage (
+ i.image,
+ Position<int> (
+ lrint(_video_container_size.load().width * i.rectangle.x),
+ lrint(_video_container_size.load().height * i.rectangle.y)
+ )
)
- )
- );
- }
+ );
+ }
- /* String subtitles (rendered to an image) */
- if (!j.string.empty()) {
- auto s = render_text(j.string, _video_container_size, time, vfr);
- copy_if(s.begin(), s.end(), back_inserter(captions), [](PositionImage const& image) {
- return image.image->size().width && image.image->size().height;
- });
+ /* String texts (rendered to an image) */
+ if (!text.string.empty()) {
+ auto s = render_text(text.string, _video_container_size, time, vfr);
+ copy_if(s.begin(), s.end(), back_inserter(texts), [](PositionImage const& image) {
+ return image.image->size().width && image.image->size().height;
+ });
+ }
}
}
- if (captions.empty()) {
+ if (texts.empty()) {
return {};
}
- return merge (captions, _subtitle_alignment);
+ return merge(texts, _subtitle_alignment);
}
-static
-Eyes
-increment_eyes (Eyes e)
+void
+Player::emit_video_until(DCPTime time)
{
- if (e == Eyes::LEFT) {
- return Eyes::RIGHT;
- }
+ LOG_DEBUG_PLAYER("emit_video_until %1; next video time is %2", to_string(time), to_string(_next_video_time.get_value_or({})));
+ auto frame = [this](shared_ptr<PlayerVideo> pv, DCPTime time) {
+ /* We need a delay to give a little wiggle room to ensure that relevant subtitles arrive at the
+ player before the video that requires them.
+ */
+ _delay.push_back(make_pair(pv, time));
+
+ if (pv->eyes() == Eyes::BOTH || pv->eyes() == Eyes::RIGHT) {
+ _next_video_time = time + one_video_frame();
+ }
+
+ if (_delay.size() < 3) {
+ return;
+ }
+
+ auto to_do = _delay.front();
+ _delay.pop_front();
+ emit_video(to_do.first, to_do.second);
+ };
- return Eyes::LEFT;
+ auto const age_threshold = one_video_frame() * 2;
+
+ while (_next_video_time.get_value_or({}) < time) {
+ auto left = _last_video[Eyes::LEFT];
+ auto right = _last_video[Eyes::RIGHT];
+ auto both = _last_video[Eyes::BOTH];
+
+ auto const next = _next_video_time.get_value_or({});
+
+ if (
+ left.first &&
+ right.first &&
+ (!both.first || (left.second >= both.second && right.second >= both.second)) &&
+ (left.second - next) < age_threshold &&
+ (right.second - next) < age_threshold
+ ) {
+ frame(left.first, next);
+ frame(right.first, next);
+ } else if (both.first && (both.second - next) < age_threshold) {
+ frame(both.first, next);
+ LOG_DEBUG_PLAYER("Content %1 selected for DCP %2 (age %3)", to_string(both.second), to_string(next), to_string(both.second - next));
+ } else {
+ auto film = _film.lock();
+ if (film && film->three_d()) {
+ frame(black_player_video_frame(Eyes::LEFT), next);
+ frame(black_player_video_frame(Eyes::RIGHT), next);
+ } else {
+ frame(black_player_video_frame(Eyes::BOTH), next);
+ }
+ LOG_DEBUG_PLAYER("Black selected for DCP %1", to_string(next));
+ }
+ }
}
@@ -1006,11 +1053,6 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video)
return;
}
- FrameRateChange frc(film, piece->content);
- if (frc.skip && (video.frame % 2) == 1) {
- return;
- }
-
vector<Eyes> eyes_to_emit;
if (!film->three_d()) {
@@ -1033,15 +1075,11 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video)
eyes_to_emit = { video.eyes };
}
- /* Time of the first frame we will emit */
- DCPTime const time = content_video_to_dcp (piece, video.frame);
- LOG_DEBUG_PLAYER("Received video frame %1 at %2", video.frame, to_string(time));
+ /* Time of the frame we just received within the DCP */
+ auto const time = content_time_to_dcp(piece, video.time);
+ LOG_DEBUG_PLAYER("Received video frame %1 %2 eyes %3", to_string(video.time), to_string(time), static_cast<int>(video.eyes));
- /* Discard if it's before the content's period or the last accurate seek. We can't discard
- if it's after the content's period here as in that case we still need to fill any gap between
- `now' and the end of the content's period.
- */
- if (time < piece->content->position() || (_next_video_time && time < *_next_video_time)) {
+ if (time < piece->content->position()) {
return;
}
@@ -1054,56 +1092,8 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video)
return;
}
- /* Fill gaps that we discover now that we have some video which needs to be emitted.
- This is where we need to fill to.
- */
- DCPTime fill_to = min(time, piece->content->end(film));
-
- if (_next_video_time) {
- DCPTime fill_from = max (*_next_video_time, piece->content->position());
-
- /* Fill if we have more than half a frame to do */
- if ((fill_to - fill_from) > one_video_frame() / 2) {
- auto last = _last_video.find (weak_piece);
- if (film->three_d()) {
- auto fill_to_eyes = eyes_to_emit[0];
- if (fill_to_eyes == Eyes::BOTH) {
- fill_to_eyes = Eyes::LEFT;
- }
- if (fill_to == piece->content->end(film)) {
- /* Don't fill after the end of the content */
- fill_to_eyes = Eyes::LEFT;
- }
- auto j = fill_from;
- auto eyes = _next_video_eyes.get_value_or(Eyes::LEFT);
- if (eyes == Eyes::BOTH) {
- eyes = Eyes::LEFT;
- }
- while (j < fill_to || eyes != fill_to_eyes) {
- if (last != _last_video.end()) {
- LOG_DEBUG_PLAYER("Fill using last video at %1 in 3D mode", to_string(j));
- auto copy = last->second->shallow_copy();
- copy->set_eyes (eyes);
- emit_video (copy, j);
- } else {
- LOG_DEBUG_PLAYER("Fill using black at %1 in 3D mode", to_string(j));
- emit_video (black_player_video_frame(eyes), j);
- }
- if (eyes == Eyes::RIGHT) {
- j += one_video_frame();
- }
- eyes = increment_eyes (eyes);
- }
- } else {
- for (DCPTime j = fill_from; j < fill_to; j += one_video_frame()) {
- if (last != _last_video.end()) {
- emit_video (last->second, j);
- } else {
- emit_video (black_player_video_frame(Eyes::BOTH), j);
- }
- }
- }
- }
+ if (!_next_video_time) {
+ _next_video_time = time.round(film->video_frame_rate());
}
auto const content_video = piece->content->video;
@@ -1112,33 +1102,38 @@ Player::video (weak_ptr<Piece> weak_piece, ContentVideo video)
DCPOMATIC_ASSERT(scaled_size);
for (auto eyes: eyes_to_emit) {
- _last_video[weak_piece] = std::make_shared<PlayerVideo>(
- video.image,
- content_video->actual_crop(),
- content_video->fade(film, video.frame),
- scale_for_display(
- *scaled_size,
+ use_video(
+ std::make_shared<PlayerVideo>(
+ video.image,
+ content_video->actual_crop(),
+ content_video->fade(film, video.time),
+ scale_for_display(
+ *scaled_size,
+ _video_container_size,
+ film->frame_size(),
+ content_video->pixel_quanta()
+ ),
_video_container_size,
- film->frame_size(),
- content_video->pixel_quanta()
+ eyes,
+ video.part,
+ content_video->colour_conversion(),
+ content_video->range(),
+ piece->content,
+ video.time,
+ false
),
- _video_container_size,
- eyes,
- video.part,
- content_video->colour_conversion(),
- content_video->range(),
- piece->content,
- video.frame,
- false
+ time,
+ piece->content->end(film)
);
+ }
+}
- DCPTime t = time;
- for (int i = 0; i < frc.repeat; ++i) {
- if (t < piece->content->end(film)) {
- emit_video (_last_video[weak_piece], t);
- }
- t += one_video_frame ();
- }
+void
+Player::use_video(shared_ptr<PlayerVideo> pv, DCPTime time, DCPTime end)
+{
+ _last_video[pv->eyes()] = { pv, time };
+ if (pv->eyes() != Eyes::LEFT) {
+ emit_video_until(std::min(time + one_video_frame() / 2, end));
}
}
@@ -1256,7 +1251,7 @@ Player::bitmap_text_start (weak_ptr<Piece> weak_piece, weak_ptr<const TextConten
{
/* Apply content's subtitle offsets */
sub.rectangle.x += content->x_offset ();
- sub.rectangle.y += content->y_offset ();
+ sub.rectangle.y -= content->y_offset ();
/* Apply a corrective translation to keep the subtitle centred after the scale that is coming up */
sub.rectangle.x -= sub.rectangle.width * ((content->x_scale() - 1) / 2);
@@ -1420,18 +1415,18 @@ Player::seek (DCPTime time, bool accurate)
if (accurate) {
_next_video_time = time;
- _next_video_eyes = Eyes::LEFT;
_next_audio_time = time;
} else {
_next_video_time = boost::none;
- _next_video_eyes = boost::none;
_next_audio_time = boost::none;
}
_black.set_position (time);
_silent.set_position (time);
- _last_video.clear ();
+ _last_video[Eyes::LEFT] = {};
+ _last_video[Eyes::RIGHT] = {};
+ _last_video[Eyes::BOTH] = {};
for (auto& state: _stream_states) {
state.second.last_push_end = boost::none;
@@ -1440,41 +1435,14 @@ Player::seek (DCPTime time, bool accurate)
void
-Player::emit_video (shared_ptr<PlayerVideo> pv, DCPTime time)
-{
- auto film = _film.lock();
- DCPOMATIC_ASSERT(film);
-
- /* We need a delay to give a little wiggle room to ensure that relevant subtitles arrive at the
- player before the video that requires them.
- */
- _delay.push_back (make_pair (pv, time));
-
- if (pv->eyes() == Eyes::BOTH || pv->eyes() == Eyes::RIGHT) {
- _next_video_time = time + one_video_frame();
- }
- _next_video_eyes = increment_eyes (pv->eyes());
-
- if (_delay.size() < 3) {
- return;
- }
-
- auto to_do = _delay.front();
- _delay.pop_front();
- do_emit_video (to_do.first, to_do.second);
-}
-
-
-void
-Player::do_emit_video (shared_ptr<PlayerVideo> pv, DCPTime time)
+Player::emit_video(shared_ptr<PlayerVideo> pv, DCPTime time)
{
if (pv->eyes() == Eyes::BOTH || pv->eyes() == Eyes::RIGHT) {
std::for_each(_active_texts.begin(), _active_texts.end(), [time](ActiveText& a) { a.clear_before(time); });
}
- auto subtitles = open_subtitles_for_frame (time);
- if (subtitles) {
- pv->set_text (subtitles.get ());
+ if (auto texts = open_texts_for_frame(time)) {
+ pv->set_text(texts.get());
}
Video (pv, time);
diff --git a/src/lib/player.h b/src/lib/player.h
index 48f6f97ca..f6a30230f 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -157,6 +157,8 @@ private:
dcpomatic::ContentTime dcp_to_content_time (std::shared_ptr<const Piece> piece, dcpomatic::DCPTime t) const;
dcpomatic::DCPTime content_time_to_dcp (std::shared_ptr<const Piece> piece, dcpomatic::ContentTime t) const;
std::shared_ptr<PlayerVideo> black_player_video_frame (Eyes eyes) const;
+ void emit_video_until(dcpomatic::DCPTime time);
+ void insert_video(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time, dcpomatic::DCPTime end);
std::pair<std::shared_ptr<Piece>, boost::optional<dcpomatic::DCPTime>> earliest_piece_and_time() const;
void video (std::weak_ptr<Piece>, ContentVideo);
@@ -171,9 +173,9 @@ private:
std::pair<std::shared_ptr<AudioBuffers>, dcpomatic::DCPTime> discard_audio (
std::shared_ptr<const AudioBuffers> audio, dcpomatic::DCPTime time, dcpomatic::DCPTime discard_to
) const;
- boost::optional<PositionImage> open_subtitles_for_frame (dcpomatic::DCPTime time) const;
- void emit_video (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time);
- void do_emit_video (std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time);
+ boost::optional<PositionImage> open_texts_for_frame(dcpomatic::DCPTime time) const;
+ void emit_video(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time);
+ void use_video(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time, dcpomatic::DCPTime end);
void emit_audio (std::shared_ptr<AudioBuffers> data, dcpomatic::DCPTime time);
std::shared_ptr<const Playlist> playlist () const;
@@ -214,15 +216,12 @@ private:
/** Time of the next video that we will emit, or the time of the last accurate seek */
boost::optional<dcpomatic::DCPTime> _next_video_time;
- /** Eyes of the next video that we will emit */
- boost::optional<Eyes> _next_video_eyes;
/** Time of the next audio that we will emit, or the time of the last accurate seek */
boost::optional<dcpomatic::DCPTime> _next_audio_time;
boost::atomic<boost::optional<int>> _dcp_decode_reduction;
- typedef std::map<std::weak_ptr<Piece>, std::shared_ptr<PlayerVideo>, std::owner_less<std::weak_ptr<Piece>>> LastVideoMap;
- LastVideoMap _last_video;
+ EnumIndexedVector<std::pair<std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime>, Eyes> _last_video;
AudioMerger _audio_merger;
std::unique_ptr<Shuffler> _shuffler;
diff --git a/src/lib/player_video.cc b/src/lib/player_video.cc
index 35c5d3daa..247301d58 100644
--- a/src/lib/player_video.cc
+++ b/src/lib/player_video.cc
@@ -45,6 +45,7 @@ using std::weak_ptr;
using boost::optional;
using dcp::Data;
using dcp::raw_convert;
+using namespace dcpomatic;
PlayerVideo::PlayerVideo (
@@ -58,7 +59,7 @@ PlayerVideo::PlayerVideo (
optional<ColourConversion> colour_conversion,
VideoRange video_range,
weak_ptr<Content> content,
- optional<Frame> video_frame,
+ optional<ContentTime> video_time,
bool error
)
: _in (in)
@@ -71,7 +72,7 @@ PlayerVideo::PlayerVideo (
, _colour_conversion (colour_conversion)
, _video_range (video_range)
, _content (content)
- , _video_frame (video_frame)
+ , _video_time(video_time)
, _error (error)
{
@@ -199,29 +200,29 @@ PlayerVideo::make_image (function<AVPixelFormat (AVPixelFormat)> pixel_format, V
void
-PlayerVideo::add_metadata (xmlpp::Node* node) const
+PlayerVideo::add_metadata(xmlpp::Element* element) const
{
- _crop.as_xml (node);
+ _crop.as_xml(element);
if (_fade) {
- node->add_child("Fade")->add_child_text (raw_convert<string> (_fade.get ()));
+ cxml::add_text_child(element, "Fade", raw_convert<string>(_fade.get()));
}
- _in->add_metadata (node->add_child ("In"));
- node->add_child("InterWidth")->add_child_text (raw_convert<string> (_inter_size.width));
- node->add_child("InterHeight")->add_child_text (raw_convert<string> (_inter_size.height));
- node->add_child("OutWidth")->add_child_text (raw_convert<string> (_out_size.width));
- node->add_child("OutHeight")->add_child_text (raw_convert<string> (_out_size.height));
- node->add_child("Eyes")->add_child_text (raw_convert<string> (static_cast<int> (_eyes)));
- node->add_child("Part")->add_child_text (raw_convert<string> (static_cast<int> (_part)));
- node->add_child("VideoRange")->add_child_text(raw_convert<string>(static_cast<int>(_video_range)));
- node->add_child("Error")->add_child_text(_error ? "1" : "0");
+ _in->add_metadata(cxml::add_child(element, "In"));
+ cxml::add_text_child(element, "InterWidth", raw_convert<string>(_inter_size.width));
+ cxml::add_text_child(element, "InterHeight", raw_convert<string>(_inter_size.height));
+ cxml::add_text_child(element, "OutWidth", raw_convert<string>(_out_size.width));
+ cxml::add_text_child(element, "OutHeight", raw_convert<string>(_out_size.height));
+ cxml::add_text_child(element, "Eyes", raw_convert<string>(static_cast<int>(_eyes)));
+ cxml::add_text_child(element, "Part", raw_convert<string>(static_cast<int>(_part)));
+ cxml::add_text_child(element, "VideoRange", raw_convert<string>(static_cast<int>(_video_range)));
+ cxml::add_text_child(element, "Error", _error ? "1" : "0");
if (_colour_conversion) {
- _colour_conversion.get().as_xml (node);
+ _colour_conversion.get().as_xml(element);
}
if (_text) {
- node->add_child ("SubtitleWidth")->add_child_text (raw_convert<string> (_text->image->size().width));
- node->add_child ("SubtitleHeight")->add_child_text (raw_convert<string> (_text->image->size().height));
- node->add_child ("SubtitleX")->add_child_text (raw_convert<string> (_text->position.x));
- node->add_child ("SubtitleY")->add_child_text (raw_convert<string> (_text->position.y));
+ cxml::add_text_child(element, "SubtitleWidth", raw_convert<string>(_text->image->size().width));
+ cxml::add_text_child(element, "SubtitleHeight", raw_convert<string>(_text->image->size().height));
+ cxml::add_text_child(element, "SubtitleX", raw_convert<string>(_text->position.x));
+ cxml::add_text_child(element, "SubtitleY", raw_convert<string>(_text->position.y));
}
}
@@ -343,7 +344,7 @@ PlayerVideo::shallow_copy () const
_colour_conversion,
_video_range,
_content,
- _video_frame,
+ _video_time,
_error
);
}
@@ -356,12 +357,12 @@ bool
PlayerVideo::reset_metadata (shared_ptr<const Film> film, dcp::Size player_video_container_size)
{
auto content = _content.lock();
- if (!content || !_video_frame) {
+ if (!content || !_video_time) {
return false;
}
_crop = content->video->actual_crop();
- _fade = content->video->fade(film, _video_frame.get());
+ _fade = content->video->fade(film, _video_time.get());
auto const size = content->video->scaled_size(film->frame_size());
if (!size) {
return false;
diff --git a/src/lib/player_video.h b/src/lib/player_video.h
index f2781c1a0..e2968749c 100644
--- a/src/lib/player_video.h
+++ b/src/lib/player_video.h
@@ -59,7 +59,7 @@ public:
boost::optional<ColourConversion> colour_conversion,
VideoRange video_range,
std::weak_ptr<Content> content,
- boost::optional<Frame> video_frame,
+ boost::optional<dcpomatic::ContentTime> video_time,
bool error
);
@@ -82,7 +82,7 @@ public:
static AVPixelFormat force (AVPixelFormat);
static AVPixelFormat keep_xyz_or_rgb (AVPixelFormat);
- void add_metadata (xmlpp::Node* node) const;
+ void add_metadata(xmlpp::Element* element) const;
void write_to_socket (std::shared_ptr<Socket> socket) const;
bool reset_metadata (std::shared_ptr<const Film> film, dcp::Size player_video_container_size);
@@ -141,8 +141,8 @@ private:
boost::optional<PositionImage> _text;
/** Content that we came from. This is so that reset_metadata() can work. */
std::weak_ptr<Content> _content;
- /** Video frame that we came from. Again, this is for reset_metadata() */
- boost::optional<Frame> _video_frame;
+ /** Video time that we came from. Again, this is for reset_metadata() */
+ boost::optional<dcpomatic::ContentTime> _video_time;
mutable boost::mutex _mutex;
mutable std::shared_ptr<Image> _image;
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc
index 85957e106..ebeac47e2 100644
--- a/src/lib/playlist.cc
+++ b/src/lib/playlist.cc
@@ -25,6 +25,7 @@
#include "content_factory.h"
#include "dcp_content.h"
#include "digester.h"
+#include "film.h"
#include "ffmpeg_content.h"
#include "ffmpeg_decoder.h"
#include "image_decoder.h"
@@ -226,7 +227,7 @@ Playlist::set_from_xml (shared_ptr<const Film> film, cxml::ConstNodePtr node, in
boost::mutex::scoped_lock lm (_mutex);
for (auto i: node->node_children ("Content")) {
- auto content = content_factory (i, version, notes);
+ auto content = content_factory(i, film->directory(), version, notes);
/* See if this content should be nudged to start on a video frame */
auto const old_pos = content->position();
@@ -282,10 +283,10 @@ Playlist::set_from_xml (shared_ptr<const Film> film, cxml::ConstNodePtr node, in
* @param with_content_paths true to include &lt;Path&gt; nodes in &lt;Content&gt; nodes, false to omit them.
*/
void
-Playlist::as_xml (xmlpp::Node* node, bool with_content_paths)
+Playlist::as_xml(xmlpp::Element* element, bool with_content_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory)
{
for (auto i: content()) {
- i->as_xml (node->add_child ("Content"), with_content_paths);
+ i->as_xml(cxml::add_child(element, "Content"), with_content_paths, path_behaviour, film_directory);
}
}
@@ -645,16 +646,16 @@ Playlist::move_later (shared_ptr<const Film> film, shared_ptr<Content> c)
int64_t
-Playlist::required_disk_space (shared_ptr<const Film> film, int j2k_bandwidth, int audio_channels, int audio_frame_rate) const
+Playlist::required_disk_space(shared_ptr<const Film> film, int64_t video_bit_rate, int audio_channels, int audio_frame_rate) const
{
- int64_t video = uint64_t(j2k_bandwidth / 8) * length(film).seconds();
+ int64_t video = uint64_t(video_bit_rate / 8) * length(film).seconds();
int64_t audio = uint64_t(audio_channels) * audio_frame_rate * 3 * length(film).seconds();
for (auto i: content()) {
auto d = dynamic_pointer_cast<DCPContent> (i);
if (d) {
if (d->reference_video()) {
- video -= uint64_t (j2k_bandwidth / 8) * d->length_after_trim(film).seconds();
+ video -= uint64_t(video_bit_rate / 8) * d->length_after_trim(film).seconds();
}
if (d->reference_audio()) {
audio -= uint64_t(audio_channels) * audio_frame_rate * 3 * d->length_after_trim(film).seconds();
diff --git a/src/lib/playlist.h b/src/lib/playlist.h
index e2662eb45..79c140145 100644
--- a/src/lib/playlist.h
+++ b/src/lib/playlist.h
@@ -26,6 +26,7 @@
#include "change_signaller.h"
#include "dcpomatic_time.h"
#include "frame_rate_change.h"
+#include "path_behaviour.h"
#include "types.h"
#include <libcxml/cxml.h>
#include <boost/signals2.hpp>
@@ -50,7 +51,7 @@ public:
Playlist (Playlist const&) = delete;
Playlist& operator= (Playlist const&) = delete;
- void as_xml (xmlpp::Node *, bool with_content_paths);
+ void as_xml(xmlpp::Element*, bool with_content_paths, PathBehaviour path_behaviour, boost::optional<boost::filesystem::path> film_directory);
void set_from_xml (std::shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, std::list<std::string>& notes);
void add (std::shared_ptr<const Film> film, std::shared_ptr<Content>);
@@ -65,7 +66,7 @@ public:
dcpomatic::DCPTime length (std::shared_ptr<const Film> film) const;
boost::optional<dcpomatic::DCPTime> start () const;
- int64_t required_disk_space (std::shared_ptr<const Film> film, int j2k_bandwidth, int audio_channels, int audio_frame_rate) const;
+ int64_t required_disk_space(std::shared_ptr<const Film> film, int64_t video_bit_rate, int audio_channels, int audio_frame_rate) const;
int best_video_frame_rate () const;
dcpomatic::DCPTime video_end (std::shared_ptr<const Film> film) const;
diff --git a/src/lib/po/cs_CZ.po b/src/lib/po/cs_CZ.po
index 32cb6e9b2..715fae795 100644
--- a/src/lib/po/cs_CZ.po
+++ b/src/lib/po/cs_CZ.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2024-05-02 15:01+0200\n"
"Last-Translator: Tomáš Begeni <begeni@razdva.cz>\n"
"Language-Team: \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.2\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -27,7 +27,7 @@ msgstr ""
"\n"
"Snímková frekvence obsahu %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -35,7 +35,7 @@ msgstr ""
"\n"
"Oříznout na %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -44,7 +44,7 @@ msgstr ""
"\n"
"Poměr stran displeje %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -52,7 +52,7 @@ msgstr ""
"\n"
"VyplnÄ›né Äernou, aby se zmenÅ¡il do kontejneru %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -60,18 +60,18 @@ msgstr ""
"\n"
"Měřítko %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " na %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -95,39 +95,88 @@ msgstr ""
"Délka: $LENGTH\n"
"Velikost: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [zvuk]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [video]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [video]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic nemohl otevřít soubor %1 (%2). Možná, že soubor neexistuje nebo "
+"je v nepodporovaném formátu."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic musel změnit vaše nastavení pro odkazování na DCPs jako OV. "
+"Zkontrolujte prosím tato nastavení a ujistěte se, že je to to co chcete."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"DCP-o-matic musel změnit vaše nastavení tak, aby snímková frekvence filmu "
+"byla stejná jako u vašeho obsahu Atmos."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Emailové oznámení"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 snímků"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", poměr stran obrazových bodů %.2f:1"
@@ -164,11 +213,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Full frame)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr "10"
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr "16"
@@ -180,11 +229,11 @@ msgstr "2.35 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D denoiser"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -194,32 +243,33 @@ msgstr ""
"tento formát DCP projektor přehraje, je vhodné nastavit DCP na 2K na kartě "
"„DCP → Video“."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 zbývajících; dokonÄení v %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"h2>Vytvořili jste %1 DCPs s DCP-o-matic!</h2><img width=„20%%“ src=„memory:"
"me.jpg“ align=„center“><p>Dobrý den. Jsem Carl a jsem vývojář DCP-o-matic. "
@@ -233,10 +283,11 @@ msgstr ""
"com/donate_amount?amount=10“>Přejít na Paypal a darovat€10</a></"
"ul><p>Mockrát děkuji!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Některé projektory mají problémy s přehráváním s velmi vysokou přenosovou "
@@ -244,24 +295,25 @@ msgstr ""
"200 MB/s; Je nepravděpodobné, že by toto nastvení mělo viditelný vliv na "
"kvalitu obrázku."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"Soubor titulků nebo skrytých titulků v tomto projektu je oznaÄen jazykem "
"‚%1‘, který DCP-o-matic nerozpozná. Jazyk souboru byl vymazán."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Reklama"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -272,7 +324,7 @@ msgstr ""
"Bude použit letter-box uvnitÅ™ rámeÄku Flat (1.85:1). Můžete nastavit DCP "
"kontejner na Scope (2.39:1) v záložce \"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -282,7 +334,7 @@ msgstr ""
"(2.39:1). Na obsah bude použit pillar-box. Můžete raději nastavit kontejner "
"DCP tak, aby měl stejný poměr jako váš obsah."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Vyskytla se chyba při zpracování souboru %1."
@@ -290,28 +342,28 @@ msgstr "Vyskytla se chyba při zpracování souboru %1."
msgid "Analysing audio"
msgstr "Analýza zvuku"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Analýza titulků"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr "ZnaÄka která pÅ™ijde po konci projektu, bude ignorována."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Jeden z vašich souborů skrytých titulků je větší než "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "Jeden z vašich XML souborů se skrytými titulky je větší než "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Jeden z vašich souborů s titulky je větší než "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -319,7 +371,7 @@ msgstr ""
"Jeden z vaÅ¡ich řádků s titulky má více než 52 znaků. DoporuÄuje se, aby "
"každý řádek měl maximálně 52 znaků."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -327,7 +379,7 @@ msgstr ""
"Jeden z vašich titulků má více než 79 znaků. Každý řádek by měl být dlouhý "
"maximálně 79 znaků."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -335,7 +387,7 @@ msgstr ""
"Jeden z vaÅ¡ich titulků má více než 3 řádky. DoporuÄuje se použít maximálnÄ› 3 "
"řádky."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -343,7 +395,7 @@ msgstr ""
"Jeden z vaÅ¡ich titulků trvá ménÄ› než 15 snímků. DoporuÄuje se, aby každý "
"podnadpis měl délku alespoň 15 snímků."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -351,7 +403,7 @@ msgstr ""
"Jeden z vaÅ¡ich titulků zaÄíná ménÄ› než 2 snímky po pÅ™edchozím. DoporuÄuje "
"se, aby mezera mezi titulky byla alespoň 2 snímky."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -373,72 +425,72 @@ msgstr "Zvuk bude re-samplovaný na %1Hz"
msgid "Audio will not be resampled"
msgstr "Zvuk nebude resamplovaný"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 rozšířený rozsah barev"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 konstanta jasu"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 pro 10-bit systém"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 pro 12-bit systém"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 non-constant luminance"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bitů na pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Bob Weaver deinterlacing filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Zrušené"
@@ -450,11 +502,11 @@ msgstr "Nemůže obsahovat lomítka"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Nemužu zpracovat formát pixelu %1 během %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Nelze vytvořit KDM, protože tento projekt není zašifrován."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Center"
@@ -462,7 +514,7 @@ msgstr "Center"
msgid "Channels"
msgstr "Kanály"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "Zkontrolujte jejich nové nastavení a zkuste to znovu."
@@ -470,27 +522,32 @@ msgstr "Zkontrolujte jejich nové nastavení a zkuste to znovu."
msgid "Checking content"
msgstr "Kontrola obsahu"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Kontroluji existující video data"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Chroma-derived konstantní svítivost"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Chroma-derived nekonstantní svítivost"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr "Klip"
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Skryté titulky"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Otevřít titulky"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Primární volby barev"
@@ -504,17 +561,17 @@ msgstr "Primární volby barev"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Rozsah barev"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Charakteristika přenosu barev"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Barevný prostor"
@@ -522,15 +579,15 @@ msgstr "Barevný prostor"
msgid "Combine DCPs"
msgstr "Kombinovat DCPs"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "VýpoÄet digest"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "VýpoÄet digests"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "Blahopřejeme!"
@@ -546,19 +603,19 @@ msgstr "Bitová hloubka obsahu"
msgid "Content sample rate"
msgstr "Vzorkovací frekvence obsahu"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "VeÅ¡kerý obsah ke slouÄení musí mít audio nebo žádné audio"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "VeÅ¡kerý obsah ke slouÄení musí nebo nemusí obsahovat titulky"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "VeÅ¡kerý obsah ke slouÄení musí mít video nebo žádné video"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -571,11 +628,11 @@ msgstr ""
"Obsah, který má být připojen, musí obsahovat všechna jeho použitá nebo "
"nepoužitá videa."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr "Aby se spojil obsah, musí mít stejné nastavení ’vypálené titulky'."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr "Aby se spojil obsah, musí mít stejné nastavení ’použít titulky'."
@@ -613,7 +670,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr "Aby se spojil obsah, musí mít stejné nastavení zeslabení."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Připojený obsah musí mít stejnou šířku obrysu."
@@ -621,31 +678,31 @@ msgstr "Připojený obsah musí mít stejnou šířku obrysu."
msgid "Content to be joined must have the same picture size."
msgstr "Aby se spojil obsah, musí mít stejné nastavení velikosti obrazu."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "Aby se spojil obsah, musí mít stejné nastavení titulků X offset."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Aby se spojil obsah, musí mít stejné nastavení titulky X měřítko."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "Aby se spojil obsah, musí mít stejné nastavení titulkový Y offset."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Aby se spojil obsah, musí mít stejné nastavení titulků Y měřítko."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "VeÅ¡kerý obsah ke slouÄení musí mít stejné zeslabení titulků."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "VeÅ¡kerý obsah ke slouÄení musí mít stejné mezery mezi řádky titulků."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "VeÅ¡kerý obsah ke slouÄení musí mít stejnou snímkovou rychlost"
@@ -653,24 +710,24 @@ msgstr "VeÅ¡kerý obsah ke slouÄení musí mít stejnou snímkovou rychlost"
msgid "Content to be joined must have the same video frame type."
msgstr "Aby se spojil obsah, musí mít stejné nastavení typu videa."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "Aby se spojil obsah, musí používat stejnou DCP stopu ."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Aby se spojil obsah, musí mít stejné nastavení písma."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Aby se spojil obsah, musí mít stejné nastavení titulkového streamu."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr ""
"Obsah, ke kterému se chcete připojit, musí používat stejný jazyk textu."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Video je %1x%2"
@@ -678,14 +735,6 @@ msgstr "Video je %1x%2"
msgid "Copy DCP to TMS"
msgstr "Kopírovat DCP do TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Kopírování starého souboru videa"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Kopírování video souboru do DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Nemohu se připojit k serveru %1 (%2)"
@@ -702,20 +751,21 @@ msgstr "Nemohu dekódovat JPEG2000 soubor %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Nelze dekódovat obraz (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Nemohu otevřít ZIP soubor"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Nemohu zkontrolovat vzdálené enkódovací servery. Možná je už DCP-o-matic "
"zapnutý."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Nemohu otevřít %1"
@@ -723,19 +773,19 @@ msgstr "Nemohu otevřít %1"
msgid "Could not open %1 to send"
msgstr "Nemohu otevřít %1 k poslání"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Nemohu otevřít ZIP soubor"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Nemohu otevřít stažený ZIP soubor (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Nemohu otevřít soubor pro zápis"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "Nelze otevřít výstupní soubor% 1 (% 2)"
@@ -751,19 +801,19 @@ msgstr "Nemohu zaÄít pÅ™enos"
msgid "Could not write to remote file (%1)"
msgstr "Nemohu zapisovat do vzdáleného souboru (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX primární"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX sekundární"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -775,7 +825,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML titulky"
@@ -792,49 +842,35 @@ msgstr "DCP bude běžet na %.1f%% obsahu videa.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP bude používat každý druhý frame obsahu \n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic nemohl otevřít soubor %1 (%2). Možná, že soubor neexistuje nebo "
-"je v nepodporovaném formátu."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic musel změnit vaše nastavení pro odkazování na DCPs jako OV. "
-"Zkontrolujte prosím tato nastavení a ujistěte se, že je to to co chcete."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic musel změnit vaše nastavení tak, aby snímková frekvence filmu "
-"byla stejná jako u vašeho obsahu Atmos."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "DCP-o-matic oznámení"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 nebo AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "De-interlacing"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -846,7 +882,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Milý promítaÄi,\n"
"\n"
@@ -860,11 +896,15 @@ msgstr ""
"Děkujeme a přejeme pěkný den,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 nebo CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Stahování selhalo (%1 error %2)"
@@ -888,19 +928,19 @@ msgstr "Email KDM pro %2"
msgid "Email notification"
msgstr "Emailové oznámení"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Správa o problému s Emailem"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Správa o problému s Emailem pro %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Kódování"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Epizoda"
@@ -908,19 +948,19 @@ msgstr "Epizoda"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Chyba v souboru titulků: vidÄ›ný %1 a byl oÄekávaný %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Chyba: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr "Událost"
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
msgid "Examining audio"
msgstr "Zkoumání zvuku"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Zkoumání zvuku, titulků a skrytých titulků"
@@ -932,15 +972,15 @@ msgstr "Zkoumání obsahu"
msgid "Examining subtitles"
msgstr "Zkoumání titulků"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Zkoumání titulků a skrytých titulků"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Rozbalování"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -948,51 +988,51 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Chyba při autentifikování se serverem (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Kódování DCP se nezdařilo."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Odeslání e-mailu se nezdařilo"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Feature"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Jméno souboru"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr "Jména souborů"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "Soubory se od doby přidání do projektu změnily."
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Zjištění délky"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Snímková frekvence"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Pátek"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Full"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Full (0-%1)"
@@ -1016,35 +1056,35 @@ msgstr "Plná délka video snímků v DCP rychlosti"
msgid "Full length in video frames at content rate"
msgstr "Plná délka video snímků v rychlosti obsahu"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradient debander"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Sluchově postižený(í)"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Vysoká kvalita 3D denoiser"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr "Zvýraznění"
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Horizontální flip"
@@ -1052,19 +1092,19 @@ msgstr "Horizontální flip"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB nebo sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "Používáte-li 25fps, měli byste změnit váš standard DCP na SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
@@ -1074,9 +1114,10 @@ msgstr ""
"používat Interop. Je vhodné nastavit váš DCP tak, aby používal standard "
"SMPTE v záložce „DCP“."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
+#, fuzzy
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
@@ -1086,7 +1127,7 @@ msgstr ""
"ve svém projektu, abyste se ujistili, že jsou umístěny tam, kde je chcete "
"mít."
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1094,72 +1135,73 @@ msgstr ""
"DoporuÄujeme vložit první titulky alespoň 4 sekundy po spuÅ¡tÄ›ní DCP, abyste "
"měli jistotu, že budou vidět."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Nevím, co zapříÄinilo tuto chybu."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "KDM doruÄení: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Kernel deinterlacer"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Left (Levý)"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Left centre (Levý střed)"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Left rear surround (Levý zadní surround)"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Left surround (Levý surround)"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Délka"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (Subwoofer)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limitovaný"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
msgid "Limited / video (%1-%2)"
msgstr "Omezené / video (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Lineární"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarmitmický (rozsah 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarmitmický (rozsah 316:1 )"
@@ -1167,7 +1209,7 @@ msgstr "Logarmitmický (rozsah 316:1 )"
msgid "Lost communication between main and writer processes"
msgstr "Ztráta komunikace mezi hlavními a zapisovanými procesy"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1175,24 +1217,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Mid-side dekodér"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Různé"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "PoÄet zvukových kanálů se v DCP neschoduje"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Vzorkovací kmitoÄet zvuku v DCP neschoduje"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "V DPC se neschoduje poÄet obrázků za sekundu"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "V DCP se neshoduje velikost videa"
@@ -1200,19 +1242,19 @@ msgstr "V DCP se neshoduje velikost videa"
msgid "Missing required setting %1"
msgstr "Chybí potřebná nastavení %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Pondělí"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Pohybový kompenzaÄní odstraňovaÄ"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "V DCP nebyla nalezena žádná CPLs."
@@ -1225,76 +1267,90 @@ msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr ""
"Na kartě E-mail v předvolbách není nakonfigurován žádný server odchozí pošty"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Ve složce nebyly nalezeny žádné platné soubory."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Redukce hluku"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Žádný"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr "OK"
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (spuštěno od %1 do %2 to %3)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (hotovo za %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "Jen pravá Äást pÅ™ipojeného obsahu může být upravená od zaÄátku."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Jen poslední Äást pÅ™ipojeného obsahu může být upravená od konce."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Skryté titulky"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Otevřít titulky"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
+#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Otevřete projekt v programu DCP-o-matic, zkontrolujte nastavení a před "
"dalším pokusem jej uložte."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Orientace"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Málo paměti"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Overcomplete wavelet denoiser"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Nahlásit tento problém pomocí Nápovědy -> Nahlásit problém e-mailem na "
+"adresu carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Policy"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr "Předem násobit alfa kanál"
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Příprava pro snímkovou frekvenci videa"
@@ -1302,93 +1358,93 @@ msgstr "Příprava pro snímkovou frekvenci videa"
msgid "Programming error at %1:%2 %3"
msgstr "Chyba při programovaní na %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promo"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Public Service Announcement (Veřejné oznámení služby)"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Přístupnost"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601 (SD)"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709 (HD)"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Right (Pravý)"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Right centre (Pravý střed)"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Right rear surround (Pravý zadní surround)"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Right surround (Pravý surround)"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "OtoÄit o 90 stupňů proti smÄ›ru hodinových ruÄiÄek"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "OtoÄit o 90 stupňů po smÄ›ru hodinových ruÄiÄek"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1398,23 +1454,23 @@ msgstr ""
"závÄ›reÄných titulků (FFEC) a první snímek pohyblivých titulků (FFMC). Tyto "
"znaÄky byste mÄ›li pÅ™idat pomocí tlaÄítka „ZnaÄky“ na kartÄ› „DCP“."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1427,27 +1483,27 @@ msgstr "SSH chyba [%1]"
msgid "SSH error [%1] (%2)"
msgstr "SSH chyba [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Sobota"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Skenování obrazových souborů"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Posílám email"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Short (Krátky film)"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Podepsat"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Velikost"
@@ -1455,11 +1511,11 @@ msgstr "Velikost"
msgid "Some audio will be resampled to %1Hz"
msgstr "Některé audio bude převzorkované na %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr "Některé soubory byly od svého přidání do projektu změněny."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1482,7 +1538,7 @@ msgstr ""
"Tyto soubory budou nyní znovu přezkoumány, takže bude pravděpodobně nutné "
"zkontrolovat jejich nastavení."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
@@ -1490,7 +1546,7 @@ msgstr ""
"Některé ze skrytých titulků jsou rozloženy na více než %1 řádcích, takže "
"budou zkráceny."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1512,11 +1568,11 @@ msgstr "Část vašeho obsahu potřebuje KDM"
msgid "Some of your content needs an OV"
msgstr "Část vašeho obsahu potřebuje OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr "Stereo karta"
@@ -1528,19 +1584,19 @@ msgstr "Stereo na 5.1 up-mixer A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Stereo na 5.1 up-mixer B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Neděle"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser (Krátká upoutávka)"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Telecine Filter"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1560,13 +1616,14 @@ msgstr "Řetěz certifikátů pro podepisování je neplatný"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Řetěz certifikátů pro podepisování je neplatný (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
+#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"Řetězec certifikátů, který DCP-o-matic používá k podepisování DCP a KDM, "
"obsahuje malou chybu, která zabrání správnému ověření DCP na některých "
@@ -1574,13 +1631,14 @@ msgstr ""
"kliknutím na tlaÄítko „Znovu vytvoÅ™it certifikáty a klíÄ…“ na stránce KlíÄe "
"v Předvolbách."
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
+#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"Řetěz certifikátů, který DCP-o-matic používá k podepisování DCP a KDM, má "
"příliš dlouhou dobu platnosti. To způsobí problémy s přehráváním DCP na "
@@ -1588,7 +1646,7 @@ msgstr ""
"certifikátů kliknutím na tlaÄítko „Znovu vytvoÅ™it certifikáty a klíÄ…“ na "
"stránce KlíÄe v PÅ™edvolbách."
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1598,7 +1656,7 @@ msgstr ""
"Nastavte jej na 2D. 3D DCP z tohoto obsahu můžete stále vytvořit "
"zaÅ¡krtnutím políÄka 3D na kartÄ› DCP video."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1606,23 +1664,42 @@ msgstr ""
"Disk, na kterém se nachází film už má málo volného místa. Uvolněte místo a "
"zkuste to znovu."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Soubor %1 byl posunut o %2 milisekund dříve."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Soubor %1 byl posunut o %2 milisekund později."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Soubor %1 byl oříznut o %2 milisekund méně."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Soubor %1 byl oříznut o %2 milisekund více."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+#, fuzzy
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+"V této verzi došlo ke změnám v umístění titulků. Umístění by nyní mělo být "
+"správnější s ohledem na normy, ale měli byste zkontrolovat všechny titulky "
+"ve svém projektu, abyste se ujistili, že jsou umístěny tam, kde je chcete "
+"mít."
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1636,11 +1713,11 @@ msgstr ""
"která je blíže vaÅ¡emu obsahu, za pÅ™edpokladu, že vaÅ¡e cílové projekÄní "
"systémy podporují vámi zvolenou rychlost DCP."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "V tomto DCP není video"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1649,31 +1726,34 @@ msgstr ""
"Zbývá málo pamÄ›ti. Pokud je váš systém 32-bitový, zkuste snížit poÄet "
"enkódovacích threadov v záložce Všeobecné, v nastavení."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr "KDM byl vytvořen pro DCP-o-matic, ale ne pro jeho koncový certifikát."
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr "Tento KDM nebyl vyroben pro dešifrovací certifikát DCP-o-matic."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"K této chybě pravděpodobně došlo, protože používáte 32bitovou verzi DCP-o-"
"matic a pokoušíte se použít příliÅ¡ mnoho vláken kódování. Snižte poÄet "
"vláken, které by měl používat DCP-o-matic na kartě Obecné předvoleby a akci "
"opakujte."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"K této chybě pravděpodobně došlo, protože používáte 32bitovou verzi DCP-o-"
"matic. Znovu nainstalujte DCP-o-matic pomocí 64bitového instalaÄního "
@@ -1687,45 +1767,47 @@ msgstr ""
"Tento soubor je KDM. KDM by měly být přidány do obsahu DCP klepnutím pravým "
"tlaÄítkem myÅ¡i na obsah a výbÄ›rem možnosti “PÅ™idat KDMâ€."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Tento film byl vytvoÅ™ený novÄ›jší verzí DCP-o-matic, a nemůže být naÄtený "
"touto verzí. Omlouváme se !"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Tento film bol vytvořený starší verzí DCP-o-matic, a bohužel nemůže být "
"naÄtený do do této verze. Budete muset vytvoÅ™it nový Film, znovu pÅ™idat váš "
"obsah a znovu provést nastavení. Omlouváme se!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "ÄŒtvrtek"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Časovaný text"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Překódování %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitional (Přechod)"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Úterý"
@@ -1733,7 +1815,7 @@ msgstr "Úterý"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "NeoÄekávaný obsah ZIP"
@@ -1741,35 +1823,35 @@ msgstr "NeoÄekávaný obsah ZIP"
msgid "Unexpected image type received by server"
msgstr "Server obdržel neoÄekávaný typ obrazu"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Neznámé"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Neznáma chyba"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Nerozpoznaná vzorkovací frekvence audia (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Doostření a Gaussovské rozostření"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Nespecifikované"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Nepojmenované"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Nepoužité"
@@ -1781,7 +1863,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1789,11 +1871,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Ověřit DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Vertikální flip"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Zrakově postižený(í)"
@@ -1801,23 +1883,23 @@ msgstr "Zrakově postižený(í)"
msgid "Waiting"
msgstr "Čekám"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Filtr vazby"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Středa"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Ještě další deinterlacing filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
@@ -1827,7 +1909,7 @@ msgstr ""
"není podporována vÅ¡emi projektory. DoporuÄujeme zmÄ›nit snímkovou frekvenci "
"DCP na %2 fps."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1837,7 +1919,7 @@ msgstr ""
"není podporována všemi projektory. Možná budete chtít změnit snímkovou "
"frekvenci na %2 fps."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1845,25 +1927,26 @@ msgstr ""
"Nastavili jste pro DCP snímkovou frekvenci na 30fps, která není podporována "
"všemi projektory. Mějte na paměti, že můžete mít potíže s kompatibilitou."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Používáte 3D obsah, ale váš DCP je nastaven na 2D. Nastavte DCP na 3D, pokud "
-"chcete přehrávat ve 3D systému (např. Real-D, MasterImage atd.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Používáte DCP-o-matic’s stereo-to-5.1 mixer. Ten je experimentální a může "
"mít za následek Å¡patnou kvalitu zvuku. Pokud budete pokraÄovat, mÄ›li byste "
"poslouchat výsledný DCP v kině, abyste se ujistili, že to zní dobře."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Používáte 3D obsah, ale váš DCP je nastaven na 2D. Nastavte DCP na 3D, pokud "
+"chcete přehrávat ve 3D systému (např. Real-D, MasterImage atd.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1871,7 +1954,7 @@ msgstr ""
"Máte %1 souborů, které vypadají jako VOB soubory z DVD. Měli byste je "
"spojit, aby zajistit tak hladké spojení mezi těmito dvěma soubory."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1879,7 +1962,7 @@ msgstr ""
"Máte více než jednu Äást obsahu Atmos která nemá stejnou snímkovou "
"frekvenci. Musíte odstranit nějaký obsah Atmos."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1887,7 +1970,7 @@ msgstr ""
"Máte překrývající se skryté titulky, které nejsou povoleny v Interop DCPs. "
"Změňte standard DCP na SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1899,7 +1982,7 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Musíte přidat obsah do DCP před tím než ho vytvoříte"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
@@ -1909,18 +1992,19 @@ msgstr ""
"někteří distributoři při kontrole vašeho DCP zvýší chyby kontroly kvality. "
"Abyste tomu zabránili, nastavte zvukové kanály DCP na 8 nebo 16."
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"DCP má méně než 6 zvukových kanálů. To může způsobit problémy na některých "
"projektorech. Možná budete chtít nastavit DCP na 6 kanálů.. Nezáleží na "
"tom, zda má váš obsah méně kanálů, protože DCP-o-matic naplní doplňky tichem."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1928,41 +2012,41 @@ msgstr ""
"Vaše DCP používá neobvyklý poměr. To může u některých projektorů způsobit "
"problémy. Pokud je to možné, použijte pro poměr DCP formát Flat nebo Scope."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr ""
"Hlasitost zvuku je velmi vysoká (na %1). Snižte zesílení zvukového obsahu."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"Váš projekt obsahuje videoobsah, který nebyl zarovnán s hranicí snímku."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr ""
"Váš projekt obsahuje videoobsah, jehož obrys nebyl zarovnán s hranicí snímku."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[přesouvám obrázky]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[stále]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[titulky]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_reel%1"
@@ -1994,11 +2078,11 @@ msgstr "kopíruji %1"
msgid "could not find stream information"
msgstr "nemohu najít informace o streamu"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "nemohu přesunout atmos asset do DCP (% 1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "nemohu přesunout audio do DCP (%1)"
@@ -2026,7 +2110,7 @@ msgstr "nemohu zapisovat do souboru %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "chyba při async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "chyba při async_read (%1)"
@@ -2034,28 +2118,28 @@ msgstr "chyba při async_read (%1)"
msgid "error during async_write (%1)"
msgstr "chyba při async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "snímky za sekundu"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "má jinou snímkovou frekvenci za sekundu pro film."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
@@ -2063,35 +2147,45 @@ msgstr ""
"titulky."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "je 2K a film je 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "je 4K a film je 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "to je Interop a film je nastaven na SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "to je SMPTE a film je Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "překrývá jiný zvukový obsah; odstranit jiný obsah."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "překrývá jiný zvukový obsah; odstranit jiný obsah."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "překrývá se s jiným videoobsahem; odstranit jiný obsah."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2100,16 +2194,16 @@ msgstr ""
"obsahu videa’."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "velikost video rámeÄku se liší od filmu."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "přesouvám"
@@ -2118,7 +2212,7 @@ msgid "name"
msgstr "jméno"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2126,37 +2220,45 @@ msgstr ""
"jeden ze skrytých titulků má nenulový vstupní bod, takže musí být přepsán."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr "jeden z titulků má nenulový vstupní bod, takže musí být přepsán."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "stále"
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr "překrývá se s jiným textovým obsahem; odeberte další obsah."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "neznáme"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "video snímky"
+#~ msgid "Copying old video file"
+#~ msgstr "Kopírování starého souboru videa"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Kopírování video souboru do DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "DCP-o-matic oznámení"
+
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "překrývá se s jiným textovým obsahem; odeberte další obsah."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "nemá skryté titulky ve všech reelech."
@@ -2167,13 +2269,6 @@ msgstr "video snímky"
#~ msgstr "nemá zvuk ve všech reelech."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Nahlásit tento problém pomocí Nápovědy -> Nahlásit problém e-mailem na "
-#~ "adresu carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr "Výchozí kontejner není platný a byl změněn na Flat (1,85: 1)"
diff --git a/src/lib/po/da_DK.po b/src/lib/po/da_DK.po
index 1007204c0..d2d6b55e0 100644
--- a/src/lib/po/da_DK.po
+++ b/src/lib/po/da_DK.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2019-04-06 12:29+0200\n"
"Last-Translator: FULL NAME &lt;EMAIL@ADDRESS&gt;\n"
"Language-Team: LANGUAGE &lt;LL@li.org&gt;\n"
@@ -17,7 +17,7 @@ msgstr ""
"X-Generator: Poedit 2.1.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Indholds billedhastighed %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Beskåret til %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Skærmformat %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Udfyldt med sort for at tilpasse til container %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Skaleret til %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " på %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -94,39 +94,92 @@ msgstr ""
"Længde: $LENGTH\n"
"Størrelse: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [lyd]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [video]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic kunne ikke åbne filen %1 (%2). Måske findes den ikke, eller den "
+"er i et uventet format."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic var nødt til at ændre dine instillinger for at referere til "
+"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som "
+"ønsket."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"DCP-o-matic var nødt til at ændre dine instillinger for at referere til "
+"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som "
+"ønsket."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+"DCP-o-matic understøtter ikke længere `%1'-filteret, så det er blevet slået "
+"fra."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Email besked"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", pixel format %.2f:1"
@@ -163,11 +216,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Fuldt billede)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -180,71 +233,72 @@ msgstr "2.35 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D-denoiser"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 bps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 mangler; færdig ca %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Nogle projektorer har problemer med at afspille DCPere med meget høj "
"bithastighed. Det vil være en god ide at sætte JPEG2000 båndbredden ned til "
"ca. 200Mbit/s - det bør ikke have nogen synlig effekt på billedet."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Reklamer (ADV)"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -256,7 +310,7 @@ msgstr ""
"billede. Du vil måske foretrække at sætte din DCP's container til Scope "
"(2.39:1) i fanen \"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
#, fuzzy
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
@@ -268,7 +322,7 @@ msgstr ""
"måske foretrække at sætte din DCP's container til at have samme "
"størrelsesforhold som dit indhold."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Der skete en fejl, mens der blev arbejdet på filen %1."
@@ -276,59 +330,59 @@ msgstr "Der skete en fejl, mens der blev arbejdet på filen %1."
msgid "Analysing audio"
msgstr "Analyserer lyd"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
#, fuzzy
msgid "Analysing subtitles"
msgstr "Undersøger undertekster"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -347,73 +401,73 @@ msgstr "Lyd resamples til %1Hz"
msgid "Audio will not be resampled"
msgstr "Lyd bliver ikke resamplet"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 udvidet farveskala"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 konstant luminans"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 til 10 bit system"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 til 12 bit system"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 variabel luminans"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits per pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
#, fuzzy
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Endnu et Deinterlacing Filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsV"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsH"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Annulleret"
@@ -425,11 +479,11 @@ msgstr "Må ikke indeholde skråstreger"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Kan ikke håndtere pixelformat %1 under %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Kan ikke generere en KDM da projektet ikke er krypteret."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Center"
@@ -437,7 +491,7 @@ msgstr "Center"
msgid "Channels"
msgstr "Lyd kanaler"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -446,27 +500,32 @@ msgstr ""
msgid "Checking content"
msgstr "Undersøger om der er ændringer i indholdet"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Verificerer eksisterende billeddata"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Chroma-afledt konstant luminans"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Chroma-afledt ikke-konstant luminans"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Lukkede billedtekster"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Ã…bne undertekster"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Primærfarver"
@@ -480,17 +539,17 @@ msgstr "Primærfarver"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Farveskala"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Farveoverføringskarakteristik"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Farverum"
@@ -498,15 +557,15 @@ msgstr "Farverum"
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Beregner resume"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Beregner resumeer"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -524,24 +583,24 @@ msgstr "indholdstype"
msgid "Content sample rate"
msgstr "Lydindholds sample rate"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
"Elementer der skal splejses skal enten alle have lyd eller slet ikke have lyd"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Elementer der skal splejses skal alle have eller slet ikke have undertekster "
"eller billedtekster"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
"Elementer der skal splejses skal enten alle have billede eller slet ikke "
"have billede"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
#, fuzzy
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
@@ -553,13 +612,13 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "Indhold der skal splejses skal have samme billedhastighed"
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"Indhold der skal splejses skal have samme indstilling af 'Brænd undertekster "
"ind i billedet'."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Indhold der skal splejses skal have den samme indstilling af 'brug "
@@ -602,7 +661,7 @@ msgstr "Indhold der skal splejses skal have samme skaleringsindstilling."
msgid "Content to be joined must have the same fades."
msgstr "Indhold der skal splejses skal fade på samme måde."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Indhold der skal splejses skal have samme breddeindramning."
@@ -610,32 +669,32 @@ msgstr "Indhold der skal splejses skal have samme breddeindramning."
msgid "Content to be joined must have the same picture size."
msgstr "Indhold der skal splejses skal have samme billedstørrelse."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "Indhold der skal splejses skal have samme X offset for undertekst."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Indhold der skal splejses skal have samme X skalering af undertekst."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "Indhold der skal splejses skal have samme Y offset for undertekst."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Indhold der skal splejses skal have samme Y skalering af undertekst."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "Indhold der skal splejses skal have samme udtoning af undertekster."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"Indhold der skal splejses skal have samme linjeafstand på undertekster."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Indhold der skal splejses skal have samme billedhastighed"
@@ -643,24 +702,24 @@ msgstr "Indhold der skal splejses skal have samme billedhastighed"
msgid "Content to be joined must have the same video frame type."
msgstr "Indhold der skal splejses skal have samme billedtype."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "Indhold der skal splejses skal bruge det samme DCP-spor."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Indhold der skal splejses skal bruge samme skrifttype."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Indhold der skal splejses skal bruge samme tekstningsstrøm."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
#, fuzzy
msgid "Content to be joined must use the same text language."
msgstr "Indhold der skal splejses skal bruge samme skrifttype."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Indholdsvideo er %1x%2"
@@ -668,15 +727,6 @@ msgstr "Indholdsvideo er %1x%2"
msgid "Copy DCP to TMS"
msgstr "Kopier DCP til TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-#, fuzzy
-msgid "Copying video file into DCP"
-msgstr "Videostørrelser passer ikke i DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Kunne ikke få forbindelse til server %1 (%2)"
@@ -693,20 +743,21 @@ msgstr "Kunne ikke læse JPEG2000 fil %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Kunne ikke afkode billedet (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Kunne ikke åbne downloadet ZIP-fil"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Kunne ikke lytte efter andre genereringsservere. Måske kører en anden "
"instans af DCP-o-matic."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Kunne ikke åbne %1"
@@ -714,19 +765,19 @@ msgstr "Kunne ikke åbne %1"
msgid "Could not open %1 to send"
msgstr "Kunne ikke åbne %1 til afsendelse"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Kunne ikke åbne downloadet ZIP-fil"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Den hentede ZIP-fil (%1:%2: %3) kunne ikke åbnes."
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Kunne ikke åbne fil til skrivning"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
#, fuzzy
msgid "Could not open output file %1 (%2)"
msgstr "kunne ikke skrive til fil %1 (%2)"
@@ -743,19 +794,19 @@ msgstr "Kunne ikke starte overførsel"
msgid "Could not write to remote file (%1)"
msgstr "Kunne ikke skrive til fjernfil. (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "primær D-BOX"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "sekundær D-BOX"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -767,7 +818,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML undertekster"
@@ -784,54 +835,35 @@ msgstr "DCP vil køre ved %.1f%% af indholdshastigheden.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP vil bruge hvert andet billede fra indholdet.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic kunne ikke åbne filen %1 (%2). Måske findes den ikke, eller den "
-"er i et uventet format."
-
-#: src/lib/film.cc:1596
-msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
-msgstr ""
-"DCP-o-matic var nødt til at ændre dine instillinger for at referere til "
-"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som "
-"ønsket."
-#: src/lib/film.cc:1564
-#, fuzzy
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic var nødt til at ændre dine instillinger for at referere til "
-"DCPer som OV. Gennemse venligst indstillingerne for at sikre at de er som "
-"ønsket."
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic understøtter ikke længere `%1'-filteret, så det er blevet slået "
-"fra."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "DCP-o-matic besked"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Sammenfletning (de-interlacing)"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -843,7 +875,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Kære operatør\n"
"\n"
@@ -857,12 +889,16 @@ msgstr ""
"Med venlig hilsen,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
#, fuzzy
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 og CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Download fejlede (%1 fejl %2)"
@@ -888,19 +924,19 @@ msgstr "E-mail KDM'er til %1"
msgid "Email notification"
msgstr "Email besked"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Send problemrapport som mail"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Send problemrapport som mail til %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Kodning"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -908,20 +944,20 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Fejl i fil med undertekster: så %1 men forventede %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Fejl: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Undersøger undertekster"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
#, fuzzy
msgid "Examining audio, subtitles and closed captions"
msgstr "Undersøger billedtekster"
@@ -934,17 +970,17 @@ msgstr "Undersøger indhold"
msgid "Examining subtitles"
msgstr "Undersøger undertekster"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
#, fuzzy
msgid "Examining subtitles and closed captions"
msgstr "Undersøger billedtekster"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
#, fuzzy
msgid "Extracting"
msgstr "Censur"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -952,53 +988,53 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Kunne ikke godkende mod server (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
#, fuzzy
msgid "Failed to encode the DCP."
msgstr "Afsendelse af e-mail mislykkedes"
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Afsendelse af e-mail mislykkedes"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Feature"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Filnavn"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Filnavn"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Beregner længde"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Billedhastighed"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Fredag"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Fuld"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Fuld (0-%1)"
@@ -1022,35 +1058,35 @@ msgstr "Full length in video frames at DCP rate"
msgid "Full length in video frames at content rate"
msgstr "Full length in video frames at content rate"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradient debander"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HH"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Hørehæmmede"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Høj-kvalitets 3D-denoiser"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Horizontal flip"
@@ -1058,106 +1094,107 @@ msgstr "Horizontal flip"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB eller sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "Når du benytter 25bps bør du ændre DCP standard til SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Det er uklart hvad der forårsagede denne fejl."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "KDM-levering: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Kerne sammenfletter"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Venstre"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Venstre center"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Venstre bag surround"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Venstre surround"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Længde"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Begrænset"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Begrænset (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Lineær"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logaritmisk (100:1 range)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logaritmisk (316:1 range)"
@@ -1165,7 +1202,7 @@ msgstr "Logaritmisk (316:1 range)"
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1173,24 +1210,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Mid-side dekoder"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Diverse"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Antallet af lydkanaler passer ikke i DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Uoverensstemmelse mellem lydsamplingshastigheder i DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Billedhastigheder passer ikke i DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Videostørrelser passer ikke i DCP"
@@ -1198,19 +1235,19 @@ msgstr "Videostørrelser passer ikke i DCP"
msgid "Missing required setting %1"
msgstr "Mangler påkrævet indstilling %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Mandag"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Bevægelseskompenserende deinterlacer"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "Der blev ikke fundet CPL'er i DCPen."
@@ -1224,80 +1261,93 @@ msgstr "Mail server er ikke sat op i indstillinger"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Mail server er ikke sat op i indstillinger"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Ingen korrekte billedfiler kunne findes i folderen."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Støjreduktion"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Ingen"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (kørte i %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (kørte i %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "Kun det første indhold, der skal sammensættes, kan have starttrim."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Kun det sidste indhold, der skal sammensættes, kan have sluttrim."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Lukkede billedtekster"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Ã…bne undertekster"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Nogle filer er blevet ændret siden de blev tilføjet til projektet.\n"
"\n"
"De bliver nu undersøgt igen, og det kan være nødvendigt at gennemse deres "
"indstillinger bagefter."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Retning"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Ikke tilstrækkelig arbejdshukommelse"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Overcomplete wavelet denoiser"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Rapporter venligst dette problem via Hjælp -> Rapporter et problem eller via "
+"email til carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Metode (Policy)"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Forberedt til video billedhastighed"
@@ -1305,116 +1355,116 @@ msgstr "Forberedt til video billedhastighed"
msgid "Programming error at %1:%2 %3"
msgstr "Programmerings fejl ved %1: %2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Publikumsorientering (PSA)"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Censur"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Højre"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Højre center"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Højre bag surround"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Højre surround"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Roter 90 grader mod uret"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Roter 90 grader med uret"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 til systemer på 10, 12, 14 og 16 bit"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1429,27 +1479,27 @@ msgstr "SSH-fejl (%1)"
msgid "SSH error [%1] (%2)"
msgstr "SSH-fejl (%1)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Lørdag"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Scanner billedfiler"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Sender email"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Short"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Størrelse"
@@ -1457,7 +1507,7 @@ msgstr "Størrelse"
msgid "Some audio will be resampled to %1Hz"
msgstr "Noget lyd resamples til %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
#, fuzzy
msgid "Some files have been changed since they were added to the project."
msgstr ""
@@ -1466,7 +1516,7 @@ msgstr ""
"De bliver nu undersøgt igen, og det kan være nødvendigt at gennemse deres "
"indstillinger bagefter."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
#, fuzzy
msgid ""
"Some files have been changed since they were added to the project.\n"
@@ -1490,14 +1540,14 @@ msgstr ""
"De bliver nu undersøgt igen, og det kan være nødvendigt at gennemse deres "
"indstillinger bagefter."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
"Nogle af underteksterne er på mere end %1 linjer, så de bliver beskåret."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1517,11 +1567,11 @@ msgstr "Noget af dit indhold mangler en KDM"
msgid "Some of your content needs an OV"
msgstr "Noget af dit indhold mangler en OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Stereo"
@@ -1534,19 +1584,19 @@ msgstr "Stereo til 5.1 up-mixer A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Stereo til 5.1 up-mixer B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Søndag"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Telecinefilter"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1566,32 +1616,32 @@ msgstr "Certifikatkæden til signering er ugyldig"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Certifikatkæden til signering er ugyldig (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1599,23 +1649,37 @@ msgstr ""
"Filmen ligger på et drev, der kun har lidt ledig plads. Frigør noget plads "
"og prøv igen."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Filen %1 er blevet flyttet %2 millisekunder frem."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Filen %1 er blevet flyttet %2 millisekunder tilbage."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Filen %1 er blevet trimmet %2 millisekunder kortere."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Filen %1 er blevet trimmet %2 millisekunder længere."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1630,11 +1694,11 @@ msgstr ""
"indholdet, sålænge det er en billedhastighed der understøttes af det system "
"DCPen skal afspilles fra."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "Der er ingen video i denne DCP"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1644,30 +1708,33 @@ msgstr ""
"kører på et 32 bit operativsystem, så prøv at reducere antallet af "
"genereringstråde i fanebladet Generelt i Indstillinger."
-#: src/lib/util.cc:1029
+#: src/lib/util.cc:1027
#, fuzzy
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
"KDM var genereret til DCP-o-matic, men ikke til dens 'leaf' certifikat."
-#: src/lib/util.cc:1027
+#: src/lib/util.cc:1025
#, fuzzy
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+msgid "This KDM was not made for %1's decryption certificate."
msgstr "KDM var ikke genereret til DCP-o-matics dekrypterings certifikat."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
+"Der var ikke tilstrækkelig arbejdshukommelse til at gøre dette. Hvis du "
+"kører på et 32 bit operativsystem, så prøv at reducere antallet af "
+"genereringstråde i fanebladet Generelt i Indstillinger."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1678,45 +1745,47 @@ msgstr ""
"Denne fil er en KDM. KDMer skal tilføjes til DCP indhold ved at højreklikke "
"på indholdet og vælge \"Tilføj KDM\"."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Denne film blev dannet med en nyere version af DCP-o-matic og kan ikke "
"indlæses i denne version. Beklager!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Denne film blev dannet med en nyere version af DCP-o-matic og kan ikke "
"indlæses i denne version. Du er nødt til at lave en ny Film, tilføje dit "
"indhold og konfigurere det igen. Beklager!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Torsdag"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Timet tekst"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Transcoder %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitional"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Tirsdag"
@@ -1724,7 +1793,7 @@ msgstr "Tirsdag"
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Uventet indhold af ZIP arkiv"
@@ -1732,36 +1801,36 @@ msgstr "Uventet indhold af ZIP arkiv"
msgid "Unexpected image type received by server"
msgstr "Uventet billedtype modtaget af server"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
#, fuzzy
msgid "Unknown"
msgstr "ukendt"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Ukendt fejl"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Kunne ikke genkende lydsekvensens format (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Unsharp mask and Gaussian blur"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Uspecificeret"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Uden titel"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Ubenyttet"
@@ -1773,7 +1842,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1781,11 +1850,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Verificer DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Lodret spejling"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Synshandicappet"
@@ -1793,23 +1862,23 @@ msgstr "Synshandicappet"
msgid "Waiting"
msgstr "Venter"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Weavefilter"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Onsdag"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Endnu et Deinterlacing Filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1820,7 +1889,7 @@ msgstr ""
"billedhastighed understøttes ikke af alle projektorer. Du rådes til at "
"ændre DCP-billedhastigheden til %2 fps."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1830,7 +1899,7 @@ msgstr ""
"billedhastighed understøttes ikke af alle projektorer. Du rådes til at "
"ændre billedhastigheden til %2 fps."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1839,18 +1908,11 @@ msgstr ""
"understøttes af alle projektorer. Vær opmærksom på at der kan opstå "
"kompatibilitetsproblemer."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Du benytter 3D indhold, men har sat DCPen til 2D. Sæt DCPen til 3D hvis du "
-"vil afspille på et 3D-system. (f.eks. Real-D, MasterImage, etc.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Du benytter dig af DCP-o-matics opskalering fra stereo til 5.1. Den er "
@@ -1858,7 +1920,15 @@ msgstr ""
"du fortsætter, bør du lytte til DCPen i en biograf for at sikre dig at "
"lydkvaliteten er i orden."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Du benytter 3D indhold, men har sat DCPen til 2D. Sæt DCPen til 3D hvis du "
+"vil afspille på et 3D-system. (f.eks. Real-D, MasterImage, etc.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1866,20 +1936,20 @@ msgstr ""
"Du har %1 filer der ligner VOB-filer fra en DVD. Du bør samle dem for at "
"sikre gode overgange mellem filerne."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
#, fuzzy
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr "Du har overlappende undertekster, hvilket ikke er tilladt."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1891,22 +1961,22 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Du er nødt til at tilføje indhold til DCP'en før du kan danne den"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
#, fuzzy
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
@@ -1916,18 +1986,18 @@ msgstr ""
"projektorer. Brug Flat eller Scope som DCPens indholdsformat, hvis det er "
"muligt"
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr "Lydniveauet er meget højt (%1). Du bør sænke gain på lyden."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr "Dit projekt har videoindhold der ikke var justeret til en billedkant."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1935,21 +2005,21 @@ msgstr ""
"Dit projekt har videoindhold hvis beskæring ikke var justeret til en "
"billedkant."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[levende billeder]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[stillbillede]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[undertekster]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_spole%1"
@@ -1981,12 +2051,12 @@ msgstr "kopierer %1"
msgid "could not find stream information"
msgstr "kunne ikke finde information om strøm"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
#, fuzzy
msgid "could not move atmos asset into the DCP (%1)"
msgstr "kunne ikke flytte lyd-MXF ind i DCPen (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "kunne ikke flytte lyd-MXF ind i DCPen (%1)"
@@ -2017,7 +2087,7 @@ msgstr "kunne ikke skrive til fil %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "fejl ved async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "fejl ved async_read (%1)"
@@ -2025,62 +2095,72 @@ msgstr "fejl ved async_read (%1)"
msgid "error during async_write (%1)"
msgstr "fejl ved async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "billeder pr. sekund"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "t"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "den har en anden billedhastighed end filmen."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "den er 2K og filmen er 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "den er 4K og filmen er 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "den er i Interop formatet og filmen er i SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "den er i SMPTE formatet og filmen er i Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "den overlapper med anden lyd; fjern det andet indhold."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "den overlapper med anden lyd; fjern det andet indhold."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "den overlapper med andet video indhold; fjern det andet indhold."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2089,16 +2169,16 @@ msgstr ""
"til 'opdel efter videoindhold'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "dens billedstørrelse er forskellig fra filmens."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "flytter"
@@ -2107,45 +2187,51 @@ msgid "name"
msgstr "navn"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "stille"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "den overlapper med anden tekst; fjern det andet indhold."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "ukendt"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "videobilleder"
+#, fuzzy
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Videostørrelser passer ikke i DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "DCP-o-matic besked"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "den overlapper med anden tekst; fjern det andet indhold."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "den har ikke billedtekster på alle spoler."
@@ -2156,13 +2242,6 @@ msgstr "videobilleder"
#~ msgstr "den har ikke lyd på alle spoler."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Rapporter venligst dette problem via Hjælp -> Rapporter et problem eller "
-#~ "via email til carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "Din standard container er ugyldig og er blevet ændret til Flat (1.85:1)"
diff --git a/src/lib/po/de_DE.po b/src/lib/po/de_DE.po
index 0edca81ab..d0b581faf 100644
--- a/src/lib/po/de_DE.po
+++ b/src/lib/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2021-08-20 20:44+0200\n"
"Last-Translator: Carsten Kurz\n"
"Language-Team: DCP-o-matic translators\n"
@@ -18,7 +18,7 @@ msgstr ""
"X-Generator: Poedit 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -27,7 +27,7 @@ msgstr ""
"\n"
"Bildrate %.4f fps\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -35,7 +35,7 @@ msgstr ""
"\n"
"Beschnitten zu %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -44,7 +44,7 @@ msgstr ""
"\n"
"Anzeigeseitenverhältnis (DAR) %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -52,7 +52,7 @@ msgstr ""
"\n"
"Mit Schwarz gefüllt auf Containerformat %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -60,18 +60,18 @@ msgstr ""
"\n"
"Skaliert auf %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " am %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -96,39 +96,91 @@ msgstr ""
"Größe: $SIZE\n"
"Bei Problemen mit diesem DCP kontaktieren Sie bitte:\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [Ton]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [Film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [Bild]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic konnte die Datei %1 nicht öffnen (%2). Vielleicht existiert sie "
+"nicht oder ist in einem unerwarteten Format."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst "
+"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren "
+"Wünschen entsprechen."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst "
+"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren "
+"Wünschen entsprechen."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+"DCP-o-matic unterstützt das `%1' Filter nicht mehr, er wird deaktiviert."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Email Benachrichtigung"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", Pixelseitenverhältnis %.2f:1"
@@ -165,11 +217,11 @@ msgstr "1.85:1 (Flat / BW)"
msgid "1.90 (Full frame)"
msgstr "1.90:1 Full Container (DCI)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66:1"
@@ -182,11 +234,11 @@ msgstr "2.35:1 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39:1 (DCI Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D Rauschunterdrückung"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -197,33 +249,33 @@ msgstr ""
"zurückspielen, der 4K 3D unterstützt, ist es ratsam, das DCP als 2K zu "
"klassifizieren. Nutzen Sie hierzu den Tabreiter \"DCP→Video\"."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 verbleibend; beendet um %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>Sie haben %1 DCPs mit DCP-o-matic erstellt!</h2><img width=\"20%%\" "
"src=\"memory:me.jpg\" align=\"center\"><p>Hallo. Ich bin Carl, der "
@@ -237,10 +289,11 @@ msgstr ""
"amount=20\">Spende über Paypal £20</a><li><a href=\"https://dcpomatic.com/"
"donate_amount?amount=10\">Spende über Paypal £10</a></ul><p>Dankeschön!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Einige Projektionssysteme haben Probleme mit der Wiedergabe von DCPs mit "
@@ -248,22 +301,22 @@ msgstr ""
"nicht wesentlich höher als 230MBit/s einstellen. Dies wird kaum Auswirkungen "
"auf die sichtbare Bildqualität haben."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Werbung - ADV"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -277,7 +330,7 @@ msgstr ""
"Containertyp auf Scope (2.39:1) einstellen. Für Scope-Trailer ist diese "
"'letter-boxed' Darstellung in einem Flat-Vorprogramm jedoch übliche Praxis."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
#, fuzzy
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
@@ -290,7 +343,7 @@ msgstr ""
"(pillar-boxed). Sofern dies nicht ihre Absicht ist, sollten Sie unter dem "
"DCP-Reiter den DCI Containertyp auf Flat (1.85:1) einstellen."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Beim Bearbeiten der Datei %1 trat ein Fehler auf."
@@ -298,32 +351,32 @@ msgstr "Beim Bearbeiten der Datei %1 trat ein Fehler auf."
msgid "Analysing audio"
msgstr "Audio wird analysiert"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Untertitel analysieren"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
"Mindestens ein Marker ist hinter dem Ende des Projekts platziert und wird "
"daher ignoriert."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Mindestens eine Ihrer Closed Captions (CCAP) ist grösser als "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
"Mindestens eine Ihrer Closed Captions (CCAP) -Dateien (XML-Format) ist "
"grösser als "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Mindestens eine Ihrer Untertiteldateien ist grösser als "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -332,7 +385,7 @@ msgstr ""
"empfohlen, jede Untertitelzeile auf eine Länge von maximal 52 Zeichen zu "
"beschränken."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -340,7 +393,7 @@ msgstr ""
"Mindestens eine Ihrer Untertitel-Zeilen hat mehr als 79 Zeichen. Sie sollten "
"jede Untertitelzeile auf eine Länge von maximal 79 Zeichen begrenzen."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -348,7 +401,7 @@ msgstr ""
"Mindesteins einer Ihrer Untertitel hat mehr als drei Zeilen. Es ist ratsam, "
"nicht mehr als drei Zeilen für einen Untertitel zu nutzen."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -356,7 +409,7 @@ msgstr ""
"Mindestens einer Ihrer Untertitel dauert weniger als 15 Frames. Es ist "
"ratsam, jeden Untertitel eine Länge von mindestens 15 Frames zuzuordnen."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -365,7 +418,7 @@ msgstr ""
"vorherigen Untertitel. Es ist ratsam, die Lücke zwischen Untertiteln auf "
"mindestens 2 Frames zu vergrössern."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
#, fuzzy
msgid ""
"At least one piece of subtitle content has no specified language. It is "
@@ -390,72 +443,72 @@ msgstr "Audioabtastrate wird auf %1Hz angepasst"
msgid "Audio will not be resampled"
msgstr "Audioabtastrate wird nicht verändert werden"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 extended colour gamut"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 constant luminance"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 for a 10-bit system"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 for a 12-bit system"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 non-constant luminance"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits pro pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Bob Weaver Deinterlacing Filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Abbruch"
@@ -467,13 +520,13 @@ msgstr "Darf keine Schrägstriche enthalten"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Kann dieses Pixelformat %1 während %2 nicht bearbeiten"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr ""
"KDM Erzeugung nicht möglich, da dieses Projekt keine Verschlüsselung "
"verwendet."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Center"
@@ -481,7 +534,7 @@ msgstr "Center"
msgid "Channels"
msgstr "Audio-Kanäle"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -490,27 +543,32 @@ msgstr ""
msgid "Checking content"
msgstr "Überprüfe Projektinhalte auf Änderungen"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Überprüfe bestehende Bilddateien"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Farbabhängige konstante Helligkeit"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Farbabhängige nicht-konstante Helligkeit"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Closed Captions"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Untertitel (Text)"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Grundfarbbezug ('primaries')"
@@ -524,17 +582,17 @@ msgstr "Grundfarbbezug ('primaries')"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Farbumfang"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Farbkonvertierung"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Farbraum"
@@ -542,15 +600,15 @@ msgstr "Farbraum"
msgid "Combine DCPs"
msgstr "Kombiniere DCPs"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Zusammenfassung berechnen"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Zusammenfassung ('Hashes') berechnen"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "Glückwunsch!"
@@ -568,21 +626,21 @@ msgstr "Inhaltsbeschreibung"
msgid "Content sample rate"
msgstr "Audio Abtastrate (Quelle)"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "Zu verbindende Inhalte müssen identische Toneigenschaften aufweisen."
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Zu verbindende Inhalte müssen alle einheitlich Untertitel (oder keine) "
"aufweisen"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "Zu verbindende Inhalte müssen identische Bildeigenschaften aufweisen."
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
#, fuzzy
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
@@ -595,12 +653,12 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "Zu verbindende Inhalte müssen die gleiche Bildrate haben."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"Zu verbindende Inhalte müssen identische Untertitel-Einstellungen verwenden."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Zu verbindende Inhalte müssen identische Untertitel-Einstellungen verwenden."
@@ -644,7 +702,7 @@ msgstr ""
"Zu verbindende Inhalte müssen identische Ein-/Ausblendungs-Einstellungen "
"verwenden."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Zu verbindende Inhalte müssen die gleiche Outline-Stärke verwenden."
@@ -652,40 +710,40 @@ msgstr "Zu verbindende Inhalte müssen die gleiche Outline-Stärke verwenden."
msgid "Content to be joined must have the same picture size."
msgstr "Zu verbindende Inhalte müssen die gleiche Bildgröße haben."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
"Zu verbindende Inhalte müssen den gleichen horizontalen Untertitelversatz "
"verwenden."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
"Zu verbindende Inhalte müssen die gleiche Untertitel X-Skalierung verwenden."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
"Zu verbindende Inhalte müssen den gleichen vertikalen Untertitelversatz "
"verwenden."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr ""
"Zu verbindende Inhalte müssen die gleiche Untertitel Y-Skalierung verwenden."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
"Zu verbindende Inhalte müssen die gleichen Ein- und Ausblendzeiten aufweisen."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"Zu verbindende Inhalte müssen den gleichen Zeilenabstand für Untertitel "
"aufweisen."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Zu verbindende Inhalte müssen die gleiche Bildrate haben."
@@ -693,28 +751,28 @@ msgstr "Zu verbindende Inhalte müssen die gleiche Bildrate haben."
msgid "Content to be joined must have the same video frame type."
msgstr "Zu verbindende Inhalte müssen den gleichen Bildtyp (z.B. 2D) haben."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "Zu verbindende Inhalte müssen die gleiche Spur verwenden."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr ""
"Zu verbindende Inhalte müssen die gleichen Zeichensätze für Untertitel "
"verwenden."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Zu verbindende Inhalte müssen die gleiche Untertitelspur verwenden."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
#, fuzzy
msgid "Content to be joined must use the same text language."
msgstr ""
"Zu verbindende Inhalte müssen die gleichen Zeichensätze für Untertitel "
"verwenden."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Inhalt Video ist %1x%2"
@@ -722,15 +780,6 @@ msgstr "Inhalt Video ist %1x%2"
msgid "Copy DCP to TMS"
msgstr "DCP auf TMS übertragen"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Kopieren alte Videodatei"
-
-#: src/lib/reel_writer.cc:407
-#, fuzzy
-msgid "Copying video file into DCP"
-msgstr "Unterschiedliche Auflösungen im DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Keine Verbindung zu Server %1 (%2)"
@@ -747,20 +796,21 @@ msgstr "Fehler beim Dekodieren der JPEG2000 Datei %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Fehler beim Dekodieren der Bild-Datei (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Heruntergeladene ZIP Datei kann nicht geöffnet werden."
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Konnte keine Encoding Server finden. Ist das Programm vielleicht zweimal "
"gestartet worden?"
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "%1 konnte nicht geöffnet werden."
@@ -768,19 +818,19 @@ msgstr "%1 konnte nicht geöffnet werden."
msgid "Could not open %1 to send"
msgstr "%1 konnte nicht zum Senden geöffnet werden"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Heruntergeladene ZIP Datei kann nicht geöffnet werden."
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Heruntergeladene ZIP Datei kann nicht geöffnet werden (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Datei konnte nicht zum Schreiben geöffnet werden."
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
#, fuzzy
msgid "Could not open output file %1 (%2)"
msgstr "Datei %1 konnte nicht geschrieben werden (%2)"
@@ -797,19 +847,19 @@ msgstr "Fehler beim Start der Übertragung"
msgid "Could not write to remote file (%1)"
msgstr "Entfernte Datei (%1) konnte nicht gespeichert werden"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-Box primärer TC"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX sekundärer TC"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -821,7 +871,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML Untertitel"
@@ -838,54 +888,36 @@ msgstr "DCP läuft mit %.1f%% der Originalgeschwindigkeit der Quelle.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP verwendet nur jedes zweite Bild des Quelle.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic konnte die Datei %1 nicht öffnen (%2). Vielleicht existiert sie "
-"nicht oder ist in einem unerwarteten Format."
-
-#: src/lib/film.cc:1596
-msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
-msgstr ""
-"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst "
-"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren "
-"Wünschen entsprechen."
-#: src/lib/film.cc:1564
-#, fuzzy
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"Einige Einstellungen mussten im Hinblick auf die OV/VF Referenzen angepasst "
-"werden. Bitte prüfen Sie alle Einstellungen noch einmal, ob sie ihren "
-"Wünschen entsprechen."
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic unterstützt das `%1' Filter nicht mehr, er wird deaktiviert."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "DCP-o-matic Benachrichtigungen"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 oder AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "De-Interlacer"
# Might be that the special characters like ü (ue) or ß (ss) need to be encoded
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -897,7 +929,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Sehr geehrte Vorführer,\n"
"\n"
@@ -911,12 +943,16 @@ msgstr ""
"Mit freundlichen Grüßen,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
#, fuzzy
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 und CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Herunterladen fehlgeschlagen (%1 Fehler %2)"
@@ -940,19 +976,19 @@ msgstr "Versende KDM Email(s) für %1"
msgid "Email notification"
msgstr "Email Benachrichtigung"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Email Sendebericht"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Email Sendebericht für %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Kodieren"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Episode"
@@ -960,20 +996,20 @@ msgstr "Episode"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Fehler in SubRip Datei: Ist %1 , sollte %2 sein"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Fehler: (%1)"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Analysiere Untertitel"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
#, fuzzy
msgid "Examining audio, subtitles and closed captions"
msgstr "Untersuche Closed Captions (CCAP)"
@@ -986,17 +1022,17 @@ msgstr "Inhalt wird überprüft"
msgid "Examining subtitles"
msgstr "Analysiere Untertitel"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
#, fuzzy
msgid "Examining subtitles and closed captions"
msgstr "Untersuche Closed Captions (CCAP)"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
#, fuzzy
msgid "Extracting"
msgstr "Freigabehinweis - RTG"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -1004,52 +1040,52 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Authentifizierung mit Server (%1) fehlgeschlagen"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Konnte das DCP nicht encodieren."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Konnte Email nicht senden"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Hauptfilm - FTR"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Dateiname"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Dateiname"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Ermittle Länge"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Bildrate"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Freitag"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Voll"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Voll (0-%1)"
@@ -1073,35 +1109,35 @@ msgstr "Gesamtlänge in Bildern (DCP)"
msgid "Full length in video frames at content rate"
msgstr "Gesamtlänge in Bildern (Quelle)"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradient Glätter"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "HI"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "3D Rauschunterdrückung hoher Qualität"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Horizontal Spiegeln"
@@ -1109,21 +1145,21 @@ msgstr "Horizontal Spiegeln"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB or sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
"Sofern Sie eine Bildrate von 25fps verwenden, sollten Sie den DCP Standard "
"für dieses Projekt auf 'SMPTE' setzen!"
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
#, fuzzy
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
@@ -1135,15 +1171,15 @@ msgstr ""
"den SMPTE-Standard für das DCP zu setzen. Nutzen Sie dazu den \"DCP\" "
"Tabreiter."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1152,73 +1188,74 @@ msgstr ""
"Start des DCP positionieren. So stellen Sie sicher, dass er gesehen werden "
"kann."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Ein unbekannter Fehler ist aufgetreten."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "KDM Zustellung: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Kernel De-Interlacer"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Links"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Center links"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Surround hinten links"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Surround links"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Länge"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "LFE (Subwoofer)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Begrenzt"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Begrenzt (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Linear"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarithmisch (Bereich 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarithmisch (Bereich 316:1 )"
@@ -1227,7 +1264,7 @@ msgid "Lost communication between main and writer processes"
msgstr ""
"Verbindungsverlust zwischen Hauptprozess (Main) und Schreibprozess (Writer)"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1235,24 +1272,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Mitte-Seite Decoder"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Verschiedenes"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Unterschiedliche Audio-Kanalzahlen im DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Unterschiedliche Audioabtastraten im DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Unterschiedliche Bildraten im DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Unterschiedliche Auflösungen im DCP"
@@ -1260,19 +1297,19 @@ msgstr "Unterschiedliche Auflösungen im DCP"
msgid "Missing required setting %1"
msgstr "Benötigte Einstellung %1 fehlt"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Montag"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Bewegungskompensierender De-Interlacer"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "DCP enthält keine CPL/Titel."
@@ -1286,52 +1323,56 @@ msgstr "In den Einstellungen wurde noch kein Mailserver konfiguriert!"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "In den Einstellungen wurde noch kein Mailserver konfiguriert!"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Keine gültigen Bilddaten gefunden."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Rauschunterdrückung"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Kein"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (Dauer %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (Dauer %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Nur das erste Segment der zu verbindenden Inhalte kann vom Anfang her "
"beschnitten werden."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
"Nur das letzte Segment der zu verbindenden Inhalte kann vom Ende her "
"beschnitten werden."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Closed Captions"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Untertitel (Text)"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Einige in diesem Projekt verwendete Dateien wurden geändert, nachdem sie zu "
"diesem Projekt hinzugefügt wurden.\n"
@@ -1339,32 +1380,41 @@ msgstr ""
"Diese Inhalte werden nun neu untersucht, ggfs. müssen Sie bei Änderungen "
"deren typspezifische Einstellungen überprüfen."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Ausrichtung"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Zu wenig Speicher"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Überbestimmte Wavelet Entrauschung"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Bitte benachrichtigen Sie uns über diesen Fehler unter ‚Hilfe -> "
+"Problembericht senden…‘ oder per email an: carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Vorschrift - POL"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Angelegt für Bildrate"
@@ -1372,93 +1422,93 @@ msgstr "Angelegt für Bildrate"
msgid "Programming error at %1:%2 %3"
msgstr "Programmfehler bei %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promotional"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Hinweis - PSA"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Freigabehinweis - RTG"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601 (SD)"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709 (HD)"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Rechts"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Center rechts"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Surround hinten rechts"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Surround rechts"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "90 Grad gegen den Uhrzeigersinn rotieren"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "90 Grad im Uhrzeigersinn rotieren"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1469,23 +1519,23 @@ msgstr ""
"Setzen Sie diese Marker über die gleichnamige Drucktaste im \"DCP\" "
"Tabreiter."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1500,19 +1550,19 @@ msgstr "SSH Fehler (%1)"
msgid "SSH error [%1] (%2)"
msgstr "SSH Fehler (%1)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Samstag"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Analysiere Bildsequenz"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Sende Email"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Kurzfilm - SHR"
@@ -1520,11 +1570,11 @@ msgstr "Kurzfilm - SHR"
# - Sign as (digital) signature (DE: Signatur)
# -Sign as +,- sign (DE: Zeichen)
# -Sign in the sense of a warning sign/signal (DE Signal)
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Signatur"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Größe"
@@ -1532,7 +1582,7 @@ msgstr "Größe"
msgid "Some audio will be resampled to %1Hz"
msgstr "Einige Audioanteile werden in der Abtastrate geändert auf %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
#, fuzzy
msgid "Some files have been changed since they were added to the project."
msgstr ""
@@ -1542,7 +1592,7 @@ msgstr ""
"Diese Inhalte werden nun neu untersucht, ggfs. müssen Sie bei Änderungen "
"deren typspezifische Einstellungen überprüfen!"
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
#, fuzzy
msgid ""
"Some files have been changed since they were added to the project.\n"
@@ -1568,7 +1618,7 @@ msgstr ""
"Diese Inhalte werden nun neu untersucht, ggfs. müssen Sie bei Änderungen "
"deren typspezifische Einstellungen überprüfen!"
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
@@ -1576,7 +1626,7 @@ msgstr ""
"Einige ihrer Closed Captions (CCAP) sind länger als %1 Zeile(n). Sie werden "
"abgeschnitten."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1599,11 +1649,11 @@ msgstr "Teile ihrer Quellinhalte (DCP) benötigen eine KDM"
msgid "Some of your content needs an OV"
msgstr "Teile ihrer Quellinhalte (DCP) benötigen eine OV-CPL"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Stereo"
@@ -1616,19 +1666,19 @@ msgstr "Stereo auf 5.1 up-mixer A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Stereo auf 5.1 up-mixer B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Sonntag"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser - TSR"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Telecine Filter"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test - TST"
@@ -1649,25 +1699,25 @@ msgstr "Die Zertifikatskette für die Signatur ist ungültig"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Die Zertifikatskette für Signaturen ist ungültig (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1678,7 +1728,7 @@ msgstr ""
"aus diesem Content erzeugen. Markieren Sie hierzu die Auswahl \"3D\" im DCP "
"Video-Tabreiter."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1686,23 +1736,37 @@ msgstr ""
"Das Laufwerk, auf dem der Film gespeichert werden soll, hat zu wenig freien "
"Speicher. Bitte Speicher freigeben und nochmal versuchen."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Die Spur %1 wurde %2 Millisekunden vorgezogen."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Die Spur %1 wurde %2 Millisekunden verzögert."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Die Spur %1 wurde um %2 Millisekunden gekürzt."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Die Spur %1 wurde um %2 Millisekunden verlängert."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1718,11 +1782,11 @@ msgstr ""
"vorgesehene Projektionssystem diese Bildrate unterstützt, sollten Sie die "
"DCP Bildrate auf den gleichen oder zumindest einen näheren Wert einstellen."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "Dieses DCP enthält kein Bild"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1732,26 +1796,27 @@ msgstr ""
"32-Bit-Betriebssystem ausführen, versuchen Sie, die Anzahl der Rechen-"
"Threads in den Voreinstellungen n zu reduzieren."
-#: src/lib/util.cc:1029
+#: src/lib/util.cc:1027
#, fuzzy
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
"KDM ist zwar für DCP-o-matic ausgestellt, jedoch nicht für das Leaf-"
"Zertifikat dieser Installation."
-#: src/lib/util.cc:1027
+#: src/lib/util.cc:1025
#, fuzzy
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
"KDM ist nicht für das Entschlüsselungszertifikat dieser DCP-o-matic "
"Installation ausgestellt worden."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"Wahrscheinliche Ursache für diesen Fehler ist die Nutzung der 32-Bit-Version "
"von DCP-o-matic und der Versuch, zu viele Encoding-Threads zu nutzen. Bitte "
@@ -1759,11 +1824,11 @@ msgstr ""
"darf: Nutzen Sie hierzu die Einstellungen im Tabreiter für die allgemeinen "
"Einstellungen. Versuchen Sie es anschließend erneut."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"Wahrscheinliche Ursache für diesen Fehler ist die Nutzung der 32-Bit-Version "
"von DCP-o-matic. Bitte installieren Sie DCP-o-matic mit dem 64-Bit-"
@@ -1779,46 +1844,48 @@ msgstr ""
"gehöriges geladenes DCP selektieren und mit <RechtsClick> \"KDM zuweisen\" "
"ausführen!"
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Diese Projektdatei wurde mit einer neueren DCP-o-matic Version erstellt und "
"kann leider nicht mit dieser älteren Version geladen werden. Sie müssen den "
"Film neu erstellen oder eine aktuelle Version installieren. Sorry!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Diese Projektdatei wurde mit einer alten DCP-o-matic Version erstellt und "
"kann leider nicht mit dieser Version geladen werden. Sie müssen den Film neu "
"erstellen. Sorry!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Donnerstag"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Timed text"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer - TLR"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Wandle %1 um"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Überleitung - XSN"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Dienstag"
@@ -1826,7 +1893,7 @@ msgstr "Dienstag"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Ungültiger ZIP Inhalt"
@@ -1834,36 +1901,36 @@ msgstr "Ungültiger ZIP Inhalt"
msgid "Unexpected image type received by server"
msgstr "Ungültiges Bildformat vom Server erhalten"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
#, fuzzy
msgid "Unknown"
msgstr "unbekannt"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Unbekannter Fehler"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Audio Sample Format (%1) nicht erkannt."
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Unscharf Maskieren mit Gaußschem Unschärfefilter"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Unbestimmt"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Unbenannt"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Ungenutzt"
@@ -1875,7 +1942,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1883,11 +1950,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "DCP Integrität prüfen"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Vertikal Spiegeln"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "VI"
@@ -1895,23 +1962,23 @@ msgstr "VI"
msgid "Waiting"
msgstr "Warte..."
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Weave Deinterlacer"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Mittwoch"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Und ein weiterer De-Interlacer ('YADIF')"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1923,7 +1990,7 @@ msgstr ""
"abweichend von 24fps oder 48fps(3D) nicht leichtfertig! Ändern Sie die "
"Bildrate gegebenenfalls in %2 fps."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1934,7 +2001,7 @@ msgstr ""
"abweichend von 24fps oder 48fps(3D) nicht leichtfertig! Ändern Sie die "
"Bildrate gegebenenfalls in %2 fps!"
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1943,19 +2010,11 @@ msgstr ""
"nicht von allen Projektionssystemen unterstützt! Wählen Sie Bildraten "
"abweichend von 24fps oder 48fps(3D) nicht leichtfertig!"
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Sie haben 3D Inhalte eingebunden, jedoch ein 2D-DCP eingestellt. Sollten Sie "
-"ihre Inhalte in 3D wiedergeben wollen, wählen Sie unter dem DCP-Reiter "
-"'Bild' '3D DCP' aus. Andernfalls wird ein 2D-DCP erzeugt."
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Sie haben einen Stero-5.1 Upmixer im Projekt aktiviert. Diese Funktion ist "
@@ -1963,7 +2022,16 @@ msgstr ""
"dieses DCP nach der Erzeugung in einer voll surroundfähigen Abhörumgebung "
"testen, bevor Sie es zur Verbreitung frei geben."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Sie haben 3D Inhalte eingebunden, jedoch ein 2D-DCP eingestellt. Sollten Sie "
+"ihre Inhalte in 3D wiedergeben wollen, wählen Sie unter dem DCP-Reiter "
+"'Bild' '3D DCP' aus. Andernfalls wird ein 2D-DCP erzeugt."
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1973,7 +2041,7 @@ msgstr ""
"'Nahtlos verbinden' verwenden, um Sprünge in der Wiedergabe zu vermeiden."
# "remove some Atmos coment" sounds unspecific. Assuming that the root cauase of the issues are few pieces of content with the false frame rate, the recommendation could be to remove those that contain the false frame rate (could the standard Atmos framerate be set in the config/setings? If yes, this should be mentioned as a solution proposal)
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1982,7 +2050,7 @@ msgstr ""
"unterschiedliche Frame-Raten. Entfernen Sie die Inhalte, welche die "
"unpassenden Frame-Raten haben."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1991,7 +2059,7 @@ msgstr ""
"nicht zulässig! Bitte entfernen Sie die Überlappung oder ändern Sie den DCP "
"Wrapping Typ auf 'SMPTE'."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -2006,19 +2074,20 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Sie müssen erst Inhalte hinzufügen bevor Sie ein DCP erstellen können!"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"Ihr DCP hat weniger als sechs Audiokanäle. Das kann auf einigen Projektoren "
"zu Problemen führen. Um dies zu vermeiden, konfigurieren Sie das DCP so, "
@@ -2026,7 +2095,7 @@ msgstr ""
"Audiokanäle haben, werden die nicht genutzten Audiokanäle automatisch mit "
"Stille aufgefüllt."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
#, fuzzy
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
@@ -2036,7 +2105,7 @@ msgstr ""
"Projektionssystemen Probleme verursachen. Bitte verwenden Sie wann immer "
"möglich Flat oder Scope Container."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -2048,14 +2117,14 @@ msgstr ""
"um -20dBFS RMS. Diese Angaben dienen nur zur Groborientierung. Prüfen Sie "
"ihre DCPs in einem eingemessenen Kinosaal!"
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"Ihr Projekt enthält Videoinhalte die nicht exakt am Zeitraster ausgerichtet "
"sind."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -2063,21 +2132,21 @@ msgstr ""
"Ihr Projekt enthält Videoinhalte die nicht exakt im Zeitraster beschnitten "
"sind."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[Bewegte Bilder]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[Standbild]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[Untertitel]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_reel%1"
@@ -2109,12 +2178,12 @@ msgstr "kopiere %1"
msgid "could not find stream information"
msgstr "Keine Spur-Information gefunden"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
#, fuzzy
msgid "could not move atmos asset into the DCP (%1)"
msgstr "Audio konnte nicht in DCP (%1) kopiert werden"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "Audio konnte nicht in DCP (%1) kopiert werden"
@@ -2145,7 +2214,7 @@ msgstr "Datei %1 konnte nicht geschrieben werden (%2)"
msgid "error during async_connect (%1)"
msgstr "error during async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "error during async_read (%1)"
@@ -2153,28 +2222,28 @@ msgstr "error during async_read (%1)"
msgid "error during async_write (%1)"
msgstr "error during async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "Bilder pro Sekunde"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "Dieses Projekt verwendet eine andere Bildrate als dieses DCP."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
@@ -2182,47 +2251,59 @@ msgstr ""
"Captions (CCAP) neu geschrieben werden."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr ""
"es ist in 2k, das gegenwärtige Projekt jedoch 4k. Eine Mischung ist nicht "
"möglich!"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr ""
"es ist in 4k, das gegenwärtige Projekt jedoch 2k. Eine Mischung ist nicht "
"möglich!"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr ""
"Dieses Projekt ist auf ’SMPTE’ Standard konfiguriert, das referenzierte DCP "
"ist jedoch in ‚INTEROP‘! Eine Mischung ist nicht möglich!"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr ""
"Dieses Projekt ist auf ‚INTEROP‘ Standard konfiguriert, das referenzierte "
"DCP ist jedoch in ‚SMPTE‘. Eine Mischung ist nicht möglich!"
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
msgstr ""
"Einige Audioanteile überlappen mit diesem DCP, bitte entfernen Sie diese (-"
">Zeitleiste)!"
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
+msgstr ""
+"Einige Audioanteile überlappen mit diesem DCP, bitte entfernen Sie diese (-"
+">Zeitleiste)!"
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr ""
"Einige Videoanteile überlappen mit diesem DCP, bitte entfernen Sie diese (-"
">Zeitleiste)!"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2231,16 +2312,16 @@ msgstr ""
"unter 'DCP' muss auf 'An Inhaltsgrenzen aufteilen' gesetzt werden."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "Dieses Projekt verwendet eine andere Bildauflösung als dieses DCP."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "wird verschoben"
@@ -2250,7 +2331,7 @@ msgstr "Name"
# typo in original language? "one if its" -> "one of its"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
#, fuzzy
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
@@ -2261,7 +2342,7 @@ msgstr ""
# typo in original language? "one if its" -> "one of its"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
#, fuzzy
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
@@ -2271,33 +2352,42 @@ msgstr ""
"ungleich Null ist; daher muss er erneut geschrieben werden. UD"
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "Standbild"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr ""
-"Einige Textanteile überlappen in diesem DCP, bitte entfernen Sie diese (-"
-">Zeitleiste)!"
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "unbekannt"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "Video Bilder"
+#~ msgid "Copying old video file"
+#~ msgstr "Kopieren alte Videodatei"
+
+#, fuzzy
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Unterschiedliche Auflösungen im DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "DCP-o-matic Benachrichtigungen"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr ""
+#~ "Einige Textanteile überlappen in diesem DCP, bitte entfernen Sie diese (-"
+#~ ">Zeitleiste)!"
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr ""
#~ "Das DCP enthält in einigen Akten ('Reels') keine Closed Captions (CCAP)."
@@ -2309,13 +2399,6 @@ msgstr "Video Bilder"
#~ msgstr "Das DCP enthält in einigen Akten ('Reels') keinen Ton."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Bitte benachrichtigen Sie uns über diesen Fehler unter ‚Hilfe -> "
-#~ "Problembericht senden…‘ oder per email an: carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "Ihr bisheriger Standard-Container ist in dieser Version nicht mehr gültig "
diff --git a/src/lib/po/es_ES.po b/src/lib/po/es_ES.po
index fd6761fb3..5686f12d3 100644
--- a/src/lib/po/es_ES.po
+++ b/src/lib/po/es_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LIBDCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2021-10-17 22:41-0400\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Velocidad del contenido %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Recortado a %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Proporción de aspecto mostrada %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Completado con negro para cubrir el contenedor %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Redimensionado a %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " el %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -94,39 +94,88 @@ msgstr ""
"Longitud: $LENGTH\n"
"Tamaño: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [audio]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [película]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [película]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic no pudo abrir el fichero %1 (%2). Quizás no existe o está en un "
+"formato inesperado."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic tuvo que cambiar las opciones para hacer referencia a DCPs como "
+"OV. Por favor, revisa esas opciones para confirmar que son las que quieres."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"DCP-o-matic tuvo que cambiar las opciones para que la velocidad de la "
+"película sea la misa que la del contenido Atmos."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic ya no ofrece el filtro `%1', así que ha sido desactivado."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Notificación por email"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", proporción de aspecto de pixel %.2f:1"
@@ -163,11 +212,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Frame completo)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -180,11 +229,11 @@ msgstr "2.35 (Scope 35mm)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "reducción de ruido 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -194,32 +243,33 @@ msgstr ""
"sepas que vas a reproducir este DCP en un proyector compatible, es "
"recomendable crear el DCP en todo 2K en la pestaña “DCP→Videoâ€."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; faltan %1 ; terminará a las %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>¡Has hecho %1 DCPs con DCP-o-matic!</h2><img width=“20%%†src=“memory:me."
"jpg†align=“centerâ€><p>Hola. Soy Carl, el creador de DCP-o-matic. Trabajo en "
@@ -233,34 +283,36 @@ msgstr ""
"href=“https://dcpomatic.com/donate_amount?amount=10â€>Ir a Paypal para "
"donar€10</a></ul><p>¡Muchas gracias!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Algunos proyectores tienen problemas reproduciendo DCPs con un ancho de "
"banda muy alto. Es buena idea bajar el ancho de banda JPEG2000 a unos 200 "
"Mbits/segundo, esto no debería afectar a la calidad de la imagen."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"Un subtítulo, normal o cerrado, en este proyecto está marcado con la lengua "
"‘%1’, que DCP-o-matic no reconoce. La lengua del fichero se ha borrado."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Log-gamma híbrido')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Publicidad"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -271,7 +323,7 @@ msgstr ""
"(1.85:1). Esto creará bandas negras horizontales. Puede que prefieras "
"seleccionar el contenedor DCP en Scope (2.39:1) en la pestaña \"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -281,7 +333,7 @@ msgstr ""
"Scope (2.39:1). Esto creará bandas negras verticales. Puede que prefieras "
"seleccionar el contenedor DCP en el mismo ratio de aspecto que el contenido."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Ha ocurrido un error con el fichero %1."
@@ -289,29 +341,29 @@ msgstr "Ha ocurrido un error con el fichero %1."
msgid "Analysing audio"
msgstr "Analizaando audio"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Analizando subtítulos"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
"Al menos un marcador aparece después del final del proyecto y será ignorado."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Al menos uno de los ficheros de subtítulos cerrados es mayor que "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "Al menos uno de los ficheros XML de subtítulos cerrados es mayor que "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Al menos uno de los ficheros de subtítulos es mayor que "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -319,7 +371,7 @@ msgstr ""
"Al menos una de las líneas de subtítulos tiene más de 52 caracteres. Se "
"recomienda un máximo de 52 caracteres por línea."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -327,7 +379,7 @@ msgstr ""
"Al menos una de las líneas de subtítulos tiene más de 79 caracteres. Cada "
"línea debe tener un máximo de 79 caracteres."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -335,7 +387,7 @@ msgstr ""
"Al menos uno de los subtítulos tiene más de 3 líneas. Se recomienda no usar "
"más de 3 líneas."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -343,7 +395,7 @@ msgstr ""
"Al menos uno de los subtítulos dura menos de 15 imágenes. Se recomienda que "
"un subtítulo dure al menos 15 imágenes."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -351,7 +403,7 @@ msgstr ""
"Al menos uno de los subtítulos empieza menos de 2 imágenes tras el "
"precedente. Se recomienda dejar al menos 2 imágenes entre subtítulos."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
#, fuzzy
msgid ""
"At least one piece of subtitle content has no specified language. It is "
@@ -375,72 +427,72 @@ msgstr "EL audio será remuestreado a %1Hz"
msgid "Audio will not be resampled"
msgstr "El audio no será remuestreado"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "Gama de color extendido BT1361"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 a luminosidad constante"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 para un sistema de 10-bit"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 para un sistema de 12 bits"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 a luminosidad no constante"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits por pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Filtro de desentrelazado Bob Weaver"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Cancelado"
@@ -452,11 +504,11 @@ msgstr "No puede contener barras"
msgid "Cannot handle pixel format %1 during %2"
msgstr "No se puede usar el formato de pixel %1 para %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "No se puede crear una Kim porque este proyecto no está encriptado."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Centro"
@@ -464,7 +516,7 @@ msgstr "Centro"
msgid "Channels"
msgstr "Canales"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -473,27 +525,32 @@ msgstr ""
msgid "Checking content"
msgstr "Buscando cambios en el contenido"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Comprobando las imágenes existentes"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Luminosidad constante a partir de la crominancia"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Luminosidad no constante a partir de la crominancia"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Subtítulos cerrados"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Subtítulos"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Colores primarios"
@@ -507,17 +564,17 @@ msgstr "Colores primarios"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Rango de color"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Características de la transferencia de color"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Espacio de color"
@@ -525,15 +582,15 @@ msgstr "Espacio de color"
msgid "Combine DCPs"
msgstr "Combinar DCPs"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Calculando la firma resumen"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Calculando la firma resumen"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "¡Felicidades!"
@@ -551,20 +608,20 @@ msgstr "tipo de contenido"
msgid "Content sample rate"
msgstr "Velocidad del contenido de audio"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "Para unir contenido deben tener audio todos o ninguno"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Para unir contenidos, todos deben tener o no subtítulos nórmales o cerrados"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "Para unir contenido deben tener vídeo todos o ninguno"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -574,11 +631,11 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "Para unir contenidos deben usar su vídeo o no."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr "Para unir contenido debe tener la misma opción ‘grabar subtítulos’."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr "Para unir contenido debe tener la misma opción 'usar subtítulos'."
@@ -617,7 +674,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr "Para unir contenido debe tener los mismos fundidos."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Para unir contenido debe tener la misma anchura de contorno."
@@ -625,35 +682,35 @@ msgstr "Para unir contenido debe tener la misma anchura de contorno."
msgid "Content to be joined must have the same picture size."
msgstr "Para unir contenido debe tener el mismo tamaño de imagen."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
"Para unir contenido debe tener el mismo desplazamiento de subtítulo en X."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
"Para unir contenido debe tener la misma redimensión de subtítulo en X."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
"Para unir contenido debe tener el mismo desplazamiento de subtítulo en Y."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Para unir contenido debe tener la misma redimensión de subtítulo en Y."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "Para unir contenido debe tener el mismo fundido de subtítulos."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"Para unir contenido debe tener la misma separación de línea de subtítulos."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Para unir contenido debe tener la misma velocidad de imagen"
@@ -661,23 +718,23 @@ msgstr "Para unir contenido debe tener la misma velocidad de imagen"
msgid "Content to be joined must have the same video frame type."
msgstr "Para unir contenido debe tener el mismo tamaño de imagen."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "Para unir contenido deben usar la misma pista DCP."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Para unir contenido debe usar la misma fuente."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Para unir contenido debe tener el mismo tipo de subtítulos."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "Para unir contenidos deben tener la misma lengua de texto."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "El video es %1x%2"
@@ -685,14 +742,6 @@ msgstr "El video es %1x%2"
msgid "Copy DCP to TMS"
msgstr "Copiar DCP al TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Copiando el antiguo fichero de vídeo"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Copiando el fichero de vídeo en el DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "No se pudo conectar al servidor %1 (%2)"
@@ -709,20 +758,21 @@ msgstr "No se pudo descodificar el fichero JPEG2000 %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "No se pudo descodificar la imagen (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "No se puedo abrir el fichero ZIP descargado"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"No se pueden buscar servidores de codificación externos. Quizás haya otro "
"DCP-o-matic ejecutándose."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "No se pudo abrir %1"
@@ -730,19 +780,19 @@ msgstr "No se pudo abrir %1"
msgid "Could not open %1 to send"
msgstr "No se pudo abrir %1 para enviar"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "No se puedo abrir el fichero ZIP descargado"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "No se puedo abrir el fichero ZIP descargado (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "No se pudo abrir el fichero para escritura"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "No se pudo abrir el fichero de salida %1 (%2)"
@@ -758,19 +808,19 @@ msgstr "No se pudo iniciar la transferencia"
msgid "Could not write to remote file (%1)"
msgstr "No se pudo escribir el fichero remoto (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "Primario D-BOX"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "Secundario D-BOX"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -782,7 +832,7 @@ msgstr "Flat DCI"
msgid "DCI Scope"
msgstr "Scope DCI"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "Subtítulos DCP XML"
@@ -799,49 +849,35 @@ msgstr "El DCP se reproducirá al %.1f%% de la velocidad de la fuente.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "El DCP usará una de cada dos imágenes de la fuente.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic no pudo abrir el fichero %1 (%2). Quizás no existe o está en un "
-"formato inesperado."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic tuvo que cambiar las opciones para hacer referencia a DCPs como "
-"OV. Por favor, revisa esas opciones para confirmar que son las que quieres."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic tuvo que cambiar las opciones para que la velocidad de la "
-"película sea la misa que la del contenido Atmos."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic ya no ofrece el filtro `%1', así que ha sido desactivado."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "Notificación de DCP-o-matic"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 o AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Desentrelazado"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -853,7 +889,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Estimado proyecionista\n"
"\n"
@@ -867,11 +903,15 @@ msgstr ""
"Atentamente,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 o CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Descarga fallida (%1 error %2)"
@@ -895,19 +935,19 @@ msgstr "Enviar por email las KDM para %2"
msgid "Email notification"
msgstr "Notificación por email"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Enviar por correo el problema"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Enviar por correo el problema para %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Codificando"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Episodio"
@@ -915,20 +955,20 @@ msgstr "Episodio"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Error en el fichero de subtítulos: encontrado %1 cuando se esperaba %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Error: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Examinando subtítulos"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Examinando audio, subtítulos, abiertos y cerrados"
@@ -940,15 +980,15 @@ msgstr "Examinando contenido"
msgid "Examining subtitles"
msgstr "Examinando subtítulos"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Examinando subtítulos abiertos y cerrados"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Extrayendo"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -956,52 +996,52 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Fallo al identificarse con el servidor (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Fallo al codificar el DCP."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Fallo al enviar el email"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Película"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Nombre de fichero"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Nombre de fichero"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Película"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Buscando la duración"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Velocidad"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Viernes"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Completo"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Completo (0-%1)"
@@ -1025,35 +1065,35 @@ msgstr "Longitud total en frames de vídeo a la velocidad del DCP"
msgid "Full length in video frames at content rate"
msgstr "Longitud total en frames de vídeo a la velocidad del contenido"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradient debander"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Sordos"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Reductor de ruido 3D de alta calidad"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Volteo horizontal"
@@ -1061,19 +1101,19 @@ msgstr "Volteo horizontal"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB o sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "Si usas 25 ípsilons deberías cambiar el standard DCP a SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
#, fuzzy
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
@@ -1084,15 +1124,15 @@ msgstr ""
"importante para elegir Interop. Deberías elegir el standard SMPTE en la "
"pestaña “DCPâ€."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1100,73 +1140,74 @@ msgstr ""
"Se recomienda poner el primer subtítulo al menos 4 segundos tras el comienzo "
"del DCP, para asegurarse que va a verse."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "No se sabe lo que causó este error."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "Envío de KDM: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Kernel deinterlacer"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Izquierda"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Centro izquierda"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Surround trasero izquierda"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Surround izquierda"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Duración"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (bajos)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limitado"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Limitado (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Lineal"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarítmico (rango 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarítmico (rango 316:1)"
@@ -1175,7 +1216,7 @@ msgid "Lost communication between main and writer processes"
msgstr ""
"Se perdió la comunicación entre los el proceso principal y el de escritura"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1183,24 +1224,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Decodificación medio-lateral"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Miscelánea"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "El número de canales de audio no coincide en el DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "La velocidad de reproducción de audio no coincide en el DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "La velocidad de reproducción no coincide en el DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "El tamaño de los vídeos no coincide en el DCP"
@@ -1208,19 +1249,19 @@ msgstr "El tamaño de los vídeos no coincide en el DCP"
msgid "Missing required setting %1"
msgstr "Falta una configuración obligatoria %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Lunes"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Motion compensating deinterlacer"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "No se encontraron CPLs en el DCP."
@@ -1234,80 +1275,93 @@ msgstr "Ningún servidor de correo configurado en las preferencias"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Ningún servidor de correo configurado en las preferencias"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "No se encontraron imágenes válidas en la carpeta."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Reducción de ruido"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Ninguno"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (ejecución %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (ejecución %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Solo la primera pieza a ser unida puede tener un recorte en su comienzo."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Solo la última pieza a ser unida puede tener un recorte en su final."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Subtítulos cerrados"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Subtítulos"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Algunos ficheros han sido modificados desde que se añadieron al proyecto. "
"Abre el proyecto en DCP-o-matic, comprueba las opciones, guárdalo y prueba "
"de nuevo."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Orientación"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Falta de memoria"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Overcomplete wavelet denoiser"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Por favor, informe de este problema usando Ayuda -> Informar de un problema "
+"o vía email a carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Policy"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Preparado para velocidad de vídeo"
@@ -1315,93 +1369,93 @@ msgstr "Preparado para velocidad de vídeo"
msgid "Programming error at %1:%2 %3"
msgstr "Error de programación en %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promo"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Anuncio de servicio público"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Clasificación"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Derecha"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Centro derecha"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Surround trasero derecha"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Surround derecha"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Rotar 90 grados en sentido antihorario"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Rotar 90 grados en sentido horario"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y’D’zD’x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1412,23 +1466,23 @@ msgstr ""
"en movimiento (FFMC). Debes añadir estos marcadores usando “Marcadores†en "
"la pestaña “DCPâ€."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 para sistemas de 10, 12, 14 y 16 bits"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1441,27 +1495,27 @@ msgstr "Error SSH [%1]"
msgid "SSH error [%1] (%2)"
msgstr "Error SSH [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Sábado"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Revisando los ficheros de imagen"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Enviando correo"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Cortometraje"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Signo"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Tamaño"
@@ -1469,7 +1523,7 @@ msgstr "Tamaño"
msgid "Some audio will be resampled to %1Hz"
msgstr "El audio será remuestreado a %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
#, fuzzy
msgid "Some files have been changed since they were added to the project."
msgstr ""
@@ -1477,7 +1531,7 @@ msgstr ""
"\n"
"Estos ficheros serán reexaminados ahora, necesitarás confirmar las opciones."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
#, fuzzy
msgid ""
"Some files have been changed since they were added to the project.\n"
@@ -1499,14 +1553,14 @@ msgstr ""
"\n"
"Estos ficheros serán reexaminados ahora, necesitarás confirmar las opciones."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
"Algunos d los subtítulos cerrados tienen más de %1 líneas, serán cortados."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1529,11 +1583,11 @@ msgstr "Parte del contenido necesita una KDM"
msgid "Some of your content needs an OV"
msgstr "Parte del contenido necesita una OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Estéreo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Estéreo"
@@ -1546,19 +1600,19 @@ msgstr "Upmix de estéreo a 5.1 A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Upmix B de estéreo a 5.1"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Domingo"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Filtro telecine"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1579,25 +1633,25 @@ msgstr "La cadena de certificados para firmar no es válida"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "La cadena de certificados para firmar no es válida (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1607,7 +1661,7 @@ msgstr ""
"imágenes en 3D. Por favor identifícalo como 2D. Puedes crear el DCP en 3D "
"a partir de este contenido, eligiendo la opción 3D en la pestaña DCP."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1615,23 +1669,37 @@ msgstr ""
"En el dispositivo donde se encuentra la película queda poco espacio. Libere "
"espacio en el disco y pruebe de nuevo."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "El fichero %1 ha sido desplazado %2 milisegundos antes."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "El fichero %1 ha sido desplazado %2 milisegundos después."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "El fichero %1 ha sido recortado en %2 milisegundos."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "El fichero %1 ha sido alargado con %2 milisegundos."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1646,11 +1714,11 @@ msgstr ""
"cercana a la del contenido, siempre que el sistema de proyección para el que "
"se está creando soporte esa velocidad de DCP."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "No hay vídeo en este DCP"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1660,32 +1728,35 @@ msgstr ""
"sistema operativo de 32 bits, trate de reducir el número de hilos de "
"codificación en la sección General de las preferencias."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr "Este KDM se hizo para DCP-o-matic pero no para su certificado hoja."
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
"Este KDM no se hizo para el certificado de desencriptado de DCP-o-matic."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"Este error ha posiblemente ocurrido porque estás usando una versión 32 bits "
"de DCP-o-matic e intentando usar demasiados hilos de encodaje. Por favor "
"reduce el número de hilos que DCP-o-matic debe usar en la pestaña General de "
"las Preferencias y prueba de nuevo."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"Este error ha posiblemente ocurrido porque estás usando una versión 32 bits "
"de DCP-o-matic. Por favor reinstala la versión 64 bits de DCP-o-matic y "
@@ -1699,46 +1770,48 @@ msgstr ""
"Este fichero es una KDM. Las KDM pueden añadirse al DCP pinchando con el "
"botón derecho sobre el contenido y eligiendo “Añadir KDMâ€."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Esta película se creó con una versión más reciente de DCP-o-matic, y "
"desgraciadamente no s puede cargar. Necesitas crear una nueva película, "
"volver a añadir y configurar ton contenido. ¡Lo siento!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Esta película se creó con una versión antigua de DCP-o-matic, y "
"desgraciadamente no s puede cargar. Necesitas crear una nueva película, "
"volver a añadir y configurar ton contenido. ¡Lo siento!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Jueves"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Texto síncrono"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Transcodificando %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitional"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Martes"
@@ -1746,7 +1819,7 @@ msgstr "Martes"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Contenidos inesperados del fichero ZIP"
@@ -1754,35 +1827,35 @@ msgstr "Contenidos inesperados del fichero ZIP"
msgid "Unexpected image type received by server"
msgstr "El servidor recibió un tipo de imagen inesperada"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Desconocido"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Error desconocido"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Formato de audio desconocido (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Máscara de desenfoque Gaussiano"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Sin especificar"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Sin título"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Sin uso"
@@ -1794,7 +1867,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1802,11 +1875,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Verificar DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Volteo vertical"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Ciegos"
@@ -1814,23 +1887,23 @@ msgstr "Ciegos"
msgid "Waiting"
msgstr "Esperando"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Filtro Weave"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Miércoles"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1841,7 +1914,7 @@ msgstr ""
"soportada por todos los proyectores. Te recomendamos cambiar la velocidad a "
"%2 ips."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1851,7 +1924,7 @@ msgstr ""
"soportada por todos los proyectores. Considera cambiar la velocidad a %2 "
"ips."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1860,25 +1933,26 @@ msgstr ""
"todos los proyectores. Sé consciente de que puede haber problemas de "
"compatibilidad."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Estás usando contenido 3D pero el DCP es 2D. Cambia el DCP a 3D si quieres "
-"que funcione en un sistema 3D (ej.: Real-D, MasterImage, etc.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Estás usando el upmixer 5.1 de DCP-o-matic. Este es experimental y puede "
"generar un audio de baja calidad. Si continuas, deberías escuchar el DCP "
"resultante en una sala para asegurarte de que suena bien."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Estás usando contenido 3D pero el DCP es 2D. Cambia el DCP a 3D si quieres "
+"que funcione en un sistema 3D (ej.: Real-D, MasterImage, etc.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1886,7 +1960,7 @@ msgstr ""
"Hay %1 ficheros que parecen VOBs de un DVD. Deberías unirlos para asegurarte "
"transiciones suaves."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1894,7 +1968,7 @@ msgstr ""
"Hay más d aun contenido Atmos, y no tienen la misma velocidad. Debes quitar "
"algún contenido Atmos."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1902,7 +1976,7 @@ msgstr ""
"Tienes subtítulos cerrados superpuestos, que no están permitidos en DCPs "
"Interop. Cambia el standard DCP a SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1914,26 +1988,27 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Tiene que añadir contenido al DCP antes de crearlo"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"El DCP tiene menos de 6 pistas de audio. Esto puede causar problemas con "
"algunos sistemas. Quizás deberías hacer un DCP con 6 canales. No importa "
"que el contenido tenga menos canales, DCP-o-matic añadirá silencio en los "
"canales sin audio."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1942,7 +2017,7 @@ msgstr ""
"algunos proyectores. Si es posible, utiliza Flat o Scope como contenedor "
"DCP."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1950,32 +2025,32 @@ msgstr ""
"El nivel de sonido es muy alto (en %1). Deberías reducir la ganancia del "
"audio."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr "El proyecto contiene video que no está alineado a un cuadro."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr "El proyecto contiene video que no está alineado a un cuadro."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[imágenes en movimiento]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[imagen fija]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[subtítulos]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_bobina%1"
@@ -2007,11 +2082,11 @@ msgstr "copiando %1"
msgid "could not find stream information"
msgstr "no se pudo encontrar información del flujo"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "no se puede mover el material Atmos en el DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "no se puede mover el audio en el DCP (%1)"
@@ -2039,7 +2114,7 @@ msgstr "no se pudo escribir en el fichero %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "error durante async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "error durante async_read (%1)"
@@ -2047,28 +2122,28 @@ msgstr "error durante async_read (%1)"
msgid "error during async_write (%1)"
msgstr "error durante async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "imágenes por segundo"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "tiene una velocidad diferente a la película."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
@@ -2076,35 +2151,45 @@ msgstr ""
"deben ser reescritos."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "es 2K y la película es 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "es 4K y la película es 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "es Interop y la película es SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "es SMPTE y la película es Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "se superpone a otro contenido de audio; elimina el otro contenido."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "se superpone a otro contenido de audio; elimina el otro contenido."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "se superpone a otro contenido de vídeo; elimina el otro contenido."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2113,16 +2198,16 @@ msgstr ""
"modo de bobinas ‘dividir por contenido’."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "su tamaño de imagen de vídeo es diferente al de la película."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "moviendo"
@@ -2131,7 +2216,7 @@ msgid "name"
msgstr "nombre"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2140,7 +2225,7 @@ msgstr ""
"debe ser reescrito."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
@@ -2149,31 +2234,39 @@ msgstr ""
"debe ser reescrita."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "imagen fija"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "se superpone a otro contenido de texto; elimina el otro contenido."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "desconocido"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "fotogramas"
+#~ msgid "Copying old video file"
+#~ msgstr "Copiando el antiguo fichero de vídeo"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Copiando el fichero de vídeo en el DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "Notificación de DCP-o-matic"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "se superpone a otro contenido de texto; elimina el otro contenido."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "no tiene subtítulos cerrados en todas las bobinas."
@@ -2184,13 +2277,6 @@ msgstr "fotogramas"
#~ msgstr "no tiene audio en todas las bobinas."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Por favor, informe de este problema usando Ayuda -> Informar de un "
-#~ "problema o vía email a carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "El contenedor por defecto no es válido y ha sido modificado a Flat "
diff --git a/src/lib/po/fa_IR.po b/src/lib/po/fa_IR.po
index 7d22e83ce..ff1d68f66 100644
--- a/src/lib/po/fa_IR.po
+++ b/src/lib/po/fa_IR.po
@@ -8,17 +8,17 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
-"PO-Revision-Date: 2024-01-11 18:23+0330\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
+"PO-Revision-Date: 2024-10-05 18:17+0330\n"
"Last-Translator: Soleyman Rahmani Aghdam <Soleyman.rahmani@gmail.com>\n"
"Language-Team: \n"
"Language: fa_IR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.4.2\n"
+"X-Generator: Poedit 3.5\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -27,7 +27,7 @@ msgstr ""
"\n"
"تعداد ÙØ±ÛŒÙ… محتوا در ثانیه %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -35,7 +35,7 @@ msgstr ""
"\n"
"بریده شد به %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -44,7 +44,7 @@ msgstr ""
"\n"
"نسبت ابعاد ØµÙØ­Ù‡ نمایش %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -52,7 +52,7 @@ msgstr ""
"\n"
"با نوار مشکی تا هم اندازه ظر٠محتوا پوشیده شد %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -60,18 +60,18 @@ msgstr ""
"\n"
"تغییر مقیاس به %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " روی %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -95,39 +95,87 @@ msgstr ""
"مدت: $LENGTH\n"
"حجم: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$نام_عملیات: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [دالبی اتمز]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [دی سی پی]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [صدا]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [Ùیلم]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [ویدیو]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"%1 نمیتوان ÙØ§ÛŒÙ„ %2(%3) را باز کرد. ممکن است ÙØ§ÛŒÙ„ یا وجود نداشته باشد Ùˆ یا ÙØ±Ù…ت "
+"مناسب نداشته باشد."
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review those "
+"settings to make sure they are what you want."
+msgstr ""
+"%1 مجبور شد برای ارجاع به یک دی سی پی به عنوان نسخه اصلی (OV) تنظیمات شما را "
+"تغییر دهد. Ù„Ø·ÙØ§ آنها را بررسی کنید تا مطمئن شوید همان چیزی است Ú©Ù‡ شما Ù…ÛŒ خواهید."
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as that "
+"of your Atmos content."
+msgstr ""
+"%1 مجبور شد تنظیمات شما را تغییر دهد تا نرخ ÙØ±ÛŒÙ… Ùیلم برابر محتوای دالبی اتمز "
+"شما شود."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies within "
+"the film."
+msgstr ""
+"%1 مجبور به حذ٠یکی از مرزهای تعیین شده شما برای ریل گردید به دلیل اینکه دیگر در "
+"داخل محدوده Ùیلم قرار نمی Ú¯Ø±ÙØª."
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+"%1 مجبور به حذ٠تعدادی از مرزهای تعیین شده شما برای ریل گردید به دلیل اینکه دیگر "
+"در داخل محدوده Ùیلم قرار نمی Ú¯Ø±ÙØªÙ†Ø¯."
+
+#: src/lib/ffmpeg_content.cc:122
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "%1 دیگر از Ùیلتر'2%' پشتیبانی نمیکند، بنابراین خاموش شده است."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+msgid "%1 notification"
+msgstr "%1 یادداشت"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1 ; %2/%3 ÙØ±ÛŒÙ…ها"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", نسبت ابعاد پیکسلها %.2f:1"
@@ -164,11 +212,11 @@ msgstr "1/85(تخت)"
msgid "1.90 (Full frame)"
msgstr "1/90(تمام ÙØ±ÛŒÙ…)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr "10"
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr "16"
@@ -180,53 +228,52 @@ msgstr "2/35(35 میلیمتری اسکوپ)"
msgid "2.39 (Scope)"
msgstr "2/39(اسکوپ)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "ضد نویز سه بعدی"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
-"4K 3D is only supported by a very limited number of projectors. Unless you "
-"know that you will play this DCP back on a capable projector, it is "
-"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
+"4K 3D is only supported by a very limited number of projectors. Unless you know "
+"that you will play this DCP back on a capable projector, it is advisable to set "
+"the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-"نسخه سه بعدی 4k در تعداد کمی از پروژکتورها پشتیبانی میشود. توصیه میشود که دی "
-"سی پی را از طریق \"دی سی پی ---> ویدیو\" روی 2k قرار دهید، مگر آنکه از نمایش "
-"دی سی پی 4K در پروژکتور مد نظر اطمینان داشته باشید."
+"نسخه سه بعدی 4k در تعداد کمی از پروژکتورها پشتیبانی میشود. توصیه میشود که دی سی "
+"پی را از طریق \"دی سی پی ---> ویدیو\" روی 2k قرار دهید، مگر آنکه از نمایش دی سی "
+"پی 4K در پروژکتور مد نظر اطمینان داشته باشید."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 ÙØ±ÛŒÙ… بر ثانیه"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 باقیمانده ; پایان در %2%3"
-#: src/lib/analytics.cc:65
-msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
-msgstr ""
-"<h2>شما %1 دی سی پی با دی سی پی-او-ماتیک ساخته اید! \n"
+#: src/lib/analytics.cc:66
+msgid ""
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me.jpg\" "
+"align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the developer of "
+"%3. I work on it in my spare time (with the help of a fine volunteer team of "
+"testers and translators) and I release it as free software.<p>If you find %4 "
+"useful, please consider a donation to the project. Financial support will help "
+"me to spend more time developing %5 and making it better!<p><ul><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=40\">Go to Paypal to donate "
+"€40</a><li><a href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to "
+"Paypal to donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!</font>"
+msgstr ""
+"<h2>شما دی سی پی 1% ساخته اید با 2%! \n"
"</h2><img width=\"20%%\" src=\"memory:me.jpg\" align=\"center\"><p> \n"
-"سلام، من کارل هستم توسعه دهنده دی سی Ù¾ÛŒ-او-ماتیک. من در اوقات ÙØ±Ø§ØºØª (با Ú©Ù…Ú© "
-"داوطلبان و مترجمین خوب) روی آن کار میکنم و آنرا رایگان منتشر میکنم. \n"
-"<p> اگر دی سی Ù¾ÛŒ-او-ماتیک برای شما سودمند است، Ù„Ø·ÙØ§Ù‹ به این پروژه Ú©Ù…Ú© کنید."
-"پشتیبانی مالی به من کمک میکند تا وقت بیشتری صر٠توسعه و بهبود آن کنم!<p> n\n"
+"سلام، من کارل هستم توسعه دهنده 3% . من در اوقات ÙØ±Ø§ØºØª (با Ú©Ù…Ú© داوطلبان Ùˆ مترجمین "
+"خوب) روی آن کار میکنم و آنرا رایگان منتشر میکنم. \n"
+"<p> اگر 4% برای شما سودمند است، Ù„Ø·ÙØ§Ù‹ به این پروژه Ú©Ù…Ú© کنید. پشتیبانی مالی به من "
+"کمک میکند تا وقت بیشتری صر٠توسعه و بهبود 5% کنم!<p> n\n"
"برو به پی پال برای پرداخت 40 یورو!<ul><li><a ref=\"https://dcpomatic.com/"
"donate_amount?amount=40\">\n"
" برو به پی پال برای پرداخت 20 یورو!a><li><a href=\"https://dcpomatic.com/"
@@ -234,58 +281,56 @@ msgstr ""
"برو به پی پال برای پرداخت 10 یورو! a><li><a href=\"https://dcpomatic.com/"
"donate_amount?amount=10\">\n"
"</a></ul><p>\n"
-"متشکرم!"
+"متشکرم! </font>"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
msgid ""
-"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
-"unlikely to have any visible effect on the image."
+"A few projectors have problems playing back very high bit-rate DCPs. It is a "
+"good idea to drop the video bit rate down to about 200Mbit/s; this is unlikely "
+"to have any visible effect on the image."
msgstr ""
"برخی پروژکتورها برای پخش دی سی پی های با نرخ بیت بسیار بالا مشکل دارند. ایده "
-"خوبی است که عرض باند JPEG2000 را تا 200 مگابیت بر ثانیه کاهش دهید; این کار "
-"اثر قابل مشاهده ای روی تصویر ندارد."
+"خوبی است که نرخ بیت ویدیو را تا 200 مگابیت بر ثانیه کاهش دهید; این کار اثر قابل "
+"مشاهده ای روی تصویر ندارد."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
-"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"A subtitle or closed caption file in this project is marked with the language "
+"'%1', which %2 does not recognise. The file's language has been cleared."
msgstr ""
-"یک زیرنویس یا ÙØ§ÛŒÙ„ زیرنویس با زبان '%1 در این پروژه مشخص شده است، Ú©Ù‡ برای دی "
-"سی Ù¾ÛŒ-او-ماتیک قابل تشخیص نیست. زبان ÙØ§ÛŒÙ„ پاک شده است."
+"یک زیرنویس یا ÙØ§ÛŒÙ„ زیرنویس با زبان '1%' در این پروژه مشخص شده است، Ú©Ù‡ 2% قابل "
+"تشخیص نیست. زبان ÙØ§ÛŒÙ„ پاک شده است."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "تبلیغات بازرگانی"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
-"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
-"You may prefer to set your DCP's container to Scope (2.39:1) in the \"DCP\" "
-"tab."
+"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. You "
+"may prefer to set your DCP's container to Scope (2.39:1) in the \"DCP\" tab."
msgstr ""
-"محتوای شما با نسبت 2/39 به 1 است(اسکوپ)، اما ظر٠دی سی پی شما کوچکتر و 1/85 "
-"به 1 است(تخت). تصویر شما کوچک شده و در داخل یک قاب تخت (1/85 به 1) قرار "
-"میگیرد. ممکن است ترجیح دهید ظر٠دی سی پی را در زبانه \"دی سی پی\" بزرگتر و "
-"روی اسکوپ (2/39 به 1) قرار دهید."
+"محتوای شما با نسبت 2/39 به 1 است(اسکوپ)، اما ظر٠دی سی پی شما کوچکتر و 1/85 به 1 "
+"است(تخت). تصویر شما کوچک شده و در داخل یک قاب تخت (1/85 به 1) قرار میگیرد. ممکن "
+"است ترجیح دهید ظر٠دی سی پی را در زبانه \"دی سی پی\" بزرگتر و روی اسکوپ (2/39 به "
+"1) قرار دهید."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
-"(2.39:1). This will pillar-box your content. You may prefer to set your "
-"DCP's container to have the same ratio as your content."
+"(2.39:1). This will pillar-box your content. You may prefer to set your DCP's "
+"container to have the same ratio as your content."
msgstr ""
-"عرض محتوای شما کمتر از 1/90 است اما ظر٠دی سی پی شما اسکوپ (2/39 به 1) است. "
-"باعث میشود کناره های محتوا سییاه شود. ممکن است ترجیح دهید که ظر٠دی سی پی "
-"خود را مشابه با نسبت ابعاد محتوا تغییر دهید."
+"عرض محتوای شما کمتر از 1/90 است اما ظر٠دی سی پی شما اسکوپ (2/39 به 1) است. باعث "
+"میشود کناره های محتوا سییاه شود. ممکن است ترجیح دهید که ظر٠دی سی پی خود را "
+"مشابه با نسبت ابعاد محتوا تغییر دهید."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "بروز خطا هنگام دسترسی به ÙØ§ÛŒÙ„ %1."
@@ -293,68 +338,67 @@ msgstr "بروز خطا هنگام دسترسی به ÙØ§ÛŒÙ„ %1."
msgid "Analysing audio"
msgstr "آنالیز صدا"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "آنالیز زیرنویس"
-#: src/lib/hints.cc:366
-msgid ""
-"At least one marker comes after the end of the project and will be ignored."
+#: src/lib/hints.cc:386
+msgid "At least one marker comes after the end of the project and will be ignored."
msgstr "حداقل یک نشانه در آخر پروژه قرار Ú¯Ø±ÙØªÙ‡ Ú©Ù‡ از آن صر٠نظر شد."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "حداقل یکی از ÙØ§ÛŒÙ„های زیرنویس شما بزرگتر است از "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "حداقل یکی از قسمتهای XML ÙØ§ÛŒÙ„های زیرنویس شما بزرگتر است از "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "حداقل یکی از ÙØ§ÛŒÙ„های زیرنویس شما بزرگتر است از "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-"حداقل یکی از خطهای زیرنویس شما بیشتر از 52 حر٠دارد. توصیه میشود طول هر خط "
-"را حداکثر به 52 حر٠تغییر دهید."
+"حداقل یکی از خطهای زیرنویس شما بیشتر از 52 حر٠دارد. توصیه میشود طول هر خط را "
+"حداکثر به 52 حر٠تغییر دهید."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-"حداقل یکی از خطهای زیرنویس شما بیش از 79 حر٠دارد. شما باید طول هر خط را "
-"حداکثر به 79 حر٠تغییر دهید."
+"حداقل یکی از خطهای زیرنویس شما بیش از 79 حر٠دارد. شما باید طول هر خط را حداکثر "
+"به 79 حر٠تغییر دهید."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
-"At least one of your subtitles has more than 3 lines. It is advisable to "
-"use no more than 3 lines."
+"At least one of your subtitles has more than 3 lines. It is advisable to use no "
+"more than 3 lines."
msgstr ""
-"حداقل یکی از زیرنویسهای شما بیش از 3 خط دارد. توصیه میشود بیش از سه خط "
-"Ø§Ø³ØªÙØ§Ø¯Ù‡ نکنید."
+"حداقل یکی از زیرنویسهای شما بیش از 3 خط دارد. توصیه میشود بیش از سه خط Ø§Ø³ØªÙØ§Ø¯Ù‡ "
+"نکنید."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
-"At least one of your subtitles lasts less than 15 frames. It is advisable "
-"to make each subtitle at least 15 frames long."
+"At least one of your subtitles lasts less than 15 frames. It is advisable to "
+"make each subtitle at least 15 frames long."
msgstr ""
-"حداقل یک زیرنویس وجود دارد Ú©Ù‡ زمان آن کمتر از 15 ÙØ±ÛŒÙ… است. توصیه میشود زمان "
-"هر زیرنویس حداقل 15 ÙØ±ÛŒÙ… بر ثانیه باشد."
+"حداقل یک زیرنویس وجود دارد Ú©Ù‡ زمان آن کمتر از 15 ÙØ±ÛŒÙ… است. توصیه میشود زمان هر "
+"زیرنویس حداقل 15 ÙØ±ÛŒÙ… بر ثانیه باشد."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-"حداقل یکی از زیرنویسهای شما کمتر از 2 ÙØ±ÛŒÙ… بعد از زیرنویس قبلی شروع میشود. "
-"توصیه میشود زمان بین دو زیرنویس حداقل 2 ÙØ±ÛŒÙ… باشد."
+"حداقل یکی از زیرنویسهای شما کمتر از 2 ÙØ±ÛŒÙ… بعد از زیرنویس قبلی شروع میشود. توصیه "
+"میشود زمان بین دو زیرنویس حداقل 2 ÙØ±ÛŒÙ… باشد."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -376,72 +420,72 @@ msgstr "صدا با %1هرتز نمونه برداری مجدد میشود"
msgid "Audio will not be resampled"
msgstr "صدا نمونه برداری مجدد نمیشود"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "طی٠رنگی گسترده BT1361"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "روشنایی ثابت BT2020"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 برای یک سیستم 10 بیتی"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 برای یک سیستم 12 بیتی"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "روشنایی غیر ثابت BT2020"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "تعداد بیتها بر پیکسل"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Ùیلتر ضداینترلیس باب ویور"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "c"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "لغو شد"
@@ -453,11 +497,11 @@ msgstr "نمیتواند شامل اسلش باشد"
msgid "Cannot handle pixel format %1 during %2"
msgstr "نمیتوان ÙØ±Ù…ت پیکسل %1 را همزمان با %2 کار کرد"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "برای پروژه ای که رمزگذاری نشده است کلید ساخته نمیشود."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "مرکز"
@@ -465,7 +509,7 @@ msgstr "مرکز"
msgid "Channels"
msgstr "کانالها"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "تنظیمات جدید آنها را بررسی، سپس مجددا تلاش کنید."
@@ -473,27 +517,31 @@ msgstr "تنظیمات جدید آنها را بررسی، سپس مجددا تÙ
msgid "Checking content"
msgstr "بررسی محتوا"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "بررسی داده های تصویر موجود"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "روشنایی ثابت مشتق از رنگ"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "روشنایی غیر ثابت مشتق از رنگ"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr "کلیپ"
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
-msgstr "زیرنویس Ùیلم"
+msgstr "عنوان پایان Ùیلم"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+msgid "Closed subtitles"
+msgstr "زیرنویس های پایان Ùیلم"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "رنگهای اصلی"
@@ -507,17 +555,17 @@ msgstr "رنگهای اصلی"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "محدوده رنگ"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "مشخصه انتقال رنگ"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "ÙØ¶Ø§ÛŒ رنگ"
@@ -525,15 +573,15 @@ msgstr "ÙØ¶Ø§ÛŒ رنگ"
msgid "Combine DCPs"
msgstr "ترکیب دی سی پی ها"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "در حال محاسبات"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "در حال محاسبات"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "تبریک میگویم!"
@@ -549,19 +597,19 @@ msgstr "عمق بیت محتوا"
msgid "Content sample rate"
msgstr "نرخ نمونه محتوا"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "محتوایی که الحاق میشود همه با صدا یا همه بی صدا باید باشد"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "محتوایی که الحاق میشود همه با زیرنویس یا همه بدون زیرنویس باید باشد"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "محتوایی که الحاق میشود همه با ویدیو و یا همه بدون ویدیو باید باشد"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -571,12 +619,11 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "محتوایی Ú©Ù‡ الحاق میشود یا باید همه ویدیوی آن Ø§Ø³ØªÙØ§Ø¯Ù‡ شود یا هیچ."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
-msgstr ""
-"محتوایی که الحاق میشود باید همان تنظیمات 'زیرنویس حک شده' را داشته باشد."
+msgstr "محتوایی که الحاق میشود باید همان تنظیمات 'زیرنویس حک شده' را داشته باشد."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"محتوایی Ú©Ù‡ الحاق میشود باید همان تنظیمات 'Ø§Ø³ØªÙØ§Ø¯Ù‡ از زیرنویس' را داشته باشد."
@@ -613,7 +660,7 @@ msgstr "محتوایی که الحاق میشود باید تنظیمات اند
msgid "Content to be joined must have the same fades."
msgstr "محتوایی Ú©Ù‡ الحاق میشود باید ÙÛŒÙØ¯ مشابه داشته باشد."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "محتوایی که الحاق میشود باید پهنای کلی مشابهی داشته باشد."
@@ -621,31 +668,31 @@ msgstr "محتوایی Ú©Ù‡ الحاق میشود باید پهنای Ú©Ù„ÛŒ Ù…Ø
msgid "Content to be joined must have the same picture size."
msgstr "محتوایی که الحاق میشود باید اندازه تصویر مشابهی داشته باشد."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "محتوایی که الحاق میشود باید موقعیت X زیرنویس مشابه داشته باشد."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "محتوایی که الحاق میشود باید مقیاس X زیرنویس مشابه داشته باشد."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "محتوایی که الحاق میشود باید موقعیتY زیرنویس مشابه داشته باشد."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "محتوایی که الحاق میشود باید مقیاس Y زیرنویس مشابه داشته باشد."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "محتوایی Ú©Ù‡ الحاق میشود باید ÙÛŒÙØ¯ زیرنویس مشابه داشته باشد."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "محتوایی Ú©Ù‡ الحاق میشود باید ÙØ§ØµÙ„Ù‡ خط زیرنویس مشابه داشته باشد."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "محتوایی Ú©Ù‡ الحاق میشود باید نرخ ÙØ±ÛŒÙ… ویدیوی مشابه داشته باشد"
@@ -653,23 +700,23 @@ msgstr "محتوایی Ú©Ù‡ الحاق میشود باید نرخ ÙØ±ÛŒÙ… ÙˆÛŒØ
msgid "Content to be joined must have the same video frame type."
msgstr "محتوایی Ú©Ù‡ الحاق میشود باید نوع ÙØ±ÛŒÙ… ویدیوی مشابه داشته باشد."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "محتوایی که الحاق میشود باید ترک دی سی پی مشابه داشته باشد."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "محتوایی Ú©Ù‡ الحاق میشود باید Ùونتهای مشابه داشته باشد."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "محتوایی که الحاق میشود باید رشته کد زیرنویس مشابه داشته باشد."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "محتوایی که الحاق میشود باید زبان نوشتاری مشابه داشته باشد."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "محتوای ویدیو %1x%2 است"
@@ -677,14 +724,6 @@ msgstr "محتوای ویدیو %1x%2 است"
msgid "Copy DCP to TMS"
msgstr "کپی دی سی پی به تی ام اس"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیوی قدیمی"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیو به دی سی Ù¾ÛŒ"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "ارتباط با سرور ممکن نیست %1(%2)"
@@ -701,20 +740,19 @@ msgstr "ÙØ§ÛŒÙ„ JPEG2000 رمزگشایی نشد %1(%2)"
msgid "Could not decode image (%1)"
msgstr "تصویر رمزگشایی نشد (%1)"
-#: src/lib/unzipper.cc:64
-#, fuzzy
+#: src/lib/unzipper.cc:76
msgid "Could not find file %1 in ZIP file"
-msgstr "ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ دانلود شده باز نشد"
+msgstr "ÙØ§ÛŒÙ„ 1% در ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ پیدا نشد"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 is "
+"running."
msgstr ""
-"نمیتوان به سرورهای رمزگذاری راه دور گوش داد. ممکن است نسخه دیگری از دی سی پی-"
-"او-ماتیک در حال اجرا باشد."
+"نمیتوان به سرورهای رمزگذاری راه دور گوش داد. ممکن است نسخه دیگری از 1% در حال "
+"اجرا باشد."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "باز نشد %1"
@@ -722,19 +760,19 @@ msgstr "باز نشد %1"
msgid "Could not open %1 to send"
msgstr "برای ارسال باز نشد %1"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ دانلود شده باز نشد"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡ دانلود شده باز نشد (%1:%2:%3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "ÙØ§ÛŒÙ„ برای نوشتن باز نشد"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "ÙØ§ÛŒÙ„ خروجی باز نشد %1(%2)"
@@ -750,19 +788,19 @@ msgstr "نمی توان انتقال را شروع کرد"
msgid "Could not write to remote file (%1)"
msgstr "نمیتوان در ÙØ§ÛŒÙ„ راه دور نوشت(%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "دی-باکس اصلی"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "دی-باکس ثانویه"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "دی بی پی"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "دی بی اس"
@@ -774,7 +812,7 @@ msgstr "دی سی آی تخت"
msgid "DCI Scope"
msgstr "دی سی آی اسکوپ"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "زیرنویس های XML دی سی پی"
@@ -791,51 +829,40 @@ msgstr "دی سی پی با %.1f%% سرعت محتوا اجرا خواهد شد
msgid "DCP will use every other frame of the content.\n"
msgstr "دی سی Ù¾ÛŒ از هر ÙØ±ÛŒÙ… دیگر محتوا Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that can "
+"be used with MPEG2 encoding."
msgstr ""
-"دی سی Ù¾ÛŒ-او-ماتیک نمی تواند ÙØ§ÛŒÙ„ %1(%2) را باز کند. ÙØ§ÛŒÙ„ یا وجود ندارد Ùˆ یا "
-"ÙØ±Ù…ت مناسب."
+"چهارچوب محتوای شما توسط DOMروی 1920x1080تنظیم شد زیرا تنها گزینه ای است که برای "
+"رمزگذاری MPEG2 میتواند مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ قرارگیرد."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"دی سی پی-او-ماتیک مجبور شد برای ارجاع به یک دی سی پی به عنوان نسخه اصلی "
-"تنظیمات شما را تغییر دهد. Ù„Ø·ÙØ§ آنها را بررسی کنید تا مطمئن شوید همان چیزی "
-"است که شما می خواهید."
+"در حال حاضرسه بعدی توسط DOM برای رمزگذاری MPEG2 پشتیبانی نمیشود به همین دلیل "
+"Ùیلم شما روی دو بعدی تنظیم گردید."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 and "
+"that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"دی سی Ù¾ÛŒ-او-ماتیک مجبور شد تنظیمات شما را تغییر دهد تا نرخ ÙØ±ÛŒÙ… Ùیلم برابر "
-"محتوای دالبی اتمز شما شود."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr ""
-"دی سی Ù¾ÛŒ-او-ماتیک دیگر از Ùیلتر'%1'پشتیبانی نمیکند، بنابراین خاموش شده است."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "اعلان دی سی پی-او-ماتیک"
+"DOM چهارچوب محتوا را روی DCI Flat تنظیم کرد، که قبلا روی 1920x1080 بود که برای "
+"رمزگذاری JPEG2000 یک نسبت استاندارد نیست."
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 or AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "ضد-اینترلیسینگ"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
msgid ""
"Dear Projectionist\n"
"\n"
@@ -847,7 +874,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"سینمادار عزیز\n"
"\n"
@@ -856,16 +883,20 @@ msgstr ""
"سینما: $CINEMA_NAME\n"
"سالن(ها) $SCREENS\n"
"\n"
-"اعتبار کلید از$START_TIMEتا $END_TIMEاست .\n"
+"اعتبار کلید از$START_TIMEتا $END_TIMEاست .\n"
"\n"
"با احترام,\n"
-"دی سی پی-او-ماتیک"
+"%1"
+
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr "هنگام نوشتن 1% دیسک پر شد"
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "دالبی CP650 یا CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "دانلود با خطا مواجه شد(%1 خطا%2)"
@@ -889,19 +920,19 @@ msgstr "ایمیل کلیدها برای %1"
msgid "Email notification"
msgstr "اعلان ایمیل"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "گزارش مشکل ایمیل"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "گزارش مشکل ایمیل برای %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "رمزگذاری"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "قسمت"
@@ -909,19 +940,19 @@ msgstr "قسمت"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "خطا در ÙØ§ÛŒÙ„ زیرنویس: % 1 دیدم در حالی Ú©Ù‡ انتظار % 2 را داشتم"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "خطا: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr "رویداد"
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
msgid "Examining audio"
msgstr "بررسی صدا"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "بررسی صدا، زیرنویس Ùˆ ÙØ§ÛŒÙ„ زیرنویس"
@@ -933,15 +964,15 @@ msgstr "بررسی محتوا"
msgid "Examining subtitles"
msgstr "بررسی زیرنویس"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "بررسی ÙØ§ÛŒÙ„ های زیرنویس"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "استخراج کردن"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -949,51 +980,51 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "احراز هویت با سرور ناموÙÙ‚(%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "رمزگذاری دی سی Ù¾ÛŒ ناموÙÙ‚."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "ارسال ایمیل ناموÙÙ‚"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Ùیلم بلند"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "نام ÙØ§ÛŒÙ„"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr "نام ÙØ§ÛŒÙ„ها"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "ÙØ§ÛŒÙ„ها از زمانی Ú©Ù‡ به پروژه اضاÙÙ‡ شده اند تغییر کرده اند."
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Ùیلم"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "در حال ÛŒØ§ÙØªÙ† مدت"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "نرخ ÙØ±ÛŒÙ…"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "جمعه"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "کامل"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "کامل(0-%1)"
@@ -1017,35 +1048,35 @@ msgstr "زمان کامل در ÙØ±ÛŒÙ…های ویدیوبرابر با نرخ Ø
msgid "Full length in video frames at content rate"
msgstr "زمان کامل در ÙØ±ÛŒÙ…های ویدیوبرابر با نرخ محتوا"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "گاما22(BT470)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "گاما28(BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradient debander"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "اختلال شنوایی"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "ناشنوا"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "ضد نویزسه بعدی با Ú©ÛŒÙیت"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr "نکات برجسته"
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "برگردان اÙÙ‚ÛŒ"
@@ -1053,115 +1084,115 @@ msgstr "برگردان اÙÙ‚ÛŒ"
msgid "Hz"
msgstr "هرتز"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB or sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-"اگر از 25 ÙØ±ÛŒÙ… بر ثانیه Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید استاندارد دی سی Ù¾ÛŒ خود را به اس ام Ù¾ÛŒ "
-"تی ای تغییر دهید."
+"اگر از 25 ÙØ±ÛŒÙ… بر ثانیه Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید استاندارد دی سی Ù¾ÛŒ خود را به اس ام Ù¾ÛŒ تی "
+"ای تغییر دهید."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
-"In general it is now advisable to make SMPTE DCPs unless you have a "
-"particular reason to use Interop. It is advisable to set your DCP to use "
-"the SMPTE standard in the \"DCP\" tab."
+"In general it is now advisable to make SMPTE DCPs unless you have a particular "
+"reason to use Interop. It is advisable to set your DCP to use the SMPTE "
+"standard in the \"DCP\" tab."
msgstr ""
"به طور کلی اکنون توصیه میشود که دی سی پی اس ام پی تی ای بسازید حتی اگر دلیل "
"معینی برای Ø§Ø³ØªÙØ§Ø¯Ù‡ از اینتروپ دارید. توصیه میشود Ú©Ù‡ در زبانه \"دی سی Ù¾ÛŒ\" "
"استاندارد اس ام پی تی ای را برای دی سی پی خودتان انتخاب کنید."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
-"Positioning should now be more correct, with respect to the standards, but "
-"you should check any subtitles in your project to make sure that they are "
-"placed where you want them."
+"In this version there are changes to the way that subtitles are positioned. "
+"Positioning should now be more correct, with respect to the standards, but you "
+"should check any subtitles in your project to make sure that they are placed "
+"where you want them."
msgstr ""
-"در این نسخه در نحوه جانمایی زیرنویسها تغییراتی وجود دارد. اکنون مطابق با "
-"استانداردها، جانمایی بسیار دقیقتر است، اما شما باید همه زیرنویسهای پروژه خود "
-"را برای اطمینان از جانمایی درست بررسی کنید."
+"دراین نسخه از نرم Ø§ÙØ²Ø§Ø± در نحوه جانمایی زیرنویسها تغییراتی داده شده است. اکنون "
+"مطابق با استانداردها، جانمایی بسیار دقیقتر است، اما شما باید همه زیرنویسهای "
+"پروژه خود را برای اطمینان از جانمایی مناسب بررسی کنید."
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
-"It is advisable to put your first subtitle at least 4 seconds after the "
-"start of the DCP to make sure it is seen."
+"It is advisable to put your first subtitle at least 4 seconds after the start of "
+"the DCP to make sure it is seen."
msgstr ""
-"توصیه میشود که اولین زیرنویس خود را حداقل 4 ثانیه بعد از شروع دی سی پی قرار "
-"دهید تا مطمئن شوید که دیده میشود."
+"توصیه میشود که اولین زیرنویس خود را حداقل 4 ثانیه بعد از شروع دی سی پی قرار دهید "
+"تا مطمئن شوید که دیده میشود."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
-msgstr "معلوم نیست چه چیزی باعث این خطا شده است."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+msgid "It is not known what caused this error. %1"
+msgstr "معلوم نیست چه چیزی باعث این خطا شده است. 1%"
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "تحویل کلید: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "ضد اینترلیسر هسته"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "Ú†Ù¾"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Ú†Ù¾"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "مرکز- چپ"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "پشت سر- چپ سراوند"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "چپ سراوند"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "مدت"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "اÙکت ÙØ±Ú©Ø§Ù†Ø³ پایین"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "اÙکت ÙØ±Ú©Ø§Ù†Ø³ پایین (sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "محدود شد"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
msgid "Limited / video (%1-%2)"
msgstr "محدود شد/ویدیو (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "خطی"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "لگاریتمی(محدوده 100 به 1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "لگاریتمی(محدوده 316 به 1)"
@@ -1169,7 +1200,7 @@ msgstr "لگاریتمی(محدوده 316 به 1)"
msgid "Lost communication between main and writer processes"
msgstr "قطع ارتباط بین پردازش های اصلی و رایتر"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "سراوند چپ"
@@ -1177,24 +1208,24 @@ msgstr "سراوند چپ"
msgid "Mid-side decoder"
msgstr "رمزگشای میانه"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Ù…ØªÙØ±Ù‚Ù‡"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "تعداد کانالهای صدا در دی سی پی مطابقت ندارند"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "نرخ های نمونه صدا در دی سی پی مطابقت ندارند"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "نرخ های ÙØ±ÛŒÙ… در دی سی Ù¾ÛŒ مطابقت ندارند"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "اندازه های ویدیو در دی سی پی مطابقت ندارند"
@@ -1202,19 +1233,19 @@ msgstr "اندازه های ویدیو در دی سی پی مطابقت ندار
msgid "Missing required setting %1"
msgstr "تنظیم مورد نیاز وجود ندارد%1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "دوشنبه"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "مونو"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "ضد اینترلیسر جبران کننده حرکت"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "سی پی الی در دی سی پی وجود ندارد."
@@ -1226,80 +1257,88 @@ msgstr "در قسمت اولویتها، زبانه ایمیل کلید، آدر
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "در قسمت اولویتها، زبانه ایمیل، آدرس سرور ایمیل خروجی تعیین نشده است"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "در این پوشه ÙØ§ÛŒÙ„ تصویر معتبری پیدا نشد."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "کاهش نویز"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "هیچکدام"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr "مورد تایید"
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
msgid "OK (ran for %1 from %2 to %3)"
msgstr "مورد تایید (اجرا شد %1 از %2 تا %3)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "مورد تایید (اجرا شد %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
-"Ùقط اولین قسمت محتوا Ú©Ù‡ الحاق میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ شروع "
-"باشد."
+"Ùقط اولین قسمت محتوا Ú©Ù‡ الحاق میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ شروع باشد."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
-"Ùقط آخرین قسمت محتوا Ú©Ù‡ الحاق میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ پایان "
-"باشد."
+"Ùقط آخرین قسمت محتوا Ú©Ù‡ الحاق میشود میتواند شامل یک نقطه تغییر ÛŒØ§ÙØªÙ‡ پایان باشد."
+
+#: src/lib/text_type.cc:81
+msgid "Open captions"
+msgstr "عنوان شروع Ùیلم"
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
-msgstr "بازکردن زیرنویس"
+msgstr "زیرنویس شروع Ùیلم"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-"بازکردن پروژه در دی سی پی-او-ماتیک، بررسی تنظیمات، سپس ذخیره کنید قبل از "
-"اینکه مجددا تلاش کنید."
+"بازکردن پروژه در 1%، بررسی تنظیمات، سپس قبل از تلاش مجدد یک بار پروژه را ذخیره "
+"کنید."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "جهت"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Ø­Ø§ÙØ¸Ù‡ پر شده"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "ضد نویز Ùوق کامل ویولت"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "پی3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to %1"
+msgstr ""
+"Ù„Ø·ÙØ§ این مشکل را از طریق منوی \"راهنما --> گزارش یک مشکل\" Ùˆ یا ارسال ایمیل به "
+"1% گزارش دهید"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "خط مشی"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr "کانال Ø¢Ù„ÙØ§ پیش از ضرب"
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "برای نرخ ÙØ±ÛŒÙ… ویدیو آماده است"
@@ -1307,119 +1346,119 @@ msgstr "برای نرخ ÙØ±ÛŒÙ… ویدیو آماده است"
msgid "Programming error at %1:%2 %3"
msgstr "خطای برنامه نویسی در%1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "تبلیغاتی"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "سرویس اعلان عمومی"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "راست"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "آر جی بی / اس آر جی بی (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "رتبه بندی"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "توصیه نامه 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "توصیه نامه 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "توصیه نامه 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "توصیه نامه 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "راست"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "مرکز- راست"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "پشت سر- سراوند راست"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "سراوند راست"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "چرخش 90 درجه خلا٠عقربه ساعت"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "چرخش 90 درجه در جهت عقربه ساعت"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "سراوند راست"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
-"SMPTE DCPs with the type FTR (feature) should have markers for the first "
-"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
-"You should add these markers using the 'Markers' button in the \"DCP\" tab."
+"SMPTE DCPs with the type FTR (feature) should have markers for the first frame "
+"of end credits (FFEC) and the first frame of moving credits (FFMC). You should "
+"add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-"دی سی Ù¾ÛŒ های استاندارد اس ام Ù¾ÛŒ تی ای از نوع Ùیلم بلند(FTR) باید برای اولین "
-"ÙØ±ÛŒÙ… شروع تیتراژ پایانی Ùˆ آغاز دارای نشانگر باشند. در زبانه دی سی Ù¾ÛŒ توسط "
-"\"نشانه گذار\" آنها را اضاÙÙ‡ کنید."
+"دی سی Ù¾ÛŒ های استاندارد اس ام Ù¾ÛŒ تی ای از نوع Ùیلم بلند(FTR) باید برای اولین ÙØ±ÛŒÙ… "
+"شروع تیتراژ پایانی و آغاز دارای نشانگر باشند. در زبانه دی سی پی توسط \"نشانه "
+"گذار\" آنها را اضاÙÙ‡ کنید."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1427,32 +1466,31 @@ msgstr "SMPTE ST 432-1 D65 (2010)"
msgid "SSH error [%1]"
msgstr "خطای اس اس اچ [%1]"
-#: src/lib/scp_uploader.cc:63 src/lib/scp_uploader.cc:76
-#: src/lib/scp_uploader.cc:83
+#: src/lib/scp_uploader.cc:63 src/lib/scp_uploader.cc:76 src/lib/scp_uploader.cc:83
msgid "SSH error [%1] (%2)"
msgstr "خطای اس اس اچ [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "شنبه"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "اسکن ÙØ§ÛŒÙ„های تصویر"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "در حال ارسال ایمیل"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "کوتاه"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "امضاء"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "اندازه"
@@ -1460,11 +1498,11 @@ msgstr "اندازه"
msgid "Some audio will be resampled to %1Hz"
msgstr "برخی صداها با %1هرتز مجدد نمونه برداری میشوند"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr "برخی ÙØ§ÛŒÙ„ها از زمان اضاÙÙ‡ شدن به پروژه تغییر کرده اند."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1486,18 +1524,17 @@ msgstr ""
"\n"
"این ÙØ§ÛŒÙ„ها بررسی مجدد میشوند، ممکن است نیاز باشد تنظیمات آنها را کنترل کنید."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
-"Some of your closed captions span more than %1 lines, so they will be "
-"truncated."
+"Some of your closed captions span more than %1 lines, so they will be truncated."
msgstr ""
"برخی از زیرنویس‌های شما بیش از % 1 خطوط را شامل می‌شوند، بنابراین کوتاه می‌شوند."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
-"Some of your content has audio but you have not set the audio language. It "
-"is advisable to set the audio language in the \"DCP\" tab unless your audio "
-"has no spoken parts."
+"Some of your content has audio but you have not set the audio language. It is "
+"advisable to set the audio language in the \"DCP\" tab unless your audio has no "
+"spoken parts."
msgstr ""
"بخش از محتوای شما صدا دارد اما شما زبان آنرا تنظیم نکرده اید. توصیه میشود که "
"زبان را در زبانه \"دی سی پی\" تنظیم کنید حتی اگرسکوت دارد."
@@ -1514,11 +1551,11 @@ msgstr "بخشی از محتوای شما نیازمند کلید است"
msgid "Some of your content needs an OV"
msgstr "بخشی از محتوای شما نیازمند یک نسخه اصلی است(OV)"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "استریو"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr "تصویر استریوگراÙ"
@@ -1530,19 +1567,19 @@ msgstr "استریو به 5/1 میکسر A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "استریو به 5/1 میکسر B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "یکشنبه"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "تیزر"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Ùیلتر تÙÙ„ÙÙ‡ سینما"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "آزمایش"
@@ -1562,168 +1599,180 @@ msgstr "زنجیره گواهینامه نامعتبر است"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "زنجیره گواهینامه نامعتبر است(%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a small "
+"error which will prevent DCPs from being validated correctly on some systems. "
+"It is advisable to re-create the signing certificate chain by clicking the \"Re-"
+"make certificates and key...\" button in the Keys page of Preferences."
msgstr ""
-"زنجیره گواهینامه که دی سی پی-او-ماتیک برای امضاء دی سی پی ها و کلیدها "
-"Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند دچار اشکال است Ùˆ ممکن است دی سی Ù¾ÛŒ تولید شده توسط آن در برخی "
-"سیستمها به درستی اجرا نشوند. توصیه میشود با مراجعه به اولویتها در زبانه کلید "
-"توسط \"ساخت مجدد گواهی نامه و کلید..\" مجدد زنجیره گواهی نامه را ایجاد کنید."
+"زنجیره گواهینامه Ú©Ù‡ 1% برای امضاء دی سی Ù¾ÛŒ ها Ùˆ کلیدها Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند دچار اشکال "
+"است و ممکن است دی سی پی تولید شده توسط آن در برخی سیستمها به درستی اجرا نشوند. "
+"توصیه میشود با مراجعه به اولویتها در زبانه کلید توسط \"ساخت مجدد گواهی نامه و "
+"کلید..\" مجدد زنجیره گواهی نامه را ایجاد کنید."
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by clicking "
+"the \"Re-make certificates and key...\" button in the Keys page of Preferences."
msgstr ""
-"مدت اعتبار زنجیره گواهینامه که دی سی پی-او-ماتیک برای امضاء دی سی پی ها و "
-"کلیدها Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند بسیار زیاد است. Ú©Ù‡ موجب عدم نمایش دی سی Ù¾ÛŒ ها روی برخی "
-"سیستمها میشود. توصیه میشود با مراجعه به اولویتها در زبانه کلید توسط \"ساخت "
-"مجدد گواهی نامه و کلید..\" مجدد زنجیره گواهی نامه را ایجاد کنید."
+"مدت اعتبار زنجیره گواهینامه Ú©Ù‡ 1% برای امضاء دی سی Ù¾ÛŒ ها Ùˆ کلیدها Ø§Ø³ØªÙØ§Ø¯Ù‡ میکند "
+"بسیار زیاد است. که موجب عدم نمایش دی سی پی ها روی برخی سیستمها میشود. توصیه "
+"میشود با مراجعه به اولویتها در زبانه کلید توسط \"ساخت مجدد گواهی نامه و کلید..\" "
+"مجدد زنجیره گواهی نامه را ایجاد کنید."
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
-"Please set it to 2D. You can still make a 3D DCP from this content by "
-"ticking the 3D option in the DCP video tab."
+"Please set it to 2D. You can still make a 3D DCP from this content by ticking "
+"the 3D option in the DCP video tab."
msgstr ""
-"ÙØ§ÛŒÙ„ محتوای %1 سه بعدی است اما تصویر سه بعدی در آن نیست. Ù„Ø·ÙØ§ آنرا دو بعدی "
-"تنظیم کنید. شما هنوزمیتوانید از طریق زبانه دی سی پی و تیک زدن گزینه سه بعدی "
-"یک دی سی پی سه بعدی بسازید."
+"ÙØ§ÛŒÙ„ محتوای %1 سه بعدی است اما تصویر سه بعدی در آن نیست. Ù„Ø·ÙØ§ آنرا دو بعدی تنظیم "
+"کنید. شما هنوزمیتوانید از طریق زبانه دی سی پی و تیک زدن گزینه سه بعدی یک دی سی "
+"پی سه بعدی بسازید."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
-"The drive that the film is stored on is low in disc space. Free some more "
-"space and try again."
+"The drive that the film is stored on is low in disc space. Free some more space "
+"and try again."
msgstr ""
"ÙØ¶Ø§ÛŒ کاÙÛŒ در محل ذخیره Ùیلم وجود ندارد. پس از خالی کردن ÙØ¶Ø§ مجددا تلاش کنید."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه جلوتر Ø§ÙØªØ§Ø¯."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه عقب تر Ø§ÙØªØ§Ø¯."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه تنظیم وکوتاه شد."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "ÙØ§ÛŒÙ„ %1 به مدت %2 میلی ثانیه تنظیم وبلند شد."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema really "
+"wants an old-style MPEG2 DCP."
+msgstr ""
+"اکثر قریب به Ø§ØªÙØ§Ù‚ سینماها در اروپا، استرالیا Ùˆ آمریکای شمالی انتظار دارند دی سی "
+"Ù¾ÛŒ را با روش رمزگذاری شده JPEG2000 Ø¯Ø±ÛŒØ§ÙØª کنند Ùˆ نه روش MPEG2 قدیمی. اطمینان "
+"حاصل کنید که سینمای مد نظر دی سی پی MPEG2 سبک قدیمی می خواهد."
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your project "
+"to make sure that they are placed where you want them."
+msgstr ""
+"کنترل تنظیم عمودی برای زیرنویس ها اکنون خلا٠جهت است برعکس حالتی که قبلا بود. "
+"اما شما باید همه زیرنویسهای پروژه خود را برای اطمینان از جانمایی درست بررسی کنید."
+
+#: src/lib/hints.cc:250
msgid ""
-"There is a large difference between the frame rate of your DCP and that of "
-"some of your content. This will cause your audio to play back at a much "
-"lower or higher pitch than it should. It is advisable to set your DCP frame "
-"rate to one closer to your content, provided that your target projection "
-"systems support your chosen DCP rate."
+"There is a large difference between the frame rate of your DCP and that of some "
+"of your content. This will cause your audio to play back at a much lower or "
+"higher pitch than it should. It is advisable to set your DCP frame rate to one "
+"closer to your content, provided that your target projection systems support "
+"your chosen DCP rate."
msgstr ""
-"اختلا٠بسیاری مابین نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ Ùˆ برخی از محتواهای شما وجود دارد. Ú©Ù‡ "
-"باعث میشود صدای شنیده شده یا خیلی جلو و یا خیلی عقبتر از تصویر شنیده شود. "
-"توصیه میشود نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ خود را هر Ú†Ù‡ نزدیکتر به محتوا انتخاب کنید، "
-"طوریکه سیستم نمایشی که قرار است آنرا نمایش دهد از آن پشتیبانی نماید."
+"اختلا٠بسیاری مابین نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ Ùˆ برخی از محتواهای شما وجود دارد. Ú©Ù‡ باعث "
+"میشود صدای شنیده شده یا خیلی جلو و یا خیلی عقبتر از تصویر شنیده شود. توصیه میشود "
+"نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ خود را هر Ú†Ù‡ نزدیکتر به محتوا انتخاب کنید، طوریکه سیستم نمایشی "
+"که قرار است آنرا نمایش دهد از آن پشتیبانی نماید."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "در این دی سی پی ویدیو وجود ندارد"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
-"There was not enough memory to do this. If you are running a 32-bit "
-"operating system try reducing the number of encoding threads in the General "
-"tab of Preferences."
+"There was not enough memory to do this. If you are running a 32-bit operating "
+"system try reducing the number of encoding threads in the General tab of "
+"Preferences."
msgstr ""
"Ø­Ø§ÙØ¸Ù‡ کاÙÛŒ برای انجام این کار وجود ندارد. اگر از سیستم عامل 32 بیتی Ø§Ø³ØªÙØ§Ø¯Ù‡ "
-"میکنید سعی کنید تعداد رشته های رمزگذاری را از طریق زبانه کلی در اولویتها "
-"کاهش دهید."
-
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
-msgstr "این کلید برای دی سی پی-او-ماتیک ساخته شده اما نه برای گواهی برگ آن."
+"میکنید سعی کنید تعداد رشته های رمزگذاری را از طریق زبانه کلی در اولویتها کاهش "
+"دهید."
#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
-msgstr "این کلید برای گواهی نامه دی سی پی-او-ماتیک ساخته نشده است."
+msgid "This KDM was made for %1 but not for its leaf certificate."
+msgstr "این کلید برای 1% ساخته شده اما نه برای گواهی برگ آن."
+
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
+msgstr "این کلید برای گواهی نامه 1% ساخته نشده است."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
msgid ""
-"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"This error has probably occurred because you are running the 32-bit version of "
+"%1 and trying to use too many encoding threads. Please reduce the 'number of "
+"threads %2 should use' in the General tab of Preferences and try again."
msgstr ""
-"این خطا ممکن است به دلیل Ø§Ø³ØªÙØ§Ø¯Ù‡ شما از نسخه 32 بیتی دی سی Ù¾ÛŒ-او-ماتیک Ùˆ "
-"Ø§Ø³ØªÙØ§Ø¯Ù‡ از تعداد زیاد رشته های رمزگذاری پیش آمده باشد. Ù„Ø·ÙØ§ پس از کاهش تعداد "
-"رشته ها در بخش اولویتها زبانه کلی \"تعداد رشته که دی سی پی-او-ماتیک باید "
-"Ø§Ø³ØªÙØ§Ø¯Ù‡ کند\" مجددا تلاش کنید."
+"این خطا ممکن است به دلیل Ø§Ø³ØªÙØ§Ø¯Ù‡ شما از نسخه 32 بیتی 1% Ùˆ Ø§Ø³ØªÙØ§Ø¯Ù‡ از تعداد زیاد "
+"رشته های رمزگذاری پیش آمده باشد. Ù„Ø·ÙØ§ در بخش اولویتها در زبانه Ú©Ù„ÛŒ \"تعداد رشته "
+"ای Ú©Ù‡ 2% باید Ø§Ø³ØªÙØ§Ø¯Ù‡ کند\" را کاهش دهید Ùˆ مجددا تلاش کنید."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
-"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"This error has probably occurred because you are running the 32-bit version of "
+"%1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
-"این مشکل ممکن است به دلیل نصب نسخه 32 بیتی دی سی پی-او-ماتیک پیش آمده باشد. "
-"Ù„Ø·ÙØ§ پس ازنصب با نسخه 64 بیتی دی سی Ù¾ÛŒ-او-ماتیک مجدد تلاش کنید."
+"این مشکل ممکن است به دلیل نصب نسخه 32 بیتی 1% پیش آمده باشد. Ù„Ø·ÙØ§ پس ازنصب نسخه "
+"64 بیتی 2% مجدد تلاش کنید."
#: src/lib/exceptions.cc:113
msgid ""
-"This file is a KDM. KDMs should be added to DCP content by right-clicking "
-"the content and choosing \"Add KDM\"."
+"This file is a KDM. KDMs should be added to DCP content by right-clicking the "
+"content and choosing \"Add KDM\"."
msgstr ""
-"این یک ÙØ§ÛŒÙ„ کلید است. کلید را از طریق کلیک راست روی محتوا Ùˆ انتخاب \"اضاÙÙ‡ "
-"کردن کلید\" به دی سی Ù¾ÛŒ اضاÙÙ‡ کنید."
+"این یک ÙØ§ÛŒÙ„ کلید است. کلید را از طریق کلیک راست روی محتوا Ùˆ انتخاب \"اضاÙÙ‡ کردن "
+"کلید\" به دی سی Ù¾ÛŒ اضاÙÙ‡ کنید."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded into "
+"this version. Sorry!"
msgstr ""
-"این Ùیلم با نسخه جدیدتر دی سی Ù¾ÛŒ-او-ماتیک ساخته شده، Ùˆ در این نسخه قابل "
-"ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. متاسÙÙ…!"
+"این Ùیلم با نسخه جدیدتر 1% ساخته شده، Ùˆ در این نسخه قابل ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. متاسÙÙ…!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it cannot "
+"be loaded into this version. You will need to create a new Film, re-add your "
+"content and set it up again. Sorry!"
msgstr ""
-"این Ùیلم با نسخه قدیمی دی سی Ù¾ÛŒ-او-ماتیک ساخته شده Ùˆ Ù…ØªØ§Ø³ÙØ§Ù†Ù‡ در این نسخه "
-"قابل ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. لازم است Ú©Ù‡ یک Ùیلم جدید ساخته، مجدد محتوا را به آن "
-"اضاÙÙ‡ Ùˆ تنظیم کنید. متاسÙÙ…!"
+"این Ùیلم با نسخه قدیمی 1% ساخته شده Ùˆ Ù…ØªØ§Ø³ÙØ§Ù†Ù‡ در این نسخه قابل ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ نیست. "
+"لازم است Ú©Ù‡ یک Ùیلم جدید ساخته، مجدد محتوا را به آن اضاÙÙ‡ Ùˆ تنظیم کنید. متاسÙÙ…!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "پنجشنبه"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "متن زمان دار"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "تبلیغ Ùیلم"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "ترنسکدینگ %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "انتقالی"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "سه شنبه"
@@ -1731,7 +1780,7 @@ msgstr "سه شنبه"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "ÙØ±Ù…ت غیره منتظره محتوای ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡"
@@ -1739,35 +1788,35 @@ msgstr "ÙØ±Ù…ت غیره منتظره محتوای ÙØ§ÛŒÙ„ ÙØ´Ø±Ø¯Ù‡"
msgid "Unexpected image type received by server"
msgstr "ÙØ±Ù…ت تصویر غیرمنتظره به سرور رسید"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "ناشناخته"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "خطای ناشناخته"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "ÙØ±Ù…ت نمونه صدای غیرقابل تشخیص(%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "ماسک غیرواضح و تاری گاوسی"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "نامشخص"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "بدون عنوان"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Ø§Ø³ØªÙØ§Ø¯Ù‡ نشده"
@@ -1779,7 +1828,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "اختلال بینایی"
@@ -1787,11 +1836,11 @@ msgstr "اختلال بینایی"
msgid "Verify DCP"
msgstr "صحت سنجی دی سی پی"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "برگردان عمودی"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "دچار اختلال بصری است"
@@ -1799,168 +1848,165 @@ msgstr "دچار اختلال بصری است"
msgid "Waiting"
msgstr "در حال انتظار"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Ùیلتر موج"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "چهارشنبه"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "با این حال یک Ùیلتر ضد اینترلیس دیگر"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
-"supported by all projectors. It is advisable to change the DCP frame rate "
-"to %2 fps."
+"supported by all projectors. It is advisable to change the DCP frame rate to %2 "
+"fps."
msgstr ""
"تنظیمات دی سی Ù¾ÛŒ خود را روی نرخ ÙØ±ÛŒÙ… %1 گذاشته اید. این نرخ ÙØ±ÛŒÙ… روی همه "
-"پروژکتورها پشتیبانی نمیشود. توصیه میشود نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ را به %2 ÙØ±ÛŒÙ… بر "
-"ثانیه تغییر دهید."
+"پروژکتورها پشتیبانی نمیشود. توصیه میشود نرخ ÙØ±ÛŒÙ… دی سی Ù¾ÛŒ را به %2 ÙØ±ÛŒÙ… بر ثانیه "
+"تغییر دهید."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
-"supported by all projectors. You may want to consider changing your frame "
-"rate to %2 fps."
+"supported by all projectors. You may want to consider changing your frame rate "
+"to %2 fps."
msgstr ""
"تنظیمات دی سی Ù¾ÛŒ خود را روی نرخ ÙØ±ÛŒÙ… %1 گذاشته اید. این نرخ ÙØ±ÛŒÙ… روی همه "
"پروژکتورها پشتیبانی نمیشود. ممکن است بخواهید نرخ ÙØ±ÛŒÙ… را به %2 ÙØ±ÛŒÙ… بر ثانیه "
"تغییر دهید."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
msgstr ""
-"تنظیمات دی سی Ù¾ÛŒ را روی 30 ÙØ±ÛŒÙ… بر ثانیه قرار داده اید Ú©Ù‡ همه پروژکتورها "
-"قادر به نمایش آن نیستند. از این عدم سازگاری آگاه باشد."
+"تنظیمات دی سی Ù¾ÛŒ را روی 30 ÙØ±ÛŒÙ… بر ثانیه قرار داده اید Ú©Ù‡ همه پروژکتورها قادر به "
+"نمایش آن نیستند. از این عدم سازگاری آگاه باشد."
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may result "
+"in poor-quality audio. If you continue, you should listen to the resulting DCP "
+"in a cinema to make sure that it sounds good."
msgstr ""
-"شما از محتوای سه بعدی Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید اما تنظیم دی سی Ù¾ÛŒ روی دو بعدی است. اگر "
-"قرار است روی سیستم سه بعدی پلی شود تنظیم دی سی پی خود را روی سه بعدی قرار "
-"دهید(مانند Real-D، MasterImage، وغیره.)"
+"شما از میکسر استریو به دالبی 5/1 نرم Ø§ÙØ²Ø§Ø± 1% Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید. Ú©Ù‡ به صورت آزمایشی "
+"است Ùˆ ممکن است Ú©ÛŒÙیت صدا را کاهش دهد. اگرادامه کار میدهید، باید به صدای خروجی دی "
+"سی پی آن در یک سینما گوش دهید تا از درستی آن مطمئن شوید."
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:324
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if you "
+"want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
msgstr ""
-"شما از میکسر استریو به دالبی 5/1 دی سی Ù¾ÛŒ-او-ماتیک Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید. Ú©Ù‡ به "
-"صورت آزمایشی است Ùˆ ممکن است Ú©ÛŒÙیت صدا را کاهش دهد. اگرادامه کار میدهید، باید "
-"به صدای خروجی دی سی پی آن در یک سینما گوش دهید تا از درستی آن مطمئن شوید."
+"شما از محتوای سه بعدی Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنید اما تنظیم دی سی Ù¾ÛŒ روی دو بعدی است. اگر "
+"قرار است روی سیستم سه بعدی پلی شود تنظیم دی سی پی خود را روی سه بعدی قرار "
+"دهید(مانند Real-D، MasterImage، وغیره.)"
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
-"You have %1 files that look like they are VOB files from DVD. You should "
-"join them to ensure smooth joins between the files."
+"You have %1 files that look like they are VOB files from DVD. You should join "
+"them to ensure smooth joins between the files."
msgstr ""
-"شما%1 ÙØ§ÛŒÙ„ دارید Ú©Ù‡ به نظر میرسد ÙØ±Ù…ت آنها ÙˆÛŒ او بی Ùˆ از دی ÙˆÛŒ دی هستند. "
-"برای پرش Ù†ÛŒØ§ÙØªØ§Ø¯Ù† بین ÙØ§ÛŒÙ„ها باید آنها را به هم بچسبانید."
+"شما%1 ÙØ§ÛŒÙ„ دارید Ú©Ù‡ به نظر میرسد ÙØ±Ù…ت آنها ÙˆÛŒ او بی Ùˆ از دی ÙˆÛŒ دی هستند. برای "
+"پرش Ù†ÛŒØ§ÙØªØ§Ø¯Ù† بین ÙØ§ÛŒÙ„ها باید آنها را به هم بچسبانید."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-"شما بیش از یک محتوای اتمز دارید Ú©Ù‡ نرخ ÙØ±ÛŒÙ… مشابهی ندارند. باید برخی از آنها "
-"را حذ٠کنید."
+"شما بیش از یک محتوای اتمز دارید Ú©Ù‡ نرخ ÙØ±ÛŒÙ… مشابهی ندارند. باید برخی از آنها را "
+"حذ٠کنید."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
-"You have overlapping closed captions, which are not allowed in Interop "
-"DCPs. Change your DCP standard to SMPTE."
+"You have overlapping closed captions, which are not allowed in Interop DCPs. "
+"Change your DCP standard to SMPTE."
msgstr ""
-"زیرنویسهای شما همپوشانی دارند، که در استاندارد اینتروپ مجاز نیست. استاندارد "
-"دی سی پی خود را به اس ام پی تی ای تغییر دهید."
+"زیرنویسهای شما همپوشانی دارند، که در استاندارد اینتروپ مجاز نیست. استاندارد دی "
+"سی پی خود را به اس ام پی تی ای تغییر دهید."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
-"You have specified a font file which is larger than 640kB. This is very "
-"likely to cause problems on playback."
+"You have specified a font file which is larger than 640kB. This is very likely "
+"to cause problems on playback."
msgstr ""
-"یک ÙØ§ÛŒÙ„ Ùونت با اندازه بزرگتر از 640 کیلوبایت مشخص شده است. به احتمال زیاد "
-"هنگام پلی Ùیلم مشکل ساز است."
+"یک ÙØ§ÛŒÙ„ Ùونت با اندازه بزرگتر از 640 کیلوبایت مشخص شده است. به احتمال زیاد هنگام "
+"پلی Ùیلم مشکل ساز است."
#: src/lib/make_dcp.cc:56
msgid "You must add some content to the DCP before creating it"
msgstr "شما قبل از ساخت دی س Ù¾ÛŒ باید به آن تعدادی محتوا اضاÙÙ‡ کنید"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
-"distributors to raise QC errors when they check your DCP. To avoid this, "
-"set the DCP audio channels to 8 or 16."
+"distributors to raise QC errors when they check your DCP. To avoid this, set "
+"the DCP audio channels to 8 or 16."
msgstr ""
"دی سی پی شما به جای 8 یا 16 کانال دارای %1 کانال صدا است. ممکن است هنگام صحت "
"سنجی دی سی Ù¾ÛŒ شما توسط Ø¯ÙØ§ØªØ± پخش با خطای Ú©ÛŒÙÛŒ مواجه شود. برای پرهیز از خطا، "
"تعداد کانالهای دی سی پی خود را روی 8 یا 16 قرار دهید."
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
-"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"projectors. You may want to set the DCP to have 6 channels. It does not matter "
+"if your content has fewer channels, as %1 will fill the extras with silence."
msgstr ""
"دی سی پی شما کمتر از 6 کانال صدا دارد. این ممکن است در برخی پروژکتورها مشکل "
-"ایجاد کند. ممکن است بخواهید دی سی پی خود را روی 6 کانال تنظیم کنید. اگر "
-"محتوای شما تعداد کانال کمتری دارد مسئاله ای نیست، دی سی پی-او-ماتیک کانالهای "
-"اضاÙÙ‡ را با سکوت پر میکند."
+"ایجاد کند. ممکن است بخواهید دی سی پی خود را روی 6 کانال تنظیم کنید. اگر محتوای "
+"شما تعداد کانال کمتری دارد مساله ای نیست، 1% کانالهای اضاÙÙ‡ را با سکوت پر میکند."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
msgstr ""
-"دی سی Ù¾ÛŒ شما نسبت ابعاد تصویر نامتعارÙÛŒ دارد. این ممکن در برخی پروژکتورها "
-"مشکل ایجاد کند. اگر ممکن است، از نسبت ابعاد تخت یا اسکوپ Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید."
+"دی سی Ù¾ÛŒ شما نسبت ابعاد تصویر نامتعارÙÛŒ دارد. این ممکن در برخی پروژکتورها مشکل "
+"ایجاد کند. اگر ممکن است، از نسبت ابعاد تخت یا اسکوپ Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
-"Your audio level is very high (on %1). You should reduce the gain of your "
-"audio content."
-msgstr ""
-"گین صدای شما خیلی زیاد است(روی %1). شما باید گین محتوای خود را کاهش دهید."
+"Your audio level is very high (on %1). You should reduce the gain of your audio "
+"content."
+msgstr "گین صدای شما خیلی زیاد است(روی %1). شما باید گین محتوای خود را کاهش دهید."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr "پروژه شامل ویدیویی است Ú©Ù‡ با یک مرز ÙØ±ÛŒÙ… هم راستا نشده است."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr "پروژه شامل ویدیویی است Ú©Ù‡ اصلاح شده آن با یک مرز ÙØ±ÛŒÙ… هم راستا نیست."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[تصاویر متحرک]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[تصویرثابت]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[زیرنویسها]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_حلقه%1"
@@ -1992,11 +2038,11 @@ msgstr "در حال کپی%1"
msgid "could not find stream information"
msgstr "اطلاعات رشته پیدا نشد"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "دالبی اتمز قابل انتقال به داخل دی س پی نیست(%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "صدا قابل انتقال به داخل دی س پی نیست(%1)"
@@ -2024,7 +2070,7 @@ msgstr "نمیتوان در ÙØ§ÛŒÙ„ نوشت%1(%2)"
msgid "error during async_connect (%1)"
msgstr "خطا در هنگام async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "خطا در هنگام async_read (%1)"
@@ -2032,80 +2078,88 @@ msgstr "خطا در هنگام async_read (%1)"
msgid "error during async_write (%1)"
msgstr "خطا در هنگام async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "ÙØ±ÛŒÙ… بر ثانیه"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "ساعت"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "نرخ ÙØ±ÛŒÙ… آن با Ùیلم یکسان نیست."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
-"it has a different number of audio channels than the project; set the "
-"project to have %1 channels."
+"it has a different number of audio channels than the project; set the project to "
+"have %1 channels."
msgstr ""
+"تعداد کانالهای صدا با تعداد کانالهای صدای پروژه Ù…ØªÙØ§ÙˆØª است; تعداد کانالهای صدای "
+"پروژه را روی 1% قرار دهید."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
-msgid ""
-"it has a start trim so its subtitles or closed captions must be re-written."
+#: src/lib/dcp_content.cc:789
+msgid "it has a start trim so its subtitles or closed captions must be re-written."
msgstr "نتقطه شروع اصلاح شده دارد بنابر این زیرنویس ها باید مجدد نوشته شوند."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "این 2k Ùˆ Ùیلم 4k است."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "این 4k Ùˆ Ùیلم 2k است."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "این استاندارد اینتروپ است ولی Ùیلم روی استاندارد اس ام Ù¾ÛŒ تی ای است."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "این استاندارد اس ام Ù¾ÛŒ تی ای است ولی Ùیلم روی استاندارد اینتروپ است."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
-msgstr "با سایر محتوای صدا همپوشانی دارد; محتوای دیگر را حذ٠کنید."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+msgid "it overlaps other audio content."
+msgstr "با سایر محتوای صدا همپوشانی دارد."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+msgid "it overlaps other text content."
+msgstr "با سایر محتوای متنی همپوشانی دارد."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
-msgstr "با سایر محتوای ویدیو همپوشانی دارد; محتوای دیگر را حذ٠کنید."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+msgid "it overlaps other video content."
+msgstr "با سایر محتوای ویدیو همپوشانی دارد."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
-"its reel lengths differ from those in the film; set the reel mode to 'split "
-"by video content'."
+"its reel lengths differ from those in the film; set the reel mode to 'split by "
+"video content'."
msgstr ""
-"مدت این حلقه با مدتی Ú©Ù‡ در Ùیلم است ÙØ±Ù‚ دارد; مد حلقه را در حالت \"تقسیم "
-"براساس محتوای ویدیو\" تنظیم کنید."
+"مدت این حلقه با مدتی Ú©Ù‡ در Ùیلم است ÙØ±Ù‚ دارد; مد حلقه را در حالت \"تقسیم براساس "
+"محتوای ویدیو\" تنظیم کنید."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "اندازه این ÙØ±ÛŒÙ… ویدیوبا اندازه ÙØ±ÛŒÙ… Ùیلم ÙØ±Ù‚ دارد."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "دقیقه"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "متحرک"
@@ -2114,48 +2168,54 @@ msgid "name"
msgstr "اسم"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
-"one of its closed caption has a non-zero entry point so it must be re-"
-"written."
+"one of its closed caption has a non-zero entry point so it must be re-written."
msgstr ""
-"یکی از حلقه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره "
-"نوشته شود."
+"یکی از حلقه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره نوشته "
+"شود."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
-"one of its subtitle reels has a non-zero entry point so it must be re-"
-"written."
+"one of its subtitle reels has a non-zero entry point so it must be re-written."
msgstr ""
-"یکی از حلقه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره "
-"نوشته شود."
+"یکی از حلقه های زیرنویس یک نقطه ورود غیر ØµÙØ± دارد بنابر این باید دوباره نوشته "
+"شود."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "ثانیه"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "اس آر جی بی"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "تصویرثابت"
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr "آنها روی نوشته های دیگر Ù…ÛŒ Ø§ÙØªÙ†Ø¯; محتوای دیگر را حذ٠کنید."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "ناشناخته"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "ÙØ±ÛŒÙ… های ویدیو"
+#~ msgid "Copying old video file"
+#~ msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیوی قدیمی"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Ú©Ù¾ÛŒ کردن ÙØ§ÛŒÙ„ ویدیو به دی سی Ù¾ÛŒ"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "اعلان دی سی پی-او-ماتیک"
+
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "آنها روی نوشته های دیگر Ù…ÛŒ Ø§ÙØªÙ†Ø¯; محتوای دیگر را حذ٠کنید."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "در تمام حلقه های آن زیرنویس Ùیلم وجود ندارد."
diff --git a/src/lib/po/fr_FR.po b/src/lib/po/fr_FR.po
index 5ac99ba42..77ecb38d4 100644
--- a/src/lib/po/fr_FR.po
+++ b/src/lib/po/fr_FR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2024-06-18 00:17+0200\n"
"Last-Translator: Grégoire AUSINA <gregoire@gisele-productions.eu>\n"
"Language-Team: \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7.1\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Fréquence d'image du contenu %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Rogné à %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Ratio d'aspect de l'écran %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Ajout de bandes noires pour remplir le format image cible %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Mis à l'échelle à %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " le %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -94,39 +94,89 @@ msgstr ""
"Durée: $LENGTH\n"
"Taille: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [audio]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [vidéo]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic n'a pas pu ouvrir le fichier %1 (%2). Il n'existe peut-être pas "
+"ou est dans un format inattendu."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic a dû modifier vos paramètres pour désigner les DCP en tant "
+"qu'OV. Veuillez revoir ces paramètres pour vous assurer qu'ils "
+"correspondent à ce que vous souhaitez."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"DCP-o-matic a dû modifier vos paramètres pour que la fréquence d'images du "
+"film soit la même que celle de votre contenu Atmos."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic ne gère plus le filtre `%1'.  Il a donc été désactivé."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Notification par e-mail"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 images"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", ratio des pixels %.2f:1"
@@ -163,11 +213,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Plein cadre)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr "10"
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr "16"
@@ -179,11 +229,11 @@ msgstr "2.35 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "Débruitage 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -194,32 +244,33 @@ msgstr ""
"projecteur capable, il est conseillé de régler le DCP sur 2K dans l'onglet "
"\"DCP→Vidéo\"."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 ips"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 restant ; fin prévue à %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>Vous venez de produire %1 DCPs avec DCP-o-matic !</h2><img width=\"20%%"
"\" src=\"memory:me.jpg\" align=\"center\"><p>Bonjour. Je m'appelle Carl et "
@@ -234,35 +285,37 @@ msgstr ""
"faire un don de €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
"amount=10\">Aller sur Paypal pour faire un don de €10</a></ul><p>Merci !"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Quelques projecteurs ont des difficultés à lire les DCPs à très haut débit. "
"Il est bon de réduire la bande passante de JPEG2000 à environ 200Mbit/s, ce "
"qui ne devrait pas avoir d'effet visible sur l'image."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"Un fichier de sous-titres ou de sous-titres codés de ce projet est marqué "
"avec la langue '%1', que DCP-o-matic ne reconnaît pas. La langue du fichier "
"a été effacée."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Publicité"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -274,7 +327,7 @@ msgstr ""
"cadre Flat (1.85:1). Vous pouvez préférer régler le conteneur de votre DCP "
"sur Scope (2.39:1) dans l'onglet \"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -285,7 +338,7 @@ msgstr ""
"pilier. Vous pouvez préférer que le conteneur de votre DCP ait le même "
"ratio que votre contenu."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Une erreur s'est produite lors du traitement du fichier %1."
@@ -293,28 +346,28 @@ msgstr "Une erreur s'est produite lors du traitement du fichier %1."
msgid "Analysing audio"
msgstr "Analyse de l'audio"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Analyse des sous-titres"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr "Au moins un marqueur vient après la fin du projet et sera ignoré."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Au moins un de vos fichiers de sous-titres codés est plus gros que "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "Au moins un de vos sous-titres codés a une partie XML plus grosse que "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Au moins un de vos fichiers de sous-titres est plus gros que "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -323,7 +376,7 @@ msgstr ""
"Il est recommandé de faire en sorte que chaque ligne ait une longueur de 52 "
"caractères au maximum."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -331,7 +384,7 @@ msgstr ""
"Au moins une de vos lignes de sous-titres comporte plus de 79 caractères. "
"Vous devez faire en sorte que chaque ligne ait 79 caractères au maximum."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -339,7 +392,7 @@ msgstr ""
"Au moins un de vos sous-titres comporte plus de 3 lignes. Il est conseillé "
"de ne pas utiliser plus de 3 lignes."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -347,7 +400,7 @@ msgstr ""
"Au moins un de vos sous-titres dure moins de 15 images. Il est conseillé de "
"faire en sorte que chaque sous-titre dure au moins 15 images."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -356,7 +409,7 @@ msgstr ""
"précédent. Il est conseillé de faire en sorte que l'écart entre les sous-"
"titres soit d'au moins 2 images."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
#, fuzzy
msgid ""
"At least one piece of subtitle content has no specified language. It is "
@@ -380,72 +433,72 @@ msgstr "L'audio sera ré-échantillonné à %1Hz"
msgid "Audio will not be resampled"
msgstr "L'audio ne sera pas ré-échantillonné"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 gamme de couleurs étendue"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 luminance constante"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 pour un système 10-bit"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 pour un système 12-bit"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 luminance non-constante"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits par pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Filtre de désentralecement Bob Weaver"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Annulé"
@@ -457,11 +510,11 @@ msgstr "Slashes non autorisés"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Impossible de gérer le format de pixel %1 pendant %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Impossible de créer un KDM car ce projet n'est pas crypté."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Centre"
@@ -469,7 +522,7 @@ msgstr "Centre"
msgid "Channels"
msgstr "Canaux"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "Vérifiez leurs nouveaux paramètres, puis réessayez."
@@ -477,27 +530,32 @@ msgstr "Vérifiez leurs nouveaux paramètres, puis réessayez."
msgid "Checking content"
msgstr "Vérification du contenu"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Vérification des données d'image existantes"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Luminance constante dérivée de la chrominance"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Luminance non constante dérivée de la chrominance"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr "Clip"
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Sous-titres codés"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Sous-titres ouverts"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Couleurs primaires"
@@ -511,17 +569,17 @@ msgstr "Couleurs primaires"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Plage de couleurs"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Caractéristique de transfert des couleurs"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Espace colorimétrique"
@@ -529,15 +587,15 @@ msgstr "Espace colorimétrique"
msgid "Combine DCPs"
msgstr "Combiner les DCPs"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Calcul en cours"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Calculs en cours"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "Félicitations !"
@@ -555,21 +613,21 @@ msgstr "type de contenu"
msgid "Content sample rate"
msgstr "Fréquence d'échantillonnage du contenu audio"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "Les contenus à joindre doivent tous avoir ou ne pas avoir d'audio"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Les contenus à joindre doivent tous avoir ou ne pas avoir de sous-titres, "
"codés ou non"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "Les contenus à joindre doivent tous avoir ou ne pas avoir de vidéo"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -580,11 +638,11 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "Le contenu à joindre doit avoir toutes ses vidéos utilisées ou non."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr "Le contenu à joindre doit avoir le même réglage 'sous-titres gravés'."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Le contenu à joindre doit avoir le même réglage 'utiliser les sous-titres'."
@@ -623,7 +681,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr "Le contenu à joindre doit avoir le même réglage de fondu."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Le contenu à joindre doit avoir la même taille de contour."
@@ -631,32 +689,32 @@ msgstr "Le contenu à joindre doit avoir la même taille de contour."
msgid "Content to be joined must have the same picture size."
msgstr "Le contenu à joindre doit avoir la même taille d'image."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "Le contenu à joindre doit avoir le même décalage X de sous-titre."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Le contenu à joindre doit avoir la même échelle X de sous-titre."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "Le contenu à joindre doit avoir le même décalage Y de sous-titre."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Le contenu à joindre doit avoir la même échelle Y de sous-titre."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "Le contenu à joindre doit avoir les mêmes fondus de sous-titres."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"Les contenus à ajouter doivent tous avoir le même espacement de lignes."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Le contenu à joindre doit avoir la même fréquence d'image"
@@ -664,23 +722,23 @@ msgstr "Le contenu à joindre doit avoir la même fréquence d'image"
msgid "Content to be joined must have the same video frame type."
msgstr "Le contenu à joindre doit avoir le même type de trame vidéo."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "Le contenu à joindre doit utiliser la même piste DCP."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Le contenu à joindre doit utiliser les mêmes polices."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Le contenu à joindre doit utiliser le même flux de sous-titres."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "Le contenu à joindre doit utiliser la même langue de texte."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Le contenu vidéo est %1x%2"
@@ -688,14 +746,6 @@ msgstr "Le contenu vidéo est %1x%2"
msgid "Copy DCP to TMS"
msgstr "Copier le DCP dans le TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Copie de l'ancien fichier vidéo"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Copie du fichier vidéo dans le DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Impossible de se connecter au serveur %1 (%2)"
@@ -712,20 +762,21 @@ msgstr "Impossible de décoder le fichier JPEG2000 %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Impossible de décoder l'image (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Impossible d'ouvrir le fichier ZIP téléchargé"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Impossible d'écouter les serveurs d'encodage distants. Peut-être qu'une "
"autre instance de DCP-o-matic est en cours d'exécution."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Impossible d'ouvrir %1"
@@ -733,19 +784,19 @@ msgstr "Impossible d'ouvrir %1"
msgid "Could not open %1 to send"
msgstr "Impossible d'ouvrir %1 pour l'envoi"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Impossible d'ouvrir le fichier ZIP téléchargé"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Impossible d'ouvrir le fichier ZIP téléchargé (%1:%2 : %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Impossible d'ouvrir le fichier pour l'écriture"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "Impossible d'ouvrir le fichier de sortie %1 (%2)"
@@ -761,19 +812,19 @@ msgstr "Impossible de démarrer le transfert"
msgid "Could not write to remote file (%1)"
msgstr "Impossible d'écrire dans le fichier distant (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX primaire"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX secondaire"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -785,7 +836,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "Sous-titres XML du DCP"
@@ -802,50 +853,35 @@ msgstr "Le DCP sera lu à %.1f%% de la vitesse du contenu source.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "Le DCP utilisera une image sur deux du contenu.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic n'a pas pu ouvrir le fichier %1 (%2). Il n'existe peut-être pas "
-"ou est dans un format inattendu."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic a dû modifier vos paramètres pour désigner les DCP en tant "
-"qu'OV. Veuillez revoir ces paramètres pour vous assurer qu'ils "
-"correspondent à ce que vous souhaitez."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic a dû modifier vos paramètres pour que la fréquence d'images du "
-"film soit la même que celle de votre contenu Atmos."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic ne gère plus le filtre `%1'.  Il a donc été désactivé."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "Notification DCP-o-matic"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 ou AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Désentrelacement"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -857,7 +893,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Cher projectionniste,\n"
"\n"
@@ -871,11 +907,15 @@ msgstr ""
"Meilleures salutations,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 ou CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Échec du téléchargement (erreur %1 %2)"
@@ -899,19 +939,19 @@ msgstr "KDMs par e-mail pour %1"
msgid "Email notification"
msgstr "Notification par e-mail"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Rapport de problème par e-mail"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Rapport de problème par e-mail pour %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Encodage"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Épisode"
@@ -921,20 +961,20 @@ msgstr ""
"Erreur dans le fichier de sous-titres : %1 a été trouvé alors que %2 était "
"attendu"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Erreur : %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr "Événement"
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Examen des sous-titres"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Examen de l'audio, des sous-titres et des sous-titres codés"
@@ -946,15 +986,15 @@ msgstr "Examen du contenu"
msgid "Examining subtitles"
msgstr "Examen des sous-titres"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Examen des sous-titres et des sous-titres codés"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Extraction"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -962,51 +1002,51 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Échec de l'authentification avec le serveur (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Échec de l'encodage du DCP."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Échec de l'envoi de l'e-mail"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Long métrage"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Nom de fichier"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr "Noms de fichiers"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "Les fichiers ont été modifiés depuis qu'ils ont été ajoutés au projet."
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Recherche de la durée"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Fréquence d'image"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Vendredi"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Plein"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Entier (0-%1)"
@@ -1030,35 +1070,35 @@ msgstr "Longueur totale en images vidéo à la fréquence du DCP"
msgid "Full length in video frames at content rate"
msgstr "Longueur totale en images vidéo à la fréquence du contenu"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Corrections des bandes par dégradé"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Malentendants"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Débruiteur 3D haute qualité"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr "Points forts"
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Retournement horizontal"
@@ -1066,21 +1106,21 @@ msgstr "Retournement horizontal"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB ou sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
"Si vous utilisez 25 images par seconde, vous devez changer votre standard "
"DCP pour SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
#, fuzzy
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
@@ -1091,9 +1131,10 @@ msgstr ""
"avez une raison particulière d'utiliser Interop. Il est conseillé de "
"paramétrer votre DCP pour utiliser la norme SMPTE dans l'onglet \"DCP\"."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
+#, fuzzy
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
@@ -1104,7 +1145,7 @@ msgstr ""
"titres de votre projet pour vous assurer qu'ils sont placés là où vous le "
"souhaitez."
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1112,73 +1153,74 @@ msgstr ""
"Il est conseillé de placer votre premier sous-titre au moins 4 secondes "
"après le début du DCP pour être sûr qu'il soit vu."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "La cause de cette erreur n'est pas connue."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "Livraison KDM : $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Désentrelaceur à noyau"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Gauche"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Centre gauche"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Ambiance arrière gauche"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Ambiance gauche"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Durée"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limité"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Limité (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Linéaire"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarithmique (plage 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarithmique (plage 316:1)"
@@ -1188,7 +1230,7 @@ msgstr ""
"Perte de communication entre le processus principal et le processus "
"d'écriture"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1196,24 +1238,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Décodeur mid-side"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Divers"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Comptes de canaux audio non concordants dans le DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Fréquences d'échantillonnage audio non concordantes dans le DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Fréquences d'images non concordantes dans le DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Tailles de vidéo non concordantes dans le DCP"
@@ -1221,19 +1263,19 @@ msgstr "Tailles de vidéo non concordantes dans le DCP"
msgid "Missing required setting %1"
msgstr "Paramètre requis %1 manquant"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Lundi"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Désentrelaceur à compensation de mouvement"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "Aucune CPL trouvée dans le DCP."
@@ -1247,79 +1289,93 @@ msgstr "Aucun serveur mail configuré dans les préférences"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Aucun serveur mail configuré dans les préférences"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Aucun fichier image valide n'a été trouvé dans le dossier."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Réduction de bruit"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Aucun"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (exécuté pendant %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (exécuté pendant %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Seul le premier élément de contenu à joindre peut avoir une coupe de départ."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
"Seul le dernier élément de contenu à joindre peut avoir une coupe finale."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Sous-titres codés"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Sous-titres ouverts"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
+#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Ouvrez le projet dans DCP-o-matic, vérifiez les paramètres, puis enregistrez-"
"le avant de réessayer."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Orientation"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Mémoire insuffisante"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Réduction de bruit par ondelettes"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Veuillez reporter ce problème en utilisant le menu Aide -> Signaler un "
+"problème ou par e-mail à carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Code de conduite"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Préparé pour la fréquence d'images vidéo"
@@ -1327,93 +1383,93 @@ msgstr "Préparé pour la fréquence d'images vidéo"
msgid "Programming error at %1:%2 %3"
msgstr "Erreur de programmation à %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promo"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Annonce d'intérêt public"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "D"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Classification"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Droit"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Centre droit"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Ambiance arrière droite"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Ambiance droite"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Pivoter de 90 degrés à gauche"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Pivoter de 90 degrés à droite"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1424,23 +1480,23 @@ msgstr ""
"générique mobile (FFMC). Vous devez ajouter ces marqueurs en utilisant le "
"bouton \"Marqueurs\" dans l'onglet \"DCP\"."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 pour systèmes 10, 12, 14 et 16 bits"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1453,27 +1509,27 @@ msgstr "Erreur SSH [%1]"
msgid "SSH error [%1] (%2)"
msgstr "Erreur SSH [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Samedi"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Vérification des fichiers images"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Envoi d'e-mail"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Court métrage"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Signe"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Taille"
@@ -1481,12 +1537,12 @@ msgstr "Taille"
msgid "Some audio will be resampled to %1Hz"
msgstr "Certains sons seront ré-échantillonné à %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
"Certains fichiers ont été modifiés depuis qu'ils ont été ajoutés au projet."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1509,7 +1565,7 @@ msgstr ""
"Ces fichiers seront maintenant réexaminés, vous devrez donc peut-être "
"vérifier leurs paramètres."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
@@ -1517,7 +1573,7 @@ msgstr ""
"Certaines de vos sous-titres codés font plus de %1 lignes, ils seront donc "
"tronqués."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1539,11 +1595,11 @@ msgstr "Certains de vos contenus ont besoin d'un KDM"
msgid "Some of your content needs an OV"
msgstr "Une partie de votre contenu a besoin d'une OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stéréo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr "Carte stéréo 3D"
@@ -1555,19 +1611,19 @@ msgstr "Upmixer stéréo vers 5.1 A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Upmixer stéréo vers 5.1 B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Dimanche"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Filtre téléciné"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1588,14 +1644,14 @@ msgstr "La chaîne de certificats pour la signature n'est pas valide"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "La chaîne de certificats pour la signature n'est pas valide (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"La chaîne de certificats que DCP-o-matic utilise pour signer les DCP et les "
"KDM contient une petite erreur qui empêchera les DCP d'être validés "
@@ -1603,14 +1659,14 @@ msgstr ""
"chaîne de certificats de signature en cliquant sur le bouton \"Re-créer les "
"certificats et la clé...\" dans la page Clés des préférences."
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"La chaîne de certificats que DCP-o-matic utilise pour signer les DCP et les "
"KDM a une période de validité trop longue. Cela entraîne des problèmes de "
@@ -1618,7 +1674,7 @@ msgstr ""
"chaîne de certificats de signature en cliquant sur le bouton \"Re-créer les "
"certificats et la clé...\" dans la page Clés des préférences."
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1628,7 +1684,7 @@ msgstr ""
"d'images 3D. Veuillez le définir en 2D. Vous pouvez néanmoins créer un DCP "
"3D à partir de ce contenu en cochant l'option 3D dans l'onglet vidéo DCP."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1636,23 +1692,43 @@ msgstr ""
"Le disque sur lequel le film est stocké est à court d'espace disque. "
"Libérez un peu plus d'espace et réessayez."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Le fichier %1 a été déplacé de %2 millisecondes plus tôt."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Le fichier %1 a été déplacé de %2 millisecondes plus tard."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Le fichier %1 a été raccourci de %2 millisecondes."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Le fichier %1 a été allongé de %2 millisecondes."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+#, fuzzy
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+"Dans cette version, des changements ont été apportés à la façon dont les "
+"sous-titres sont positionnés. Le positionnement devrait maintenant être "
+"plus correct, par rapport aux normes, mais vous devez vérifier tous les sous-"
+"titres de votre projet pour vous assurer qu'ils sont placés là où vous le "
+"souhaitez."
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1667,11 +1743,11 @@ msgstr ""
"vous assurant que vos systèmes de projection supportent la cadence DCP "
"choisie."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "Il n'y a aucune vidéo dans ce DCP"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1681,34 +1757,37 @@ msgstr ""
"système d'exploitation 32 bits, essayez de réduire le nombre de threads "
"d'encodage dans l'onglet Général des préférences."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
"Ce KDM a été fait pour DCP-o-matic mais pas pour son certificat d'entité "
"finale."
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
"Ce KDM n'a pas été fait pour le certificat de décryptage de DCP-o-matic."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"Cette erreur s'est probablement produite parce que vous exécutez la version "
"32 bits de DCP-o-matic et essayez d'utiliser trop de threads d'encodage. "
"Veuillez réduire le nombre de threads que DCP-o-matic doit utiliser dans "
"l'onglet Général des préférences et réessayez."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"Cette erreur s'est probablement produite parce que vous exécutez la version "
"32 bits de DCP-o-matic. Veuillez réinstaller DCP-o-matic avec le programme "
@@ -1722,46 +1801,48 @@ msgstr ""
"Ce fichier est un KDM. Les KDMs doivent être ajoutées au contenu du DCP en "
"cliquant droit sur le contenu et en sélectionnant \"Ajouter un KDM\"."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Ce film a été créé avec une nouvelle version de DCP-o-matic et il ne peut "
"être ouvert dans cette version du programme. Désolé !"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Ce film a été créé avec une ancienne version de DCP-o-matic, et il ne peut "
"malheureusement pas être chargé dans cette version. Vous devrez créer un "
"nouveau film, réintroduire votre contenu et le configurer à nouveau. "
"Désolé !"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Jeudi"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Texte programmé"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Transcodage de %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitionnel"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Mardi"
@@ -1769,7 +1850,7 @@ msgstr "Mardi"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Contenu inattendu du fichier ZIP"
@@ -1777,35 +1858,35 @@ msgstr "Contenu inattendu du fichier ZIP"
msgid "Unexpected image type received by server"
msgstr "Type d'image inattendu reçu par le serveur"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Inconnu"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Erreur inconnue"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Format d'échantillon audio non reconnu (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Masque de flou et flou gaussien"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Non spécifié"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Sans titre"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Non utilisé"
@@ -1817,7 +1898,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1825,11 +1906,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Vérifier le DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Retournement vertical"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Malvoyants"
@@ -1837,23 +1918,23 @@ msgstr "Malvoyants"
msgid "Waiting"
msgstr "En cours"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Filtre par tissage (Weave)"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Mercredi"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
@@ -1863,7 +1944,7 @@ msgstr ""
"par tous les projecteurs. Nous vous conseillons de modifier la cadence "
"d'images de votre DCP à %2 ips."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1873,7 +1954,7 @@ msgstr ""
"Cette fréquence d'images n'est pas supportée par tous les projecteurs. Vous "
"pourriez envisager de modifier la fréquence d'images de votre DCP à %2 ips."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1882,19 +1963,11 @@ msgstr ""
"qui n'est pas supportée par tous les projecteurs. Attention à de probables "
"problèmes de compatibilité."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Vous utilisez un contenu 3D mais votre DCP est réglé sur 2D. Réglez votre "
-"DCP sur 3D si vous souhaitez le projeter sur un système 3D (par exemple : "
-"Real-D, MasterImage, etc.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Vous utilisez l'upmixer stéréo vers 5.1 de DCP-o-matic. Cet outil est "
@@ -1902,7 +1975,16 @@ msgstr ""
"continuez, vous devriez écouter le résultat dans un cinéma pour vous assurer "
"que le son est bon."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Vous utilisez un contenu 3D mais votre DCP est réglé sur 2D. Réglez votre "
+"DCP sur 3D si vous souhaitez le projeter sur un système 3D (par exemple : "
+"Real-D, MasterImage, etc.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1910,7 +1992,7 @@ msgstr ""
"Vous avez %1 fichiers qui semblent être des fichiers VOB de DVD. Vous devez "
"les joindre afin d'assurer une liaison fluide entre les fichiers."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1918,7 +2000,7 @@ msgstr ""
"Vous avez plus d'un morceau de contenu Atmos, et ils n'ont pas la même "
"fréquence d'images. Vous devez supprimer une partie du contenu Atmos."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1926,7 +2008,7 @@ msgstr ""
"Des sous-titres se chevauchent, ce qui n'est pas autorisé dans les DCP au "
"standard Interop. Modifiez votre standard de DCP en SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1938,7 +2020,7 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Vous devez ajouter du contenu au DCP avant de le créer"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
@@ -1948,19 +2030,20 @@ msgstr ""
"erreur lors de la vérification par votre distributeur. Sélectionnez 8 ou 16 "
"canaux audio pour éviter cela."
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"Votre DCP a moins de 6 canaux audio. Cela peut causer des problèmes sur "
"certains projecteurs. Vous voudrez peut-être régler le DCP pour qu'il ait 6 "
"canaux. Cela n'a pas d'importance si votre contenu a moins de canaux, car "
"DCP-o-matic remplira les extras de silence."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1969,7 +2052,7 @@ msgstr ""
"problèmes sur certains projecteurs. Si possible, utilisez Flat ou Scope "
"pour le ratio du DCP."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1977,14 +2060,14 @@ msgstr ""
"Votre volume sonore est très élevé (sur %1). Vous devriez réduire le gain "
"de votre contenu audio."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"Votre projet contient du contenu vidéo qui n'a pas été aligné sur une limite "
"du cadre de l'image."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1992,21 +2075,21 @@ msgstr ""
"Votre projet contient du contenu vidéo dont le découpage n'a pas été aligné "
"sur une limite du cadre de l'image."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[séquence d'images]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[image fixe]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[sous-titres]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_bobine%1"
@@ -2038,11 +2121,11 @@ msgstr "copie de %1"
msgid "could not find stream information"
msgstr "impossible de trouver les informations du flux"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "impossible de déplacer une ressource atmos dans le DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "impossible de déplacer une ressource audio dans le DCP (%1)."
@@ -2070,7 +2153,7 @@ msgstr "impossible d'écrire dans le fichier %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "erreur pendant async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "erreur pendant async_read (%1)"
@@ -2078,28 +2161,28 @@ msgstr "erreur pendant async_read (%1)"
msgid "error during async_write (%1)"
msgstr "erreur pendant async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "images par seconde"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "la fréquence des images est différente de celle du film."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
@@ -2107,36 +2190,46 @@ msgstr ""
"donc être réécrits."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "c'est en 2K mais le film est en 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "c'est en 4K mais le film est en 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "c'est en Interop alors que le film est réglé sur SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "c'est en SMPTE alors que le film est réglé sur Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "contenus audio superposés ; enlevez les autres contenus."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "contenus audio superposés ; enlevez les autres contenus."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr ""
"il se superpose à un autre contenu vidéo ; supprimez cet autre contenu."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2145,16 +2238,16 @@ msgstr ""
"le mode 'découper par contenu vidéo'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "la taille de l'image diffère de celle du film."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "séquence"
@@ -2163,7 +2256,7 @@ msgid "name"
msgstr "nom"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2172,7 +2265,7 @@ msgstr ""
"réécrite."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
@@ -2181,30 +2274,38 @@ msgstr ""
"être réécrite."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "fixe"
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr "Superposition de texte. Supprimer l'autre élément."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "inconnu"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "images vidéo"
+#~ msgid "Copying old video file"
+#~ msgstr "Copie de l'ancien fichier vidéo"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Copie du fichier vidéo dans le DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "Notification DCP-o-matic"
+
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "Superposition de texte. Supprimer l'autre élément."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "pas de sous-titres codés dans toutes ses bobines."
@@ -2215,13 +2316,6 @@ msgstr "images vidéo"
#~ msgstr "pas de son dans toutes ses bobines."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Veuillez reporter ce problème en utilisant le menu Aide -> Signaler un "
-#~ "problème ou par e-mail à carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "Votre conteneur par défaut n'est pas valide et a été changé en Flat "
diff --git a/src/lib/po/hu_HU.po b/src/lib/po/hu_HU.po
index 81ec0ab03..b6c77b01b 100644
--- a/src/lib/po/hu_HU.po
+++ b/src/lib/po/hu_HU.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2022-08-31 21:35+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.1.1\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Tartalom képkockaszáma %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Méretre vágva: %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Megjelenítési arány: %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Fekete kerettel körbekerítve, hogy beleférjen a %1 (%2x%3) konténerbe."
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Skálázva a következő méretre: %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " on %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -94,39 +94,78 @@ msgstr ""
"Hosszúság: $LENGTH\n"
"Méret: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [hang]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [videó]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Email értesítés"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 képkocka"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", pixel arány %.2f:1"
@@ -163,11 +202,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Teljes keret)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr "10"
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr "16"
@@ -179,11 +218,11 @@ msgstr "2.35 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D denoiser"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -193,32 +232,33 @@ msgstr ""
"hogy ezt a DCP-t olyan projektoron játszod le, amely támogatja ezt, javasolt "
"a 2K felbontás beállítása a “DCP->Video†menüpontban."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 van hátra; befejezés: %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>Már %1 DCPt elkészítettél a DCP-o-matic programmal.</h2><img width=“20%"
"%†src=“memory:me.jpg†align=“centerâ€><p>Szia, én Carl vagyok a DCP-o-matic "
@@ -232,10 +272,11 @@ msgstr ""
"href=“https://dcpomatic.com/donate_amount?amount=10â€>€10 támogatása PayPal-"
"on keresztül</a></ul><p>Nagyon szépen köszönöm!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Pár projektornak gondja lehet a magas bitrátával rendelkező DCPk "
@@ -243,25 +284,26 @@ msgstr ""
"állítani, ez nagy eséllyel nem fog semmilyen vizuális változást eredményezni "
"a képen."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"A felirat vagy a hangleíró felirat fájl ebben a projektben ‘%1’ nyelvként "
"lett megjelölve, amit a DCP-o-matic nem ismer fel. A fájl nyelve törölve "
"lett."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 (‘Hybrid log-gamma’)"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Advertisement"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -272,7 +314,7 @@ msgstr ""
"(1.85:1). Ez egy fekete keretet fog eredményezni. Javasoljuk a DCP konténer "
"Scope (2.39:1) használatát a “DCP’ fülön belül."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -282,7 +324,7 @@ msgstr ""
"ra van állítva. Javasoljuk a DCP konténerét ugyanarra állítani, amilyen a "
"tartalom."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Hiba a %1 fájl kezelése közben."
@@ -290,30 +332,30 @@ msgstr "Hiba a %1 fájl kezelése közben."
msgid "Analysing audio"
msgstr "Hang vizsgálata"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Felirat vizsgálata"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
"Legalább egy jelölő a projekt vége után van beállítva. Ez nem lesz "
"figyelembe véve."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Legalább egy hangleíró felirat nagyobb, mint "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "Legalább egy hangleíró felirat XML fájlja nagyobb, mint "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Legalább egy felirat nagyobb, mint "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -321,7 +363,7 @@ msgstr ""
"Legalább egy felirat sor több karaktert tartalmaz, mint 52. Javasolt, hogy "
"egy sor felirat maximum 52 karakter legyen."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -329,7 +371,7 @@ msgstr ""
"Legalább egy felirat sor több karaktert tartalmaz, mint 79. Javasolt, hogy "
"egy sor felirat maximum 79 karakter legyen."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -337,7 +379,7 @@ msgstr ""
"Legalább egy felirat bekezdése több, mint 3 sort tartalmaz. Javasolt, hogy "
"ne legyen egy bekezdés 3 sornál több."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -345,7 +387,7 @@ msgstr ""
"Legalább egy felirat képkocka száma kisebb, mint 15. Javasolt, hogy egy "
"felirat legalább 15 képkocka hosszú legyen."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -353,7 +395,7 @@ msgstr ""
"Legalább egy felirat kevesebb, mint 2 képkockával következik a másik után. "
"Javasolt, hogy legalább 2 képkockányi hely legyen két felirat között."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
#, fuzzy
msgid ""
"At least one piece of subtitle content has no specified language. It is "
@@ -377,72 +419,72 @@ msgstr "A hang újra lesz keverve %1Hz-re"
msgid "Audio will not be resampled"
msgstr "A hang nem lesz újrakeverve"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 extended colour gamut"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 constant luminance"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 for a 10-bit system"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 for a 12-bit system"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 non-constant luminance"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits per pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Bob Weaver Deinterlacing Filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Megszakítva"
@@ -454,11 +496,11 @@ msgstr "Nem tartalmazhat / jeleket"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Nem kezelhető a %1 pixel formátum %2 közben"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Nem lehet KDM-et létrehozni, mivel ez a projekt nem titkosított."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Közép"
@@ -466,7 +508,7 @@ msgstr "Közép"
msgid "Channels"
msgstr "Csatornák"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "Kérlek ellenőrizd az új beállításokat és próbáld újra."
@@ -474,27 +516,32 @@ msgstr "Kérlek ellenőrizd az új beállításokat és próbáld újra."
msgid "Checking content"
msgstr "Tartalom vizsgálata"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Meglévő kép adatok ellenőrzése"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Chroma-derived constant luminance"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Chroma-derived non-constant luminance"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Hangleíró felirat"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Felirat megnyitása"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Elsődleges színek"
@@ -508,17 +555,17 @@ msgstr "Elsődleges színek"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Színtartomány"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Színátviteli jellemzők"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Színtér"
@@ -526,15 +573,15 @@ msgstr "Színtér"
msgid "Combine DCPs"
msgstr "DCPk egyesítése"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Digitális ujjlenyomatok létrehozása"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Digitális ujjlenyomatok létrehozása"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "Gratulálok!"
@@ -552,24 +599,24 @@ msgstr "tartalom típusa"
msgid "Content sample rate"
msgstr "Tartalom mintavételezési frekvenciája"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
"A beszúrni kívánt tartalomnak végig vagy egyáltalán nem kell hangjának lennie"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"A beszúrni kívánt tartalomnak végig vagy egyáltalán nem kell feliratának "
"vagy hangleíró feliratának lennie"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
"A beszúrni kívánt tartalomnak végig vagy egyáltalán nem kell videót "
"tartalmaznia"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -582,11 +629,11 @@ msgstr ""
"A beszúrni kívánt tartalomnak végig vagy egyáltalán nem kell a videóját "
"használni."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr "A beszúrni kívánt tartalomnak "
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
@@ -622,7 +669,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr ""
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr ""
@@ -630,31 +677,31 @@ msgstr ""
msgid "Content to be joined must have the same picture size."
msgstr ""
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr ""
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr ""
@@ -662,23 +709,23 @@ msgstr ""
msgid "Content to be joined must have the same video frame type."
msgstr ""
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr ""
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr ""
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr ""
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr ""
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr ""
@@ -686,14 +733,6 @@ msgstr ""
msgid "Copy DCP to TMS"
msgstr "DCP másolása a TMS-re"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr ""
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr ""
@@ -710,18 +749,18 @@ msgstr ""
msgid "Could not decode image (%1)"
msgstr ""
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "nem sikerült a(z) %1 fájlt megnyitni írásra (%2)"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr ""
@@ -729,19 +768,19 @@ msgstr ""
msgid "Could not open %1 to send"
msgstr ""
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr ""
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr ""
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr ""
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr ""
@@ -757,19 +796,19 @@ msgstr ""
msgid "Could not write to remote file (%1)"
msgstr ""
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX elsődleges"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX másodlagos"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -781,7 +820,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML feliratok"
@@ -798,43 +837,35 @@ msgstr ""
msgid "DCP will use every other frame of the content.\n"
msgstr ""
-#: src/lib/job.cc:172 src/lib/job.cc:187
-msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
-msgstr ""
-
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "DCP-o-matic értesítés"
-
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 vagy AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr ""
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -846,7 +877,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Kedves mozigépész\n"
"\n"
@@ -860,11 +891,15 @@ msgstr ""
"Üdvözlettel,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 vagy CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Letöltés közben hiba lépett fel (%1 hiba %2)"
@@ -888,19 +923,19 @@ msgstr "KDM küldése a következőhöz: %1"
msgid "Email notification"
msgstr "Email értesítés"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Hibajelentés küldése"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Hibajelentés küldése a következőhöz: %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Kódolás"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Episode"
@@ -908,20 +943,20 @@ msgstr "Episode"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr ""
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Hiba: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Feliratok vizsgálata"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Hang, feliratok és hangleíró feliratok vizsgálata"
@@ -933,15 +968,15 @@ msgstr "Tartalom vizsgálata"
msgid "Examining subtitles"
msgstr "Feliratok vizsgálata"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Feliratok és hangleíró feliratok vizsgálata"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Kicsomagolás"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -949,51 +984,51 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr ""
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr ""
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr ""
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr ""
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr ""
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr ""
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr ""
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr ""
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr ""
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr ""
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Teljes"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr ""
@@ -1017,35 +1052,35 @@ msgstr ""
msgid "Full length in video frames at content rate"
msgstr ""
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr ""
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr ""
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr ""
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr ""
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Függőleges elforgatás"
@@ -1053,106 +1088,106 @@ msgstr "Függőleges elforgatás"
msgid "Hz"
msgstr ""
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB vagy sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+msgid "It is not known what caused this error. %1"
msgstr ""
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr ""
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr ""
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Bal"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Bal közép"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Bal hátsó térhangzás"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Bal térhangzás"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Hossz"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (mély)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limitált"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Limitált (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Lineáris"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logaritmikus (100:1 intervallum)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logaritmikus (316:1 intervallum)"
@@ -1160,7 +1195,7 @@ msgstr "Logaritmikus (316:1 intervallum)"
msgid "Lost communication between main and writer processes"
msgstr "Elveszett a kommunikáció és a fő és az író folyamat között"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1168,24 +1203,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Mid-side decoder"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Misc"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "A hangcsatornák száma nem egyezik a DCP-ben"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr ""
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "A képkocka szám nem egyezik a DCP-ben."
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "A videó méret nem egyezik a DCP-ben"
@@ -1193,19 +1228,19 @@ msgstr "A videó méret nem egyezik a DCP-ben"
msgid "Missing required setting %1"
msgstr "Hiányzó beállítás: %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Hétfő"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr ""
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "Nem található CPL fájl a DCP-ben."
@@ -1219,77 +1254,91 @@ msgstr "Nincs email szerver beállítva"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Nincs email szerver beállítva"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Nem található érvényes képfájl a mappában."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Zajcsökkentés"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Semmi"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (eltelt idő: %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (eltelt idő: %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Hangleíró felirat"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Felirat megnyitása"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
+#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Nyisd meg a projektet a DCP-o-matic programban és mentsd el, mielőtt "
"újrapróbálod."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Orientáció"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Kifogyott a memória"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr ""
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Kérlek jelentsd ezt a hibát a Segítség -> Probléma jelentése gombra "
+"kattintva, vagy emailben: carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Policy"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr ""
@@ -1297,93 +1346,93 @@ msgstr ""
msgid "Programming error at %1:%2 %3"
msgstr "Programhiba, itt: %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promo"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Public Service Announcement"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Rating"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Jobb"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Jobb közép"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Jobb hátsó térhangzás"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Jobb térhangzás"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "90 fokos elforgatás óramutatóval ellentétes irányba"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "90 fokos elforgatás óramutatóval megegyező irányba"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1394,23 +1443,23 @@ msgstr ""
"jelölőkkel. Javasolt a jelölők hozzáadása a ‘Jelölők’ gombra kattintva a "
"“DCP†fülön."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 a 10, 12, 14 és 16 bit rendszerekre"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1423,27 +1472,27 @@ msgstr "SSH hiba [%1]"
msgid "SSH error [%1] (%2)"
msgstr "SSH hiba [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Szombat"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Képfájlok szkennelése"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Email küldése"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Short"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Aláírás"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Méret"
@@ -1451,11 +1500,11 @@ msgstr "Méret"
msgid "Some audio will be resampled to %1Hz"
msgstr ""
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1470,13 +1519,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1495,11 +1544,11 @@ msgstr ""
msgid "Some of your content needs an OV"
msgstr ""
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Sztereó"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Sztereó"
@@ -1512,19 +1561,19 @@ msgstr ""
msgid "Stereo to 5.1 up-mixer B"
msgstr ""
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Vasárnap"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr ""
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1544,54 +1593,68 @@ msgstr ""
msgid "The certificate chain for signing is invalid (%1)"
msgstr ""
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgstr ""
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr ""
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr ""
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr ""
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr ""
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1600,38 +1663,37 @@ msgid ""
"systems support your chosen DCP rate."
msgstr ""
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
"tab of Preferences."
msgstr ""
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1640,40 +1702,40 @@ msgid ""
"the content and choosing \"Add KDM\"."
msgstr ""
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Csütörtök"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr ""
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "%1 konvertálása"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr ""
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Kedd"
@@ -1681,7 +1743,7 @@ msgstr "Kedd"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr ""
@@ -1689,35 +1751,35 @@ msgstr ""
msgid "Unexpected image type received by server"
msgstr ""
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Ismeretlen"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Ismeretlen hiba"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr ""
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr ""
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Nincs megadva"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Név nélküli"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Nem használt"
@@ -1729,7 +1791,7 @@ msgstr ""
msgid "Upmix R"
msgstr ""
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1737,11 +1799,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "DCP ellenőrzése"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr ""
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr ""
@@ -1749,74 +1811,74 @@ msgstr ""
msgid "Waiting"
msgstr "Várakozás"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr ""
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Szerda"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr ""
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
"to %2 fps."
msgstr ""
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
"rate to %2 fps."
msgstr ""
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
msgstr ""
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:324
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
msgstr ""
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
msgstr ""
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1826,59 +1888,59 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr ""
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
msgstr ""
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr ""
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr ""
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[mozgó képek]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[álló]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[felirat]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_reel%1"
@@ -1910,11 +1972,11 @@ msgstr "%1 másolása"
msgid "could not find stream information"
msgstr "nem található az adatfolyam információ"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "nem sikerült az atmos anyagot DCP-be írni (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "nem sikerült a hanganyagot DCP-be írni (%1)"
@@ -1942,7 +2004,7 @@ msgstr "hiba a fájlba írás közben %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "hiba a csatlakozás közben (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "hiba az olvasás közben (%1)"
@@ -1950,78 +2012,85 @@ msgstr "hiba az olvasás közben (%1)"
msgid "error during async_write (%1)"
msgstr "hiba az írás közben (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "képkocka per másodperc"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "óra"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr ""
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr ""
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+msgid "it overlaps other audio content."
+msgstr ""
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+msgid "it overlaps other text content."
msgstr ""
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+msgid "it overlaps other video content."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr ""
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "perc"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "mozgó"
@@ -2030,47 +2099,39 @@ msgid "name"
msgstr "név"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "másodperc"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "még"
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr ""
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "ismeretlen"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "videó képkockái"
-#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Kérlek jelentsd ezt a hibát a Segítség -> Probléma jelentése gombra "
-#~ "kattintva, vagy emailben: carl@dcpomatic.com"
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "DCP-o-matic értesítés"
diff --git a/src/lib/po/it_IT.po b/src/lib/po/it_IT.po
index 49029dd1c..42b33b3a6 100644
--- a/src/lib/po/it_IT.po
+++ b/src/lib/po/it_IT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2018-09-30 14:16+0200\n"
"Last-Translator: William Fanelli <william.f@impronte.com>\n"
"Language-Team: \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.7\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Frequenza fotogrammi del contenuto %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Ritagliato a %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Rapporto schermo %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Aggiunto nero per adattare al contenitore %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Scalato a %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " on %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -94,39 +94,83 @@ msgstr ""
"Lunghezza: $ LUNGHEZZA\n"
"Dimensioni: $ DIMENSIONI\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$NOME_LAVORO: $STATO_LAVORO"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [audio]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [video]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-MATIC non riesce ad aprire il file %1 (%2). Forse non esiste oppure è "
+"un formato non riconosciuto."
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+"DCP-o-MATIC non supporta più il filtro '%1', quindi è stato disattivato."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Notifica Email"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", rapporto pixel %.2f:1"
@@ -163,11 +207,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Fotogramma intero)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -180,71 +224,72 @@ msgstr "2.35 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "Riduzione rumore 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 rimanente; alla fine %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Alcuni proiettori hanno problemi durante la riproduzione di DCP con un bit-"
"rate molto alto. È consigliato mantenere la banda JPEG2000 intorno ai "
"200Mbit/s; è improbabile che si vedano effetti significativi sull'immagine."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('log-gamma ibrido')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Pubblicità"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -256,7 +301,7 @@ msgstr ""
"Forse è preferibile impostare il contenitore DCP su Scope (2.39:1) nel tab "
"\"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
#, fuzzy
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
@@ -267,7 +312,7 @@ msgstr ""
"questo modo il contenuto sarà della dimensione Flat (1.85:1). Forse è "
"preferibile impostare il contenitore DCP su Flat (1.85:1) nel tab \"DCP\"."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Errore durante l'elaborazione del file %1."
@@ -276,59 +321,59 @@ msgstr "Errore durante l'elaborazione del file %1."
msgid "Analysing audio"
msgstr "Analizza l'audio"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
#, fuzzy
msgid "Analysing subtitles"
msgstr "Trova sottotitoli"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -347,73 +392,73 @@ msgstr "L'audio sarà ricampionato a %1Hz"
msgid "Audio will not be resampled"
msgstr "L'audio non sarà ricampionato"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 gamma colori estesa"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 luminanza costante"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 per sistema a 10-bit"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 per sistema a 12-bit"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 luminanza non costante"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits per pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
#, fuzzy
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Altro filtro di deinterlacciamento"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Cancellato"
@@ -425,12 +470,12 @@ msgstr "Non può contenere slash"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Impossibile gestire il formato pixel %1 durante %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr ""
"Impossibile creare un KDM in quanto questo progetto non è crittografato."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Centro"
@@ -438,7 +483,7 @@ msgstr "Centro"
msgid "Channels"
msgstr "Canali"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -447,28 +492,33 @@ msgstr ""
msgid "Checking content"
msgstr "Controllo del contenuto modificato"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Controllo dati immagine esistente in corso"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Luminanza costante derivata dal Chroma"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Luminanza non costante derivata dal Chroma"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
#, fuzzy
msgid "Closed captions"
msgstr "Riduzione rumore"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Testo sottotitoli"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Colori primari"
@@ -482,17 +532,17 @@ msgstr "Colori primari"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Gamma colori"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Caratteristica di trasferimento del colore"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Spazio colore"
@@ -500,15 +550,15 @@ msgstr "Spazio colore"
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Calcolo assimilazione dati"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Calcolo assimilazioni dati"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -526,20 +576,20 @@ msgstr "tipo di contenuto"
msgid "Content sample rate"
msgstr "Frequenza di campionamento del contenuto audio"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "Tutti i contenuti da unire possono avere o non avere la traccia audio"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
#, fuzzy
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "Tutti i contenuti da unire possono avere o non avere i sottotitoli"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "Tutti i contenuti da unire possono avere o non avere la traccia video"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
#, fuzzy
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
@@ -550,13 +600,13 @@ msgstr "Il contenuto da unire deve avere la stessa interlinea dei sottotitoli."
msgid "Content to be joined must have all its video used or not used."
msgstr "Il contenuto da unire deve avere la stessa frequenza fotogrammi"
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"Il contenuto da unire deve avere le stesse impostazioni di 'masterizza "
"sottotitoli'."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Il contenuto da unire deve avere le stesse impostazioni di 'usa sottotitoli'."
@@ -598,7 +648,7 @@ msgstr "Il contenuto da unire deve avere la stessa scala."
msgid "Content to be joined must have the same fades."
msgstr "Il contenuto da unire deve avere le stesse dissolvenze."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Il contenuto da unire deve avere la stessa dimensione."
@@ -606,34 +656,34 @@ msgstr "Il contenuto da unire deve avere la stessa dimensione."
msgid "Content to be joined must have the same picture size."
msgstr "Il contenuto da unire deve avere la stessa dimensione dell'immagine."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
"Il contenuto da unire deve avere lo stesso spostamento X dei sottotitoli."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Il contenuto da unire deve avere la stessa scala X dei sottotitoli."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
"Il contenuto da unire deve avere lo stesso spostamento Y dei sottotitoli."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Il contenuto da unire deve avere la stessa scala Y dei sottotitoli."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
"Il contenuto da unire deve avere le stesse dissolvenze dei sottotitoli."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "Il contenuto da unire deve avere la stessa interlinea dei sottotitoli."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Il contenuto da unire deve avere la stessa frequenza fotogrammi"
@@ -641,25 +691,25 @@ msgstr "Il contenuto da unire deve avere la stessa frequenza fotogrammi"
msgid "Content to be joined must have the same video frame type."
msgstr "Il contenuto da unire deve avere lo stesso tipo di fotogramma video."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
#, fuzzy
msgid "Content to be joined must use the same DCP track."
msgstr "Il contenuto da unire deve usare gli stessi caratteri."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Il contenuto da unire deve usare gli stessi caratteri."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Il contenuto da unire deve usare lo stesso flusso di sottotitoli."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
#, fuzzy
msgid "Content to be joined must use the same text language."
msgstr "Il contenuto da unire deve usare gli stessi caratteri."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Il contenuto video è %1x%2"
@@ -667,15 +717,6 @@ msgstr "Il contenuto video è %1x%2"
msgid "Copy DCP to TMS"
msgstr "Copia DCP nel TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-#, fuzzy
-msgid "Copying video file into DCP"
-msgstr "La dimensione video nel DCP non corrisponde"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Impossibile connettersi al server %1 (%2)"
@@ -693,20 +734,21 @@ msgstr "Impossibile decodificare il file JPEG2000 %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Impossibile decodificare il file immagine (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Impossibile aprire il file ZIP scaricato"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Impossibile connettersi ai server di codifica remoti. Forse è in esecuzione "
"un'altra istanza di DCP-o-MATIC."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Impossibile aprire %1"
@@ -714,21 +756,21 @@ msgstr "Impossibile aprire %1"
msgid "Could not open %1 to send"
msgstr "Impossibile aprire %1 da inviare"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Impossibile aprire il file ZIP scaricato"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
#, fuzzy
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Impossibile aprire il file ZIP scaricato"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
#, fuzzy
msgid "Could not open file for writing"
msgstr "impossibile aprire il file %1 per la scrittura (%2)"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
#, fuzzy
msgid "Could not open output file %1 (%2)"
msgstr "Impossibile scrivere il file %1 (%2)"
@@ -745,19 +787,19 @@ msgstr "Impossibile avviare il trasferimento"
msgid "Could not write to remote file (%1)"
msgstr "Impossibile scrivere il file remoto (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX principale"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX secondario"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -769,7 +811,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML sottotitoli"
@@ -786,46 +828,35 @@ msgstr "Il DCP andrà al %.1f%% della velocità originale.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "Il DCP utilizzerà ogni altro fotogramma del contenuto.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-MATIC non riesce ad aprire il file %1 (%2). Forse non esiste oppure è "
-"un formato non riconosciuto."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr ""
-"DCP-o-MATIC non supporta più il filtro '%1', quindi è stato disattivato."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "DCP-o-MATIC notifica"
-
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "De-interlacciamento"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -837,7 +868,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Spett. Proiezionista\n"
"\n"
@@ -851,12 +882,16 @@ msgstr ""
"Distinti saluti,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
#, fuzzy
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 e CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
#, fuzzy
msgid "Download failed (%1 error %2)"
msgstr "Download fallito (%1/%2 errore %3)"
@@ -882,19 +917,19 @@ msgstr "Email KDM per %1"
msgid "Email notification"
msgstr "Notifica Email"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Email rapporto problemi"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Email rapporto problemi per %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Codifica"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -902,20 +937,20 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Errore nel file dei sottotitoli: letto %1 ma era atteso %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Errore: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Trova sottotitoli"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
#, fuzzy
msgid "Examining audio, subtitles and closed captions"
msgstr "Esamino il contenuto"
@@ -929,17 +964,17 @@ msgstr "Analisi contenuto"
msgid "Examining subtitles"
msgstr "Trova sottotitoli"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
#, fuzzy
msgid "Examining subtitles and closed captions"
msgstr "Esamino il contenuto"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
#, fuzzy
msgid "Extracting"
msgstr "Punteggio"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -947,54 +982,54 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Autenticazione con il server fallita (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
#, fuzzy
msgid "Failed to encode the DCP."
msgstr "Invio email fallito (%1)"
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
#, fuzzy
msgid "Failed to send email"
msgstr "Invio email fallito (%1)"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Lungometraggio"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Nome file"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Nome file"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Determina lunghezza"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Frequenza fotogrammi"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Venerdì"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Completo"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Completo (0-%1)"
@@ -1018,35 +1053,35 @@ msgstr "Lunghezza completa nei fotogrammi video alla frequenza del DCP"
msgid "Full length in video frames at content rate"
msgstr "Lunghezza completa nei fotogrammi video alla frequenza del contenuto"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradiente debander"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Non udenti"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Riduzzione del rumore 3D di alta qualità"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Vibrazione orizzontale"
@@ -1054,106 +1089,107 @@ msgstr "Vibrazione orizzontale"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB o sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Non è chiaro cosa ha causato l'errore."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "Consegna KDM: $NOME_CPL"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Deinterlacciatore Kernel"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Sinistro"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Sinistro centro"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Surround posteriore sinistro"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Surround sinistro"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Lunghezza"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limitato"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Limitato (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Lineare"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logaritmico (ampiezza 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logaritmico (ampiezza 316:1)"
@@ -1161,7 +1197,7 @@ msgstr "Logaritmico (ampiezza 316:1)"
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1169,24 +1205,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Decodificatore Mid-Side"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Varie"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Il numero di canali audio nel DCP non corrisponde"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "La frequenza di campionamento audio nel DCP non corrisponde"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "La frequenza fotogrammi nel DCP non corrisponde"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "La dimensione video nel DCP non corrisponde"
@@ -1194,19 +1230,19 @@ msgstr "La dimensione video nel DCP non corrisponde"
msgid "Missing required setting %1"
msgstr "Impostazione obbligatoria mancante %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Lunedì"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Dinterlacciatore con compensazione di movimento"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "Nessun CPLs trovato nel DCP."
@@ -1220,77 +1256,87 @@ msgstr "Nessun server di posta configurato nelle impostazioni"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Nessun server di posta configurato nelle impostazioni"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Nessun file immagine valido trovato nella cartella."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Riduzione rumore"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Nulla"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (eseguito in: %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (eseguito in: %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Solo la prima parte del contenuto da unire può avere un taglio iniziale."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Solo l'ultima parte del contenuto da unire può avere un taglio finale."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Riduzione rumore"
+
+#: src/lib/text_type.cc:79
#, fuzzy
msgid "Open subtitles"
msgstr "Testo sottotitoli"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Orientamento"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Memoria esaurita"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Analisi per la riduzione del rumore completata"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Linea di condotta"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Preparato per la frequenza fotogrammi del video"
@@ -1298,116 +1344,116 @@ msgstr "Preparato per la frequenza fotogrammi del video"
msgid "Programming error at %1:%2 %3"
msgstr "Errore di programmazione a %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Annuncio di pubblico servizio"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Punteggio"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Destro"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Destro centro"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Surround posteriore destro"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Surround destro"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Ruota di 90 gradi in senso antiorario"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Ruota di 90 gradi in senso orario"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 per sistemi a 10, 12, 14 e 16 bit"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1422,27 +1468,27 @@ msgstr "Errore SSH (%1)"
msgid "SSH error [%1] (%2)"
msgstr "Errore SSH (%1)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Sabato"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Scansione file immagine"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Invia e-mail"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Corto"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Dimensione"
@@ -1450,11 +1496,11 @@ msgstr "Dimensione"
msgid "Some audio will be resampled to %1Hz"
msgstr "Parte dell'audio sarà ricampionato a %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1469,13 +1515,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1495,11 +1541,11 @@ msgstr "Alcuni dei tuoi contenuti richiedono una KDM"
msgid "Some of your content needs an OV"
msgstr "Alcuni dei tuoi contenuti richiedono un OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Stereo"
@@ -1512,19 +1558,19 @@ msgstr "Da Stereo a 5.1 up-mixer A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Da Stereo a 5.1 up-mixer B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Domenica"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Filtro Telecine"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1544,32 +1590,32 @@ msgstr "La catena del certificato per la firma non è valida"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "La catena del certificato per la firma non è valida (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1577,23 +1623,37 @@ msgstr ""
"Sul disco dove è memorizzato il film non c'è abbastanza spazio. Liberare "
"altro spazio e riprovare."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Il file %1 é stato anticipato di %2 millisecondi."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Il file %1 é stato posticipato di %2 millisecondi."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Il file %1 é stato tagliato di %2 millisecondi in meno."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Il file %1 é stato tagliato di %2 millisecondi in piú."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1609,11 +1669,11 @@ msgstr ""
"che i sistemi di proiezione selezionati supportino la frequenza del DCP "
"scelta."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "Nessun video in questo DCP"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1623,27 +1683,30 @@ msgstr ""
"operativo a 32 bit, provare a ridurre il numero di thread di codifica nella "
"scheda Generale delle Preferenze."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
+"Non c'e abbastanza memoria per fare questo. Se si utilizza un sistema "
+"operativo a 32 bit, provare a ridurre il numero di thread di codifica nella "
+"scheda Generale delle Preferenze."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1654,47 +1717,49 @@ msgstr ""
"Questo file è un KDM, deve essere aggiunti al contenuto DCP facendo clic con "
"il pulsante destro del mouse sul contenuto e scegliendo \"Aggiungi KDM\"."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Questo film è stato creato con una versione più recente di DCP-o-matic e non "
"può essere caricato in questa versione. Scusate!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Questo film è stato creato con una versione precedente di DCP-o-matic e "
"sfortunatamente non può essere caricato in questa versione. Dovrai creare un "
"nuovo film, aggiungere nuovamente i tuoi contenuti e configurarli "
"nuovamente. Scusate!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Giovedì"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
#, fuzzy
msgid "Transcoding %1"
msgstr "Transcodifica %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Di transizione"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Martedì"
@@ -1702,7 +1767,7 @@ msgstr "Martedì"
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Contenuti dei file ZIP non corretti"
@@ -1710,36 +1775,36 @@ msgstr "Contenuti dei file ZIP non corretti"
msgid "Unexpected image type received by server"
msgstr "Immagine ricevuta dal server inaspettata"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
#, fuzzy
msgid "Unknown"
msgstr "sconosciuto"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Errore sconosciuto"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Formato campionamento audio non riconosciuto (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Maschera di contrasto e sfocatura Gaussiana"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Non specificato"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Senza titolo"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Non utilizzato"
@@ -1751,7 +1816,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1759,11 +1824,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Verifica DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Vibrazione verticale"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Visivamente alterata"
@@ -1771,23 +1836,23 @@ msgstr "Visivamente alterata"
msgid "Waiting"
msgstr "Attendere"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Filtro Weave"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Mercoledì"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Altro filtro di deinterlacciamento"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1798,7 +1863,7 @@ msgstr ""
"supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di "
"creare un DCP SMPTE."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1809,7 +1874,7 @@ msgstr ""
"supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di "
"creare un DCP SMPTE."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
#, fuzzy
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
@@ -1819,19 +1884,11 @@ msgstr ""
"supportata . Si consiglia di modificare la frequenza fotogrammi del DCP o di "
"creare un DCP SMPTE."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Sono presenti contenuti in 3D ma il DCP è impostato su 2D. Imposta il DCP su "
-"3D se vuoi vedere il contenuto su un vero sistema 3D (come Real-D, "
-"MasterImage, ecc.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Stai utilizzando l'upmixer stereo-a-5.1 di DCP-o-MATIC. Questa funzione è "
@@ -1839,7 +1896,16 @@ msgstr ""
"dovresti ascoltare il DCP creato in un cinema per assicurarti che il suono "
"sia buono."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Sono presenti contenuti in 3D ma il DCP è impostato su 2D. Imposta il DCP su "
+"3D se vuoi vedere il contenuto su un vero sistema 3D (come Real-D, "
+"MasterImage, ecc.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1847,19 +1913,19 @@ msgstr ""
"Hai %1 files che sembrano provenire da un DVD (files VOB). Dovresti unirli "
"per assicurare una transizione senza salti."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1871,22 +1937,22 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Devi aggiungere dei contenuti al DCP prima di crearlo"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
#, fuzzy
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
@@ -1896,7 +1962,7 @@ msgstr ""
"causare problemi su alcuni proiettori. Se possibile, usa Flat o Scope come "
"contenitore per il DCP"
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1904,14 +1970,14 @@ msgstr ""
"Il tuo livello audio è molto alto (su %1). Dovresti ridurre il guadagno del "
"tuo contenuto audio."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"Il tuo progetto contiene contenuti video non allineati a un margine del "
"fotogramma."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1919,21 +1985,21 @@ msgstr ""
"Il tuo progetto contiene video il cui assetto non era allineato al margine "
"del fotogramma."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[spostamento immagini]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[fermo immagine]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[sottotitoli]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr ""
@@ -1965,12 +2031,12 @@ msgstr "copia %1"
msgid "could not find stream information"
msgstr "non riesco a trovare informazioni sul flusso"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
#, fuzzy
msgid "could not move atmos asset into the DCP (%1)"
msgstr "impossibile spostare la risorsa audio nel DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "impossibile spostare la risorsa audio nel DCP (%1)"
@@ -2001,7 +2067,7 @@ msgstr "Impossibile scrivere il file %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "errore durante la connessione asincrona (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "errore durante la lettura asincrona (%1)"
@@ -2009,64 +2075,74 @@ msgstr "errore durante la lettura asincrona (%1)"
msgid "error during async_write (%1)"
msgstr "errore durante la scrittura asincrona (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "fotogrammi per secondo"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "il DCP ha una frequenza fotogrammi diversa rispetto al film."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
#, fuzzy
msgid "it is 2K and the film is 4K."
msgstr "il film è impostato su Interop e questo DCP è SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
#, fuzzy
msgid "it is 4K and the film is 2K."
msgstr "il film è impostato su Interop e questo DCP è SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "il film è impostato su Interop e questo DCP è SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "il film è impostato su SMPTE e questo DCP è Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
msgstr "c'è un altro flusso audio che si sovrappone; rimuoverlo."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
+msgstr "c'è un altro flusso audio che si sovrappone; rimuoverlo."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "c'è un altro flusso video che si sovrappone; rimuoverlo."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2075,16 +2151,16 @@ msgstr ""
"bobina su \"dividi per contenuto video\"."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "la dimensione del frame nel film è diversa da quella del DCP."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "spostamento"
@@ -2093,46 +2169,52 @@ msgid "name"
msgstr "nome"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "fermo immagine"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "c'è un altro flusso video che si sovrappone; rimuoverlo."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "sconosciuto"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "fotogrammi video"
#, fuzzy
+#~ msgid "Copying video file into DCP"
+#~ msgstr "La dimensione video nel DCP non corrisponde"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "DCP-o-MATIC notifica"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "c'è un altro flusso video che si sovrappone; rimuoverlo."
+
+#, fuzzy
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "il DCP non ha sonoro in nessuna delle parti."
diff --git a/src/lib/po/ka_KA.po b/src/lib/po/ka_KA.po
index 16e93a77a..d82c29bff 100644
--- a/src/lib/po/ka_KA.po
+++ b/src/lib/po/ka_KA.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,50 +17,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
"Content frame rate %.4f\n"
msgstr ""
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
msgstr ""
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
"Display aspect ratio %.2f:1"
msgstr ""
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
msgstr ""
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
msgstr ""
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr ""
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr ""
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -74,39 +74,77 @@ msgid ""
"Size: $SIZE\n"
msgstr ""
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr ""
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr ""
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr ""
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr ""
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr ""
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr ""
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+msgid "%1 notification"
+msgstr ""
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ""
@@ -143,11 +181,11 @@ msgstr ""
msgid "1.90 (Full frame)"
msgstr ""
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr ""
@@ -159,68 +197,68 @@ msgstr ""
msgid "2.39 (Scope)"
msgstr ""
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr ""
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr ""
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr ""
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr ""
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr ""
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -228,14 +266,14 @@ msgid ""
"tab."
msgstr ""
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
"DCP's container to have the same ratio as your content."
msgstr ""
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr ""
@@ -243,58 +281,58 @@ msgstr ""
msgid "Analysing audio"
msgstr ""
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr ""
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -313,72 +351,72 @@ msgstr ""
msgid "Audio will not be resampled"
msgstr ""
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr ""
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr ""
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr ""
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr ""
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr ""
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr ""
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr ""
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr ""
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr ""
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr ""
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr ""
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr ""
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr ""
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr ""
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr ""
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr ""
@@ -390,11 +428,11 @@ msgstr ""
msgid "Cannot handle pixel format %1 during %2"
msgstr ""
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr ""
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr ""
@@ -402,7 +440,7 @@ msgstr ""
msgid "Channels"
msgstr ""
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -410,27 +448,31 @@ msgstr ""
msgid "Checking content"
msgstr ""
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr ""
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr ""
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr ""
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr ""
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+msgid "Closed subtitles"
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr ""
@@ -444,17 +486,17 @@ msgstr ""
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr ""
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr ""
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr ""
@@ -462,15 +504,15 @@ msgstr ""
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr ""
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr ""
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -486,19 +528,19 @@ msgstr ""
msgid "Content sample rate"
msgstr ""
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -507,11 +549,11 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr ""
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
@@ -547,7 +589,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr ""
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr ""
@@ -555,31 +597,31 @@ msgstr ""
msgid "Content to be joined must have the same picture size."
msgstr ""
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr ""
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr ""
@@ -587,23 +629,23 @@ msgstr ""
msgid "Content to be joined must have the same video frame type."
msgstr ""
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr ""
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr ""
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr ""
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr ""
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr ""
@@ -611,14 +653,6 @@ msgstr ""
msgid "Copy DCP to TMS"
msgstr ""
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr ""
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr ""
@@ -635,17 +669,17 @@ msgstr ""
msgid "Could not decode image (%1)"
msgstr ""
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
msgid "Could not find file %1 in ZIP file"
msgstr ""
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr ""
@@ -653,19 +687,19 @@ msgstr ""
msgid "Could not open %1 to send"
msgstr ""
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr ""
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr ""
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr ""
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr ""
@@ -681,19 +715,19 @@ msgstr ""
msgid "Could not write to remote file (%1)"
msgstr ""
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr ""
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr ""
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr ""
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr ""
@@ -705,7 +739,7 @@ msgstr ""
msgid "DCI Scope"
msgstr ""
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr ""
@@ -722,43 +756,34 @@ msgstr ""
msgid "DCP will use every other frame of the content.\n"
msgstr ""
-#: src/lib/job.cc:172 src/lib/job.cc:187
-msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
-msgstr ""
-
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr ""
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr ""
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
msgid ""
"Dear Projectionist\n"
"\n"
@@ -770,14 +795,18 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
+msgstr ""
+
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
msgstr ""
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr ""
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr ""
@@ -801,19 +830,19 @@ msgstr ""
msgid "Email notification"
msgstr ""
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr ""
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr ""
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr ""
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -821,19 +850,19 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr ""
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr ""
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
msgid "Examining audio"
msgstr ""
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr ""
@@ -845,15 +874,15 @@ msgstr ""
msgid "Examining subtitles"
msgstr ""
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr ""
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr ""
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr ""
@@ -861,51 +890,51 @@ msgstr ""
msgid "Failed to authenticate with server (%1)"
msgstr ""
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr ""
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr ""
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr ""
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr ""
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr ""
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr ""
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr ""
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr ""
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr ""
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr ""
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr ""
@@ -929,35 +958,35 @@ msgstr ""
msgid "Full length in video frames at content rate"
msgstr ""
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr ""
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr ""
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr ""
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr ""
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr ""
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr ""
@@ -965,105 +994,105 @@ msgstr ""
msgid "Hz"
msgstr ""
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr ""
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+msgid "It is not known what caused this error. %1"
msgstr ""
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr ""
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr ""
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr ""
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr ""
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr ""
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr ""
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr ""
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr ""
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr ""
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr ""
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr ""
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
msgid "Limited / video (%1-%2)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr ""
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr ""
@@ -1071,7 +1100,7 @@ msgstr ""
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr ""
@@ -1079,24 +1108,24 @@ msgstr ""
msgid "Mid-side decoder"
msgstr ""
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr ""
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr ""
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr ""
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr ""
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr ""
@@ -1104,19 +1133,19 @@ msgstr ""
msgid "Missing required setting %1"
msgstr ""
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr ""
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr ""
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr ""
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr ""
@@ -1128,74 +1157,83 @@ msgstr ""
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr ""
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr ""
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr ""
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr ""
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
msgid "OK (ran for %1 from %2 to %3)"
msgstr ""
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr ""
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+msgid "Open captions"
+msgstr ""
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr ""
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr ""
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr ""
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr ""
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr ""
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr ""
@@ -1203,116 +1241,116 @@ msgstr ""
msgid "Programming error at %1:%2 %3"
msgstr ""
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr ""
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr ""
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr ""
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr ""
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr ""
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr ""
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr ""
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr ""
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr ""
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr ""
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr ""
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr ""
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr ""
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr ""
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr ""
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr ""
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr ""
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr ""
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr ""
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr ""
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr ""
@@ -1325,27 +1363,27 @@ msgstr ""
msgid "SSH error [%1] (%2)"
msgstr ""
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr ""
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr ""
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr ""
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr ""
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr ""
@@ -1353,11 +1391,11 @@ msgstr ""
msgid "Some audio will be resampled to %1Hz"
msgstr ""
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1372,13 +1410,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1397,11 +1435,11 @@ msgstr ""
msgid "Some of your content needs an OV"
msgstr ""
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr ""
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr ""
@@ -1413,19 +1451,19 @@ msgstr ""
msgid "Stereo to 5.1 up-mixer B"
msgstr ""
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr ""
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr ""
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr ""
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr ""
@@ -1445,54 +1483,68 @@ msgstr ""
msgid "The certificate chain for signing is invalid (%1)"
msgstr ""
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgstr ""
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr ""
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr ""
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr ""
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr ""
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1501,38 +1553,37 @@ msgid ""
"systems support your chosen DCP rate."
msgstr ""
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
"tab of Preferences."
msgstr ""
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1541,40 +1592,40 @@ msgid ""
"the content and choosing \"Add KDM\"."
msgstr ""
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr ""
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr ""
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr ""
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr ""
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr ""
@@ -1582,7 +1633,7 @@ msgstr ""
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr ""
@@ -1590,35 +1641,35 @@ msgstr ""
msgid "Unexpected image type received by server"
msgstr ""
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr ""
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr ""
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr ""
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr ""
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr ""
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr ""
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr ""
@@ -1630,7 +1681,7 @@ msgstr ""
msgid "Upmix R"
msgstr ""
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr ""
@@ -1638,11 +1689,11 @@ msgstr ""
msgid "Verify DCP"
msgstr ""
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr ""
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr ""
@@ -1650,74 +1701,74 @@ msgstr ""
msgid "Waiting"
msgstr ""
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr ""
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr ""
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr ""
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr ""
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
"to %2 fps."
msgstr ""
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
"rate to %2 fps."
msgstr ""
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
msgstr ""
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:324
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
msgstr ""
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
msgstr ""
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1727,59 +1778,59 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr ""
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
msgstr ""
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr ""
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr ""
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr ""
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr ""
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr ""
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr ""
@@ -1811,11 +1862,11 @@ msgstr ""
msgid "could not find stream information"
msgstr ""
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr ""
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr ""
@@ -1843,7 +1894,7 @@ msgstr ""
msgid "error during async_connect (%1)"
msgstr ""
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr ""
@@ -1851,78 +1902,85 @@ msgstr ""
msgid "error during async_write (%1)"
msgstr ""
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr ""
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr ""
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr ""
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+msgid "it overlaps other audio content."
msgstr ""
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+msgid "it overlaps other text content."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:739
+msgid "it overlaps other video content."
+msgstr ""
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr ""
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr ""
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr ""
@@ -1931,40 +1989,36 @@ msgid "name"
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr ""
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr ""
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr ""
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr ""
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr ""
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr ""
diff --git a/src/lib/po/nl_NL.po b/src/lib/po/nl_NL.po
index c2bbd828d..c166832c1 100644
--- a/src/lib/po/nl_NL.po
+++ b/src/lib/po/nl_NL.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
-"PO-Revision-Date: 2024-07-11 23:32+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
+"PO-Revision-Date: 2024-11-12 04:23+0100\n"
"Last-Translator: Rob van Nieuwkerk <dcpomatic-translations@berrymount.nl>\n"
"Language-Team: Rob van Nieuwkerk <dcpomatic-translations@berrymount.nl>\n"
"Language: nl_NL\n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.4\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -27,7 +27,7 @@ msgstr ""
"\n"
"Content frame rate %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -35,7 +35,7 @@ msgstr ""
"\n"
"Bijgesneden naar %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -44,7 +44,7 @@ msgstr ""
"\n"
"Weergave-beeldverhouding %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -52,7 +52,7 @@ msgstr ""
"\n"
"Opgevuld met zwart om in container %1 (%2x%3) te passen"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -60,18 +60,18 @@ msgstr ""
"\n"
"Geschaald naar %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " op %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -95,39 +95,89 @@ msgstr ""
"Lengte: $LENGTH\n"
"Grootte: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [audio]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [video]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [video]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"%1 kan het bestand %2 (%3) niet openen. Misschien bestaat het niet of wordt "
+"het formaat niet ondersteund."
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"%1 moest uw instellingen voor refereren aan DCP's als OV wijzigen. "
+"Controleer a.u.b. deze instellingen om er zeker van te zijn dat ze zijn "
+"zoals u wilt."
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"%1 moest uw instellingen wijzigen zodat de frame rate van de film hetzelfde "
+"is als die van uw Atmos-content."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+"%1 moest een van uw aangepaste reel-grenzen verwijderen omdat deze niet meer "
+"binnen de film valt."
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+"%1 moest een aantal van uw aangepaste reel-grenzen verwijderen, omdat ze "
+"niet meer binnen de film vallen."
+
+#: src/lib/ffmpeg_content.cc:122
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+"%1 ondersteunt het filter `%2' niet langer, daarom is het uitgeschakeld."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+msgid "%1 notification"
+msgstr "%1 notificatie"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 frames"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", pixel-beeldverhouding %.2f:1"
@@ -164,11 +214,11 @@ msgstr "1,85:1 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1,896:1 (Full Container)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr "10"
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr "16"
@@ -180,11 +230,11 @@ msgstr "2,35:1 (old Scope)"
msgid "2.39 (Scope)"
msgstr "2,39:1 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D-ruisonderdrukking"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -194,75 +244,75 @@ msgstr ""
"Tenzij u weet dat u deze DCP gaat afspelen op een geschikte projector, is "
"het raadzaam om de DCP in te stellen op 2K in het \"DCP/Video\"-tabblad."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 resterend; klaar om %2%3"
-#: src/lib/analytics.cc:65
-msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
-msgstr ""
-"<h2>U heeft %1 DCP's gemaakt met DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hallo. Ik ben Carl en ik ben de "
-"ontwikkelaar van DCP-o-matic. Ik werk eraan in mijn vrije tijd (met de hulp "
-"van een fijn vrijwilligersteam van testers en vertalers) en ik geef het vrij "
-"als gratis software.<p>Als u DCP-o-matic nuttig vindt, overweeg dan een "
-"donatie aan het project. Financiële ondersteuning zal me helpen om meer "
-"tijd te besteden aan de ontwikkeling van DCP-o-matic en het beter te maken!"
-"<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?amount=40\">Ga naar "
-"Paypal om €40 te doneren</a><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=20\">Ga naar Paypal om €20 te doneren</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=10\">Ga naar Paypal om €10 "
-"te doneren</a></ul><p>Dank u wel!"
-
-#: src/lib/hints.cc:167
+#: src/lib/analytics.cc:66
+msgid ""
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
+msgstr ""
+"<h2>U heeft %1 DCP's gemaakt met %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hallo. Ik ben Carl en ik ben de "
+"ontwikkelaar van %3. Ik werk eraan in mijn vrije tijd (met de hulp van een "
+"fijn vrijwilligersteam van testers en vertalers) en ik geef het vrij als "
+"gratis software.<p>Als u %4 nuttig vindt, overweeg dan een donatie aan het "
+"project. Financiële ondersteuning zal me helpen om meer tijd te besteden "
+"aan de ontwikkeling van %5 en het beter te maken!<p><ul><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=40\">Ga naar Paypal om €40 "
+"te doneren</a><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=20\">Ga naar Paypal om €20 te doneren</a><li><a href=\"https://"
+"dcpomatic.com/donate_amount?amount=10\">Ga naar Paypal om €10 te doneren</"
+"a></ul><p>Dank u wel!</font>"
+
+#: src/lib/hints.cc:178
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Sommige projectoren hebben afspeelproblemen met DCP's met een hele hoge bit-"
-"rate. Het is verstandig om de JPEG2000-bandbreedte tot ongeveer 200 Mbit/s "
+"rate. Het is verstandig om de video-bandbreedte tot ongeveer 200 Mbit/s "
"terug te brengen; dit heeft vrijwel zeker geen zichtbaar effect op de "
"beeldkwaliteit."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"Een ondertitel of closed caption bestand in dit project is gemarkeerd met de "
-"taal '%1', die DCP-o-matic niet herkent. De taal van het bestand is gewist."
+"taal '%1', die %2 niet herkent. De taal van het bestand is gewist."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid Log-Gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Advertisement"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -274,7 +324,7 @@ msgstr ""
"balken zullen komen. Mogelijk wilt u de DCP-container op Scope (2,39:1) "
"instellen bij de DCP-instellingen."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -285,7 +335,7 @@ msgstr ""
"balken zullen komen. U kunt ervoor kiezen om de DCP-container op dezelfde "
"beeldverhouding als uw content in te stellen."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Er is een fout opgetreden bij de verwerking van bestand %1."
@@ -293,30 +343,30 @@ msgstr "Er is een fout opgetreden bij de verwerking van bestand %1."
msgid "Analysing audio"
msgstr "Analyseren audio"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Analyseren ondertitels"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
"Ten minste één marker komt na het einde van het project en wordt genegeerd."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Ten minste één van uw closed caption bestanden is groter dan "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
"Ten minste één XML-gedeelte van uw closed caption bestanden is groter dan "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Ten minste één van uw ondertitelbestanden is groter dan "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -324,7 +374,7 @@ msgstr ""
"Ten minste één van uw ondertitel-regels heeft meer dan 52 tekens. Het wordt "
"aanbevolen om niet meer dan 52 tekens in een regel te gebruiken."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -332,7 +382,7 @@ msgstr ""
"Ten minste één van uw ondertitel-regels heeft meer dan 79 tekens. U moet "
"elke regel maximaal 79 tekens lang maken."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -340,7 +390,7 @@ msgstr ""
"Ten minste één van uw ondertitels heeft meer dan 3 regels. Het is "
"verstandig om niet meer dan 3 regels te gebruiken."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -348,7 +398,7 @@ msgstr ""
"Ten minste één van uw ondertitels duurt minder dan 15 frames. Het is "
"verstandig om elke ondertitel minstens 15 frames lang te maken."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -356,7 +406,7 @@ msgstr ""
"Ten minste één van uw ondertitels begint minder dan 2 frames na de vorige. "
"Het is verstandig om minstens 2 frames tussen ondertitels te laten."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -379,72 +429,72 @@ msgstr "Audio wordt geresampled naar %1Hz"
msgid "Audio will not be resampled"
msgstr "Audio wordt niet geresampled"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 uitgebreid gamut"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 constante luminantie"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 voor een 10-bits systeem"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 voor een 12-bits systeem"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 niet-constante luminantie"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits per pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Bob Weaver Deinterlacing Filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Geannuleerd"
@@ -456,11 +506,11 @@ msgstr "Mag geen slash bevatten"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Kan pixelformaat %1 niet verwerken tijdens %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Kan geen KDM maken omdat dit project niet is versleuteld."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Midden (C)"
@@ -468,7 +518,7 @@ msgstr "Midden (C)"
msgid "Channels"
msgstr "Kanalen"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "Controleer hun nieuwe instellingen en probeer het opnieuw."
@@ -476,27 +526,31 @@ msgstr "Controleer hun nieuwe instellingen en probeer het opnieuw."
msgid "Checking content"
msgstr "Controleren content"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Controleren bestaande beelddata"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Chroma-afgeleide constante luminantie"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Chroma-afgeleide niet-constante luminantie"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr "Clip"
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Closed captions"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+msgid "Closed subtitles"
+msgstr "Gesloten ondertitels"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Primaire kleuren"
@@ -510,17 +564,17 @@ msgstr "Primaire kleuren"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Kleurbereik"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Kleuroverdrachtskarakteristiek"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Kleurruimte"
@@ -528,15 +582,15 @@ msgstr "Kleurruimte"
msgid "Combine DCPs"
msgstr "Combineer DCP's"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Berekenen samenvatting"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Berekenen samenvattingen"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "Gefeliciteerd!"
@@ -552,25 +606,25 @@ msgstr "Content bit depth"
msgid "Content sample rate"
msgstr "Content sample rate"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
"Samen te voegen content moet allemaal wel audio, of allemaal geen audio "
"hebben"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Samen te voegen content moet allemaal wel ondertitels/captions, of allemaal "
"geen ondertitels/captions hebben"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
"Samen te voegen content moet allemaal wel video, of allemaal geen video "
"hebben"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -583,13 +637,13 @@ msgstr ""
"Video van samen te voegen content moet allemaal wel, of allemaal niet "
"gebruikt worden."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"Samen te voegen content moeten dezelfde 'inbranden ondertitels'-instelling "
"hebben."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Samen te voegen content moet dezelfde 'gebruik ondertitels'-instelling "
@@ -633,7 +687,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr "Samen te voegen content moet dezelfde fade-instelling hebben."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr ""
"Samen te voegen content moet dezelfde ondertitel omlijnings-breedte hebben."
@@ -642,35 +696,35 @@ msgstr ""
msgid "Content to be joined must have the same picture size."
msgstr "Samen te voegen content moet dezelfde beeldgrootte hebben."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
"Samen te voegen content moet dezelfde ondertitel X-verschuiving hebben."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Samen te voegen content moet dezelfde ondertitel X-schaling hebben."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
"Samen te voegen content moet dezelfde ondertitel Y-verschuiving hebben."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Samen te voegen content moet dezelfde ondertitel Y-schaling hebben."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
"Samen te voegen content moet dezelfde ondertitel fade-instelling hebben."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"Samen te voegen content moet dezelfde regelafstand voor ondertitels hebben."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Samen te voegen content moet dezelfde video frame rate hebben"
@@ -678,23 +732,23 @@ msgstr "Samen te voegen content moet dezelfde video frame rate hebben"
msgid "Content to be joined must have the same video frame type."
msgstr "Samen te voegen content moet hetzelfde video frame type hebben."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "Samen te voegen content moet dezelfde DCP track gebruiken."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Samen te voegen content moet dezelfde fonts gebruiken."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Samen te voegen content moet dezelfde ondertitel-stream gebruiken."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "Samen te voegen content moet dezelfde tekst-taal hebben."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Content-video is %1x%2"
@@ -702,14 +756,6 @@ msgstr "Content-video is %1x%2"
msgid "Copy DCP to TMS"
msgstr "Kopieer DCP naar TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Kopiëren oud video-bestand"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Kopiëren video-bestand naar DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Kan geen verbinding maken met server %1 (%2)"
@@ -726,19 +772,19 @@ msgstr "Kan JPEG2000-bestand %1 niet decoderen (%2)"
msgid "Could not decode image (%1)"
msgstr "Kan beeld niet decoderen (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
msgid "Could not find file %1 in ZIP file"
msgstr "Kan bestand %1 niet in ZIP-bestand vinden"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Kan niet luisteren naar externe encodeer-servers. Misschien draait er al "
-"een andere instantie van DCP-o-matic."
+"een andere instantie van %1."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Kan %1 niet openen"
@@ -746,19 +792,19 @@ msgstr "Kan %1 niet openen"
msgid "Could not open %1 to send"
msgstr "Kan %1 niet openen om te verzenden"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Kan gedownload ZIP-bestand niet openen"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Kan gedownload ZIP-bestand niet openen (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Kan bestand niet openen om te schrijven"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "Kan output-bestand %1 niet openen (%2)"
@@ -774,19 +820,19 @@ msgstr "Kan overdracht niet starten"
msgid "Could not write to remote file (%1)"
msgstr "Kan extern bestand niet schrijven (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX primair (DBP)"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX secundair (DBS)"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -798,7 +844,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML ondertitels"
@@ -815,52 +861,40 @@ msgstr "DCP zal afspelen met %.1f%% van de content-snelheid.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP zal om het andere frame van de content gebruiken.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
-msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
-msgstr ""
-"DCP-o-matic kan het bestand %1 (%2) niet openen. Misschien bestaat het niet "
-"of wordt het formaat niet ondersteund."
-
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic moest uw instellingen voor refereren aan DCP's als OV wijzigen. "
-"Controleer a.u.b. deze instellingen om er zeker van te zijn dat ze zijn "
-"zoals u wilt."
+"DCP-o-matic moest uw container instellen op 1920x1080, omdat dit de enige is "
+"die kan worden gebruikt met MPEG2-codering."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic moest uw instellingen wijzigen zodat de frame rate van de film "
-"hetzelfde is als die van uw Atmos-content."
+"DCP-o-matic moest uw film op 2D instellen, omdat 3D nog niet wordt "
+"ondersteund met MPEG2-codering."
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic ondersteunt het filter `%1' niet langer, daarom is het "
-"uitgeschakeld."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "DCP-o-matic notificatie"
+"DCP-o-matic heeft uw container op DCI Flat ingesteld, omdat deze voorheen "
+"1920x1080 was. Dit is geen standaardverhouding bij JPEG2000-codering."
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 of AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Deinterlacing"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
msgid ""
"Dear Projectionist\n"
"\n"
@@ -872,7 +906,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Geachte Operateur,\n"
"\n"
@@ -884,13 +918,17 @@ msgstr ""
"De KDM's zijn geldig van $START_TIME tot $END_TIME.\n"
"\n"
"Met vriendelijke groet,\n"
-"DCP-o-matic"
+"%1"
+
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr "Schijf vol bij het schrijven van %1"
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 of CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Download mislukt (%1 fout %2)"
@@ -914,19 +952,19 @@ msgstr "E-mail KDM's voor %2"
msgid "Email notification"
msgstr "E-mail notificatie"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "E-mail probleemrapport"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "E-mail probleemrapport voor %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Encoderen"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Episode"
@@ -934,19 +972,19 @@ msgstr "Episode"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Fout in ondertitelbestand: %1 gelezen terwijl %2 verwacht werd"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Fout: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr "Event"
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
msgid "Examining audio"
msgstr "Onderzoeken audio"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Onderzoeken audio, ondertitels en closed captions"
@@ -958,15 +996,15 @@ msgstr "Onderzoeken content"
msgid "Examining subtitles"
msgstr "Onderzoeken ondertitels"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Onderzoeken ondertitels en closed captions"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Uitpakken"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -974,51 +1012,51 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Authenticatiefout met server (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Encoderen van de DCP mislukt."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Verzenden e-mail mislukt"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Feature"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Bestandsnaam"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr "Bestandsnamen"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "Bestanden zijn gewijzigd sinds ze aan het project zijn toegevoegd."
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Bepalen lengte"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Frame rate"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Vrijdag"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Full"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Full (0-%1)"
@@ -1042,35 +1080,35 @@ msgstr "Volledige lengte in video frames bij DCP-snelheid"
msgid "Full length in video frames at content rate"
msgstr "Volledige lengte in video frames bij content-snelheid"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradient debander"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Slechthorenden (HI)"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Hoge kwaliteit 3D-ruisonderdrukking"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr "Highlights"
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Spiegel horizontaal"
@@ -1078,21 +1116,21 @@ msgstr "Spiegel horizontaal"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB of sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
"Als u een frame rate van 25 fps gebruikt, moet u de DCP-standaard wijzigen "
"in SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
@@ -1102,19 +1140,19 @@ msgstr ""
"bepaalde reden heeft om Interop te gebruiken. U wordt geadviseerd om de DCP-"
"standaard op SMPTE in te stellen in het \"DCP\"-tabblad."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
"In deze versie zijn er wijzigingen in de manier waarop ondertitels worden "
-"geplaatst. De positionering zou nu correcter moeten zijn, met betrekking tot "
-"de standaarden, maar u moet alle ondertitels in uw project controleren om er "
-"zeker van te zijn dat ze worden geplaatst waar u ze wilt hebben."
+"geplaatst. De positionering zou nu correcter moeten zijn, met betrekking "
+"tot de standaarden, maar u moet alle ondertitels in uw project controleren "
+"om er zeker van te zijn dat ze worden geplaatst waar u ze wilt hebben."
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1122,72 +1160,72 @@ msgstr ""
"Het is raadzaam om uw eerste ondertitel minstens 4 seconden na het begin van "
"de DCP te plaatsen om er zeker van te zijn dat deze wordt gezien."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
-msgstr "Het is onbekend hoe deze fout is ontstaan."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+msgid "It is not known what caused this error. %1"
+msgstr "Het is onbekend hoe deze fout is ontstaan. %1"
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "KDM-levering: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Kernel deinterlacer"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Links (L)"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Links midden (Lc)"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Achter surround links (BsL)"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Links surround (Ls)"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Lengte"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Subwoofer (Lfe)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limited"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
msgid "Limited / video (%1-%2)"
msgstr "Limited / video (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Lineair"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logaritmisch (100: 1 bereik)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logaritmisch (316: 1 bereik)"
@@ -1195,7 +1233,7 @@ msgstr "Logaritmisch (316: 1 bereik)"
msgid "Lost communication between main and writer processes"
msgstr "Verbroken communicatie tussen hoofd- en schrijfprocessen"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1203,24 +1241,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Midden-zijkant decoder"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Diversen"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Ongelijke aantallen audio-kanalen in DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Ongelijke audio sample rates in DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Ongelijke frame rates in DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Ongelijke beeldgroottes in DCP"
@@ -1228,19 +1266,19 @@ msgstr "Ongelijke beeldgroottes in DCP"
msgid "Missing required setting %1"
msgstr "Ontbrekende verplichte instelling %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Maandag"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Motion compensating deinterlacer"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "Geen CPL's gevonden in DCP."
@@ -1256,80 +1294,91 @@ msgstr ""
"Geen Uitgaande mailserver geconfigureerd in het \"E-mail\"-tabblad bij "
"Voorkeuren"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Geen geldige beeldbestanden gevonden in de map."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Ruisonderdrukking"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Geen"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr "OK"
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (%1 bezig, van %2 tot %3)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (%1 bezig)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Alleen bij het eerste deel van samengevoegde content kan het begin "
"bijgeknipt worden."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
"Alleen bij het laatste deel van samengevoegde content kan het einde "
"bijgeknipt worden."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+msgid "Open captions"
+msgstr "Open captions"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Open ondertitels"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-"Open het project in DCP-o-matic, controleer de instellingen en bewaar "
-"voordat u het opnieuw probeert."
+"Open het project in %1, controleer de instellingen en bewaar voordat u het "
+"opnieuw probeert."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Oriëntatie"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Onvoldoende geheugen"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Overcomplete wavelet denoiser"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Rapporteer dit probleem a.u.b. via \"Help -> Meld een probleem...\" of per e-"
+"mail naar %1"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Policy"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr "Premultiply alpha channel"
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Voorbereid voor video frame rate"
@@ -1337,93 +1386,93 @@ msgstr "Voorbereid voor video frame rate"
msgid "Programming error at %1:%2 %3"
msgstr "Programmeerfout op %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promo"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Public Service Announcement"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Rating"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Rechts (R)"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Rechts midden (Rc)"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Achter surround rechts (Bsr)"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Rechts surround (Rs)"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Roteer 90 graden tegen de klok in"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Roteer 90 graden met de klok mee"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1434,23 +1483,23 @@ msgstr ""
"frame van de bewegende aftiteling (FFMC: first frame of moving credits). U "
"moet deze markers toevoegen met de knop 'Markers' in het \"DCP\"-tabblad."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 voor 10-, 12-, 14- en 16-bits systemen"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1463,27 +1512,27 @@ msgstr "SSH-fout [%1]"
msgid "SSH error [%1] (%2)"
msgstr "SSH-fout [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Zaterdag"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Scannen beeldbestanden"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Verzenden e-mail"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Short"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Sign"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Grootte"
@@ -1491,12 +1540,12 @@ msgstr "Grootte"
msgid "Some audio will be resampled to %1Hz"
msgstr "Een deel van de audio wordt geresampled naar %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
"Sommige bestanden zijn gewijzigd sinds ze aan het project zijn toegevoegd."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1519,7 +1568,7 @@ msgstr ""
"Deze bestanden worden nu opnieuw onderzocht, dus het kan nodig zijn om hun "
"instellingen te controleren."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
@@ -1527,7 +1576,7 @@ msgstr ""
"Een deel van uw closed captions heeft meer dan %1 regels, dus worden ze "
"afgekapt."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1549,11 +1598,11 @@ msgstr "Een deel van uw content heeft een KDM nodig"
msgid "Some of your content needs an OV"
msgstr "Een deel van uw content heeft een OV nodig"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr "Stereo card"
@@ -1565,19 +1614,19 @@ msgstr "Stereo naar 5.1 up-mixer A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Stereo naar 5.1 up-mixer B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Zondag"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Telecine-filter"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1597,37 +1646,36 @@ msgstr "De certificaat-keten voor ondertekening is ongeldig"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "De certificaat-keten voor ondertekening is ongeldig (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-"De certificaat-keten die DCP-o-matic gebruikt voor het ondertekenen van "
-"DCP's en KDM's bevat een kleine fout die ervoor zorgt dat DCP's als "
-"incorrect worden gevalideerd op sommige systemen. U wordt geadviseerd om "
-"deze certificaat-keten opnieuw aan te maken door op de knop \"Maak "
-"certificaten en sleutel opnieuw...\" in het \"Sleutels\"-tabblad bij "
-"Voorkeuren te klikken."
+"De certificaat-keten die %1 gebruikt voor het ondertekenen van DCP's en "
+"KDM's bevat een kleine fout die ervoor zorgt dat DCP's als incorrect worden "
+"gevalideerd op sommige systemen. U wordt geadviseerd om deze certificaat-"
+"keten opnieuw aan te maken door op de knop \"Maak certificaten en sleutel "
+"opnieuw...\" in het \"Sleutels\"-tabblad bij Voorkeuren te klikken."
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-"De certificaat-keten die DCP-o-matic gebruikt voor het ondertekenen van "
-"DCP's en KDM's heeft een te lange geldigheidsduur. Dit zal op sommige "
-"systemen problemen veroorzaken bij het afspelen van DCP's. U wordt "
-"geadviseerd om deze certificaat-keten opnieuw aan te maken door op de knop "
-"\"Maak certificaten en sleutel opnieuw...\" in het \"Sleutels\"-tabblad bij "
+"De certificaat-keten die %1 gebruikt voor het ondertekenen van DCP's en "
+"KDM's heeft een te lange geldigheidsduur. Dit zal op sommige systemen "
+"problemen veroorzaken bij het afspelen van DCP's. U wordt geadviseerd om "
+"deze certificaat-keten opnieuw aan te maken door op de knop \"Maak "
+"certificaten en sleutel opnieuw...\" in het \"Sleutels\"-tabblad bij "
"Voorkeuren te klikken."
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1637,7 +1685,7 @@ msgstr ""
"bevatten. Stel het a.u.b. in op 2D. U kunt nog steeds een 3D-DCP van deze "
"content maken door in het \"DCP/Video\"-tabblad de 3D-optie aan te vinken."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1645,23 +1693,44 @@ msgstr ""
"De harddisk waarop de film is opgeslagen heeft te weinig vrije ruimte. Maak "
"meer ruimte vrij en probeer het opnieuw."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Het bestand %1 is naar %2 milliseconden eerder verplaatst."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Het bestand %1 is naar %2 milliseconden later verplaatst."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Van het bestand %1 is %2 milliseconden minder weggeknipt."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Van het bestand %1 is %2 milliseconden meer weggeknipt."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+"De overgrote meerderheid van bioscopen in Europa, Australazië en Noord-"
+"Amerika verwacht DCP's die zijn gecodeerd met JPEG2000 in plaats van MPEG2. "
+"Controleer of de bioscoop echt een ouderwetse MPEG2 DCP wil."
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+"De verticale verschuiving voor sommige ondertitels werkt nu in de "
+"tegenovergestelde richting van hoe het voorheen was. Controleer alle "
+"ondertitels in uw project om er zeker van te zijn dat ze op de gewenste "
+"plaats staan."
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1676,11 +1745,11 @@ msgstr ""
"op voorwaarde dat uw doelprojectiesystemen de door u gekozen DCP frame rate "
"ondersteunen."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "Deze DCP heeft geen video"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1690,37 +1759,33 @@ msgstr ""
"threads te verminderen in het \"Algemeen\"-tabblad bij Voorkeuren als u een "
"32-bits operating system draait."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
-msgstr ""
-"Deze KDM is gemaakt voor DCP-o-matic maar niet voor het leaf-certificaat."
-
#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
-msgstr ""
-"Deze KDM is niet gemaakt voor het ontsleutelings-certificaat van DCP-o-matic."
+msgid "This KDM was made for %1 but not for its leaf certificate."
+msgstr "Deze KDM is gemaakt voor %1 maar niet voor het leaf-certificaat."
+
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
+msgstr "Deze KDM is niet gemaakt voor het ontsleutelings-certificaat van %1."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
-"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van DCP-o-"
-"matic gebruikt en probeert te veel encoderings-threads te gebruiken. "
-"Verminder a.u.b. het 'Aantal threads dat DCP-o-matic moet gebruiken' in het "
-"\"Algemeen\"-tabblad bij Voorkeuren en probeer het opnieuw."
+"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van %1 "
+"gebruikt en probeert te veel encoderings-threads te gebruiken. Verminder a."
+"u.b. het 'Aantal threads dat %2 moet gebruiken' in het \"Algemeen\"-tabblad "
+"bij Voorkeuren en probeer het opnieuw."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
-"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van DCP-o-"
-"matic gebruikt. Installeer a.u.b. de 64-bits versie van DCP-o-matic en "
-"probeer het opnieuw."
+"Deze fout is waarschijnlijk opgetreden omdat u de 32-bits versie van %1 "
+"gebruikt. Installeer a.u.b. de 64-bits versie van %2 en probeer het opnieuw."
#: src/lib/exceptions.cc:113
msgid ""
@@ -1731,45 +1796,45 @@ msgstr ""
"met de rechtermuisknop op de content te klikken en \"Voeg KDM toe\" te "
"kiezen."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
-"Deze film is aangemaakt met een nieuwere versie van DCP-o-matic en kan niet "
-"met deze versie geladen worden. Sorry!"
+"Deze film is aangemaakt met een nieuwere versie van %1 en kan niet met deze "
+"versie geladen worden. Sorry!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
-"Deze film is aangemaakt met een oudere versie van DCP-o-matic en kan niet "
-"met deze versie geladen worden. U moet een nieuwe film aanmaken en de "
-"content opnieuw toevoegen en configureren. Sorry!"
+"Deze film is aangemaakt met een oudere versie van %1 en kan niet met deze "
+"versie geladen worden. U moet een nieuwe film aanmaken en de content "
+"opnieuw toevoegen en configureren. Sorry!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Donderdag"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Timed text"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Transcoderen %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitional"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Dinsdag"
@@ -1777,7 +1842,7 @@ msgstr "Dinsdag"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Onverwachte inhoud ZIP-bestand"
@@ -1785,35 +1850,35 @@ msgstr "Onverwachte inhoud ZIP-bestand"
msgid "Unexpected image type received by server"
msgstr "Onverwacht beeldtype ontvangen door server"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Onbekend"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Onbekende fout"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
-msgstr "Niet herkend audio sample-formaat (%1)"
+msgstr "Niet-herkend audio sample-formaat (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Onscherpheidsmasker en Gaussische onscherpte"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Niet gespecificeerd"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Zonder titel"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Ongebruikt"
@@ -1825,7 +1890,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1833,11 +1898,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Controleer DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Spiegel verticaal"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Slechtzienden (VI)"
@@ -1845,23 +1910,23 @@ msgstr "Slechtzienden (VI)"
msgid "Waiting"
msgstr "Wachten"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Weave-filter"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Woensdag"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
@@ -1871,7 +1936,7 @@ msgstr ""
"wordt niet door alle projectoren ondersteund. U wordt geadviseerd om de DCP "
"frame rate te wijzigen in %2 fps."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1881,7 +1946,7 @@ msgstr ""
"wordt niet door alle projectoren ondersteund. U kunt overwegen om de DCP "
"frame rate te wijzigen in %2 fps."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1890,7 +1955,18 @@ msgstr ""
"wordt niet door alle projectoren ondersteund. Houd er rekening mee dat u "
"compatibiliteitsproblemen kunt krijgen."
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
+msgid ""
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
+msgstr ""
+"U gebruikt de stereo naar 5.1 up-mixer van %1. Deze is experimenteel en kan "
+"leiden tot audio van slechte kwaliteit. Als u doorgaat, kunt u beter in een "
+"bioscoop naar de resulterende DCP luisteren om er zeker van te zijn dat het "
+"goed klinkt."
+
+#: src/lib/hints.cc:324
msgid ""
"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
@@ -1898,18 +1974,7 @@ msgstr ""
"U gebruikt 3D-content, maar uw DCP is op 2D ingesteld. Stel de DCP in op 3D "
"als u hem wilt afspelen op een 3D-systeem (bv. Real-D, MasterImage etc.)"
-#: src/lib/hints.cc:120
-msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
-msgstr ""
-"U gebruikt de stereo naar 5.1 up-mixer van DCP-o-matic. Deze is "
-"experimenteel en kan leiden tot audio van slechte kwaliteit. Als u "
-"doorgaat, kunt u beter in een bioscoop naar de resulterende DCP luisteren om "
-"er zeker van te zijn dat het goed klinkt."
-
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1917,7 +1982,7 @@ msgstr ""
"U heeft %1 bestanden die VOB-bestanden van een DVD lijken te zijn. U kunt "
"deze beter samenvoegen om van soepele aansluitingen verzekerd te zijn."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1925,7 +1990,7 @@ msgstr ""
"U heeft meer dan één stuk Atmos-content en ze hebben niet dezelfde frame "
"rate. U moet een deel van de Atmos-content verwijderen."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1933,7 +1998,7 @@ msgstr ""
"U heeft overlappende closed captions. Die zijn niet toegestaan in Interop "
"DCP's. Verander uw DCP-standaard in SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1945,7 +2010,7 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "U moet content aan de DCP toevoegen voor hij gemaakt kan worden"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
@@ -1956,19 +2021,19 @@ msgstr ""
"DCP controleren. Om dit te voorkomen, stelt u het aantal audio-kanalen van "
"de DCP in op 8 of 16."
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"Uw DCP heeft minder dan 6 audio-kanalen. Dit kan problemen geven met "
"sommige installaties. Mogelijk wilt u de DCP instellen op 6 kanalen. Het "
-"maakt niet uit of uw content minder kanalen heeft, DCP-o-matic vult de extra "
-"kanalen met stilte."
+"maakt niet uit of uw content minder kanalen heeft, %1 vult de extra kanalen "
+"met stilte."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1977,7 +2042,7 @@ msgstr ""
"problemen geven met sommige projectoren. Gebruik, indien mogelijk, Flat of "
"Scope voor de container-beeldverhouding van de DCP."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1985,35 +2050,35 @@ msgstr ""
"Uw audio-niveau is zeer hoog (op %1). U kunt beter de versterking van uw "
"audio-content verminderen."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
-"Uw project bevat video-content die niet was uitgelijnd op een framegrens."
+"Uw project bevat video-content die niet was uitgelijnd op een frame-grens."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr ""
"Uw project bevat video-content waarvan het bijknippen niet was uitgelijnd op "
-"een framegrens."
+"een frame-grens."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[bewegende beelden]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[stilstaand beeld]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[ondertitels]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_reel%1"
@@ -2045,11 +2110,11 @@ msgstr "kopiëren van %1"
msgid "could not find stream information"
msgstr "kan geen stream-informatie vinden"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "kan Atmos asset niet naar de DCP verplaatsen (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "kan audio asset niet naar de DCP verplaatsen (%1)"
@@ -2077,7 +2142,7 @@ msgstr "kan niet schrijven naar bestand %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "fout tijdens async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "fout tijdens async_read (%1)"
@@ -2085,21 +2150,21 @@ msgstr "fout tijdens async_read (%1)"
msgid "error during async_write (%1)"
msgstr "fout tijdens async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "frames per seconde"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "hij heeft een andere frame rate dan de film."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
@@ -2108,7 +2173,7 @@ msgstr ""
"in op %1 kanalen."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
@@ -2116,35 +2181,42 @@ msgstr ""
"captions moeten opnieuw geschreven worden."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "hij is 2K en de film is 4k."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "hij is 4K en de film is 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "hij is Interop en de film is SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "hij is SMPTE en de film is Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
-msgstr "hij overlapt met andere audio-content; verwijder deze andere content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+msgid "it overlaps other audio content."
+msgstr "hij overlapt met andere audio-content."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+msgid "it overlaps other text content."
+msgstr "hij overlapt met andere tekst-content."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
-msgstr "hij overlapt met andere video-content; verwijder deze andere content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+msgid "it overlaps other video content."
+msgstr "hij overlapt met andere video-content."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2153,16 +2225,16 @@ msgstr ""
"'splits per video-content'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "zijn video-beeldgrootte verschilt van die in de film."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "verplaatsen"
@@ -2171,7 +2243,7 @@ msgid "name"
msgstr "naam"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2180,7 +2252,7 @@ msgstr ""
"moet opnieuw geschreven worden."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
@@ -2189,30 +2261,39 @@ msgstr ""
"moet opnieuw geschreven worden."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "stilstaand beeld"
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr "ze overlappen met andere tekst-content; verwijder deze andere content."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "onbekend"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "video frames"
+#~ msgid "Copying old video file"
+#~ msgstr "Kopiëren oud video-bestand"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Kopiëren video-bestand naar DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "DCP-o-matic notificatie"
+
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr ""
+#~ "ze overlappen met andere tekst-content; verwijder deze andere content."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "hij heeft niet closed captions in alle reels."
@@ -2223,13 +2304,6 @@ msgstr "video frames"
#~ msgstr "hij heeft niet audio in alle reels."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Rapporteer dit probleem a.u.b. via \"Help -> Meld een probleem...\" of "
-#~ "per e-mail naar carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "Uw standaardcontainer is niet geldig en is gewijzigd in Flat (1,85:1)"
diff --git a/src/lib/po/pl_PL.po b/src/lib/po/pl_PL.po
index dffec8c24..d4f09a01e 100644
--- a/src/lib/po/pl_PL.po
+++ b/src/lib/po/pl_PL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2022-05-10 16:47+0200\n"
"Last-Translator: Michał Tomaszewski <goku1933@gmail.com>\n"
"Language-Team: Polish <http://translations.dcpomatic.com/projects/dcpomatic/"
@@ -20,7 +20,7 @@ msgstr ""
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Poedit 3.0.1\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -29,7 +29,7 @@ msgstr ""
"\n"
"Liczba kl/s pliku video %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -37,7 +37,7 @@ msgstr ""
"\n"
"Wykadrowany do %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -46,7 +46,7 @@ msgstr ""
"\n"
"Proporcje obrazu %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -54,7 +54,7 @@ msgstr ""
"\n"
"Dodane czarne pasy, aby dopasować do formatu %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -62,18 +62,18 @@ msgstr ""
"\n"
"Przeskalowany do %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " w %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -97,39 +97,89 @@ msgstr ""
"Długość: $LENGTH\n"
"Rozmiar: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [dźwięk]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [obraz]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic nie mógł otworzyć pliku %1 (%2). Plik nie istnieje lub jest w "
+"niewspieranym formacie."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"Program DCP-o-matic musiał zmienić ustawienia Projektu, żeby DCP mógł zostać "
+"oznaczony jako OV. Proszę sprawdzić, czy ustawienia są zgodne z "
+"oczekiwanymi."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"Program DCP-o-matic musiał zmienić ustawienia Projektu, żeby liczba klatek/s "
+"Projektu była taka sama jak w pliku Atmos."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic nie wspiera już filtru `%1', więc został on wyłączony."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Powiadomienie email"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 klatki"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", proporcje piksela %.2f:1"
@@ -166,11 +216,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Pełna klatka)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -183,11 +233,11 @@ msgstr "2.35 (Scope kinowy)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "Odszumianie 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -197,32 +247,33 @@ msgstr ""
"wiesz, czy paczka DCP zostanie otworzona na źródłowym projektorze, ustaw "
"rozdzielczość na 2K w zakładce \"DCP→Wideo\"."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 kl/s"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 pozostało; koniec o %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>Stworzyłeś już %1 paczek DCP dzięki DCP-o-matic!</h2><img width=\"20%%\" "
"src=\"memory:me.jpg\" align=\"center\"><p>Witaj, nazywam siÄ™ Carl i jestem "
@@ -237,35 +288,37 @@ msgstr ""
"dcpomatic.com/donate_mount?amount=10\">Przejdź do PayPal i wpłać 10 EUR</a></"
"ul><p>Dziękuję!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Niektóre stare serwery mogą mieć problem z odtwarzaniem DCP o bardzo wysokim "
"bitracie. Dobra rada to zmniejszenie go do granicy ok. 200Mbit/s, zwłaszcza, "
"że nie powinno wpłynąć to na jakość obrazu."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"Plik napisów lub plik napisów kodowanych w tym Projekcie ma oznaczenie "
"języka '%1', którego DCP-o-matic nie rozpoznaje. Oznaczenie języka zostało "
"wyczyszczone."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrydowa log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Reklama"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -277,7 +330,7 @@ msgstr ""
"skompensować różnice formatów. Być może lepiej ustawić kontener DCP na "
"Scope (2.39:1) w zakładce \"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -288,7 +341,7 @@ msgstr ""
"pionowych pasów, by skompensować różnice formatów. Być może lepiej ustawić "
"kontener DCP na Flat (1.85:1) w zakładce \"DCP\"."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Wystąpił błąd podczas przetwarzania pliku %1."
@@ -296,31 +349,31 @@ msgstr "Wystąpił błąd podczas przetwarzania pliku %1."
msgid "Analysing audio"
msgstr "Analizuję dźwięk"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "AnalizujÄ™ napisy"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
"Znaczniki, które pojawiają się za czasem końcowym Projektu zostaną "
"zignorowane."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Co najmniej jeden z plików napisów kodowanych jest większy niż "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
"Co najmniej jedna część pliku XML z napisami kodowanymi jest większa niż "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Co najmniej jeden z plików z napisami jest większy niż "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -328,7 +381,7 @@ msgstr ""
"W napisach znajdują się linie, które mają powyżej 52 znaków. Zaleca się, "
"aby żadna z linii nie przekraczała 52 znaków."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -336,7 +389,7 @@ msgstr ""
"W napisach znajdują się linie, które mają powyżej 79 znaków. Żadna linia "
"nie powinna przekraczać 79 znaków."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -344,7 +397,7 @@ msgstr ""
"W pliku znajdują się napisy, które mają ponad 3 linie. Zaleca się użycie "
"maksymalnie 3 linii."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -353,7 +406,7 @@ msgstr ""
"obrazu. Zaleca się, aby każdy napis był widoczny co najmniej przez 15 "
"klatek obrazu."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -361,7 +414,7 @@ msgstr ""
"Niektóre napisy w pliku mają odstęp czasowy poniżej 2 klatek obrazu. Zaleca "
"się, aby odstęp między napisami wynosił co najmniej 2 klatki obrazu."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
#, fuzzy
msgid ""
"At least one piece of subtitle content has no specified language. It is "
@@ -385,72 +438,72 @@ msgstr "Próbkowanie dźwięku zostanie zmienione na %1Hz"
msgid "Audio will not be resampled"
msgstr "Próbkowanie dźwięku nie zostanie zmienione"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 rozszerzony gamut"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 stała luminancja"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 dla systemów 10-bitowych"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 dla systemów 12-bitowych"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 zmienna luminancja"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bitów na piksel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Filtr usuwania przeplotu Boba Weavera"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Anulowane"
@@ -462,11 +515,11 @@ msgstr "Nie może zawierać ukośników"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Nie można przetworzyć modelu barw %1 podczas %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Nie mogę stworzyć KDM, ponieważ ten Projekt nie jest zaszyfrowany."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Centralny"
@@ -474,7 +527,7 @@ msgstr "Centralny"
msgid "Channels"
msgstr "Kanały dźwiękowe"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "Sprawdź nowe ustawienia, a następnie spróbuj ponownie."
@@ -483,27 +536,32 @@ msgstr "Sprawdź nowe ustawienia, a następnie spróbuj ponownie."
msgid "Checking content"
msgstr "Szukam zmian w materiale"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Sprawdzanie danych obrazu"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Stała luminancja ze składową różnicową chrominancji"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Zmienna luminancja ze składową różnicową chrominancji"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Napisy kodowane"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Napisy otwarte"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Kolory podstawowe"
@@ -517,17 +575,17 @@ msgstr "Kolory podstawowe"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Zakres barw"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Specyfika przenoszenia barw"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Przestrzeń kolorów"
@@ -535,15 +593,15 @@ msgstr "Przestrzeń kolorów"
msgid "Combine DCPs"
msgstr "Połącz paczki DCP"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Obliczanie danych"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Obliczanie danych"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "Gratulacje!"
@@ -561,19 +619,19 @@ msgstr "typ materiału"
msgid "Content sample rate"
msgstr "Częstotliwość dźwięku dodanego materiału"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "ÅÄ…czone pliki muszÄ… jednoczeÅ›nie posiadać lub nie posiadać dźwiÄ™ku"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "ÅÄ…czone pliki muszÄ… jednoczeÅ›nie posiadać lub nie posiadać napisów"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "ÅÄ…czone pliki muszÄ… jednoczeÅ›nie posiadać lub nie posiadać obrazu"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -584,12 +642,12 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "ÅÄ…czone pliki muszÄ… wykorzystywać wideo w caÅ‚oÅ›ci albo wcale."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"ÅÄ…czone pliki muszÄ… mieć takie same ustawienia w sekcji \"wypal napisy\"."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"ÅÄ…czone pliki muszÄ… mieć takie same ustawienia w sekcji \"użyj napisów\"."
@@ -628,7 +686,7 @@ msgstr "ÅÄ…czone pliki muszÄ… mieć takie same ustawienia rozdzielczoÅ›ci."
msgid "Content to be joined must have the same fades."
msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam efekt zanikania obrazu."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rozmiar obrysu zewnÄ™trznego."
@@ -636,32 +694,32 @@ msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rozmiar obrysu zewnÄ™trznego."
msgid "Content to be joined must have the same picture size."
msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rozmiar obrazu."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość X przesuniÄ™cia napisów."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość X rozmiaru napisów."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość Y przesuniÄ™cia napisów."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… wartość Y rozmiaru napisów."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
"ÅÄ…czone pliki muszÄ… mieć taki same czasy rozjaÅ›nienia/wyciemnienia napisów."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "ÅÄ…czone pliki muszÄ… mieć takie odstÄ™py miÄ™dzy liniami napisów."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… liczbÄ™ kl/s"
@@ -669,23 +727,23 @@ msgstr "ÅÄ…czone pliki muszÄ… mieć takÄ… samÄ… liczbÄ™ kl/s"
msgid "Content to be joined must have the same video frame type."
msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam rodzaj klatek."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "ÅÄ…czone pliki muszÄ… korzystać z tej samej Å›cieżki DCP."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "ÅÄ…czone pliki muszÄ… mieć takie same czcionki."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "ÅÄ…czone pliki muszÄ… używać tego samego źródÅ‚a napisów."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "ÅÄ…czone pliki muszÄ… mieć taki sam jÄ™zyk napisów."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Rozdzielczość pliku video %1x%2"
@@ -693,14 +751,6 @@ msgstr "Rozdzielczość pliku video %1x%2"
msgid "Copy DCP to TMS"
msgstr "Kopiuj DCP do TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "KopiujÄ™ plik wideo ze starej paczki"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "KopiujÄ™ plik wideo do paczki DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Nie można połączyć z serwerem %1 (%2)"
@@ -717,20 +767,21 @@ msgstr "Nie można zdekodować pliku JPEG2000 %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Nie można zdekodować pliku obrazu (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Nie udało się otworzyć pobranego archiwum ZIP"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Nie można nasłuchiwać serwerów zdalnych. Być może jest uruchomione drugie "
"okno DCP-o-matic."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Nie udało się otworzyć %1"
@@ -738,19 +789,19 @@ msgstr "Nie udało się otworzyć %1"
msgid "Could not open %1 to send"
msgstr "Nie udało się otworzyć %1 do wysłania"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Nie udało się otworzyć pobranego archiwum ZIP"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Nie udało się otworzyć pobranego archiwum ZIP (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Nie udało się otworzyć pliku do zapisu"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "Nie udało się otworzyć pliku wyjściowego %1 (%2)"
@@ -766,19 +817,19 @@ msgstr "Nie udało się rozpocząć transferu"
msgid "Could not write to remote file (%1)"
msgstr "Nie udało się zapisać do pliku zdalnego (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX główny"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX kolejny"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -790,7 +841,7 @@ msgstr "1.85 (Flat)"
msgid "DCI Scope"
msgstr "2.35 (Scope)"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "Napisy DCP XML"
@@ -807,50 +858,35 @@ msgstr "DCP będzie odtwarzany z %.1f%% prędkości.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP będzie używał co drugiej klatki materiału.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic nie mógł otworzyć pliku %1 (%2). Plik nie istnieje lub jest w "
-"niewspieranym formacie."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"Program DCP-o-matic musiał zmienić ustawienia Projektu, żeby DCP mógł zostać "
-"oznaczony jako OV. Proszę sprawdzić, czy ustawienia są zgodne z "
-"oczekiwanymi."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"Program DCP-o-matic musiał zmienić ustawienia Projektu, żeby liczba klatek/s "
-"Projektu była taka sama jak w pliku Atmos."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic nie wspiera już filtru `%1', więc został on wyłączony."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "Powiadomienie DCP-o-matic"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 lub AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Usuwanie przeplotu"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -862,7 +898,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Szanowni,\n"
"\n"
@@ -876,11 +912,15 @@ msgstr ""
"Z poważaniem,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 lub CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Pobieranie nie powiodło się (%1 błąd %2)"
@@ -905,19 +945,19 @@ msgstr "Wyślij KDMy do %2"
msgid "Email notification"
msgstr "Powiadomienie email"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Wyślij raport błędu"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Wyślij raport błędu do %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Kodowanie"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Odcinek"
@@ -925,20 +965,20 @@ msgstr "Odcinek"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Błąd w pliku napisów: jest %1, powinno być %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Błąd: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Analizowanie napisów"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Sprawdzam audio, napisy i napisy kodowane"
@@ -950,15 +990,15 @@ msgstr "Analizowanie materiału"
msgid "Examining subtitles"
msgstr "Analizowanie napisów"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Analizowanie napisów i napisów kodowanych"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Wypakowywanie"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -966,52 +1006,52 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Błąd uwierzytelniania na serwerze (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Nie udało się przygotować DCP."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Nie udało się wysłać wiadomości"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Pełnometrażowy"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Nazwa pliku"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Nazwa pliku"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "Pliki uległy zmianie od ostatniego otwarcia Projektu."
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Obliczanie czasu trwania"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Liczba kl/s"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "PiÄ…tek"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Pełny"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Pełny (0-%1)"
@@ -1036,35 +1076,35 @@ msgstr "Pełna długość klatek obrazu przy częstotliwości DCP"
msgid "Full length in video frames at content rate"
msgstr "Pełna długość klatek obrazu przy częstotliwości materiału"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Zachowaj przejścia tonalne"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "Kanał dla osób niedosłyszących"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Dla niedosłyszących"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Odszumianie 3D wysokiej jakości"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Przerzuć w poziomie"
@@ -1072,19 +1112,19 @@ msgstr "Przerzuć w poziomie"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB lub sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "Przy 25 FPS powinieneś zmienić standard paczki DCP na SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
#, fuzzy
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
@@ -1095,15 +1135,15 @@ msgstr ""
"użycie standardu Interlop jest uzasadnione. Zaleca się wybranie standardu "
"SMPTE z zakładki „DCP†dla tego Projektu."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1111,73 +1151,74 @@ msgstr ""
"Zaleca się, aby pierwszy napis pojawił się co najmniej 4 sekundy przed "
"czasem początkowym paczki DCP, by ten był widoczny."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Wystąpił nieznany błąd."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "Wysyłanie klucza: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Usuwanie przeplotu metodÄ… Kernel"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Lewy"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Lewy centralny"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Lewy tylny surround"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Lewy surround"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Długość"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (subwoofer)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Ograniczony"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Ograniczony (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Liniowy"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarytmiczny (skala 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarytmiczny (skala 316:1)"
@@ -1185,7 +1226,7 @@ msgstr "Logarytmiczny (skala 316:1)"
msgid "Lost communication between main and writer processes"
msgstr "Brak komunikacji między procesem głównym i procesem zapisu"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1193,24 +1234,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Dekoder Mid-side"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Różne"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Nieprawidłowa liczba kanałów dźwiękowych w DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Nieprawidłowe próbkowanie ścieżek dźwiękowych w DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Nieprawidłowe liczby kl/s w DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Nieprawidłowe rozmiary plików obrazu w DCP"
@@ -1218,19 +1259,19 @@ msgstr "Nieprawidłowe rozmiary plików obrazu w DCP"
msgid "Missing required setting %1"
msgstr "Brakuje wymaganych ustawień %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Poniedziałek"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Usuwanie przeplotu z kompensacjÄ… ruchu"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "Nie znaleziono plików CPL w paczce DCP."
@@ -1244,77 +1285,91 @@ msgstr "Brak konfiguracji serwera email w Preferencjach"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Brak konfiguracji serwera email w Preferencjach"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "W folderze nie znaleziono obsługiwanych plików obrazów."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Redukcja szumu"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Brak"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (czas trwania %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (czas trwania %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "Tylko pierwszy z łączonych plików może być przycięty na początku."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Tylko ostatni z łączonych plików może być przycięty na końcu."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Napisy kodowane"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Napisy otwarte"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
+#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Otwórz Projekt w programie DCP-o-matic, sprawdź ustawienia, a następnie "
"zapisz je przed ponowną próbą."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Orientacja"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Zabrakło pamięci RAM"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Odszumianie DWT"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Zgłoś ten problem używając menu „Pomoc -> Zgłoś błąd albo napisz maila do "
+"carl@dcpomatic.comâ€"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Umowa"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Przygotowany na liczbÄ™ kl/s"
@@ -1322,93 +1377,93 @@ msgstr "Przygotowany na liczbÄ™ kl/s"
msgid "Programming error at %1:%2 %3"
msgstr "Błąd programowania w linii %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Materiał promocyjny"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Komunikat publiczny"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Klasyfikacja"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Prawy"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Prawy centralny"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Prawy tylny surround"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Prawy surround"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Obróć o 90 stopni przeciwnie do ruchu wskazówek zegara"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Obróć o 90 stopni zgodnie ze wskazówkami zegara"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1419,23 +1474,23 @@ msgstr ""
"pierwszej klatki listy płac (FFMC). Zaleca się dodanie tych znaczników "
"wciskajÄ…c przycisk „Znaczniki†w zakÅ‚adce „DCPâ€."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 dla systemów 10-, 12-, 14- i 16-bitowych"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1448,27 +1503,27 @@ msgstr "Błąd SSH [%1]"
msgid "SSH error [%1] (%2)"
msgstr "Błąd SSH [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Sobota"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "SkanujÄ™ pliki obrazu"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Wysyłam wiadomość"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Krótkometrażowy"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Podpis"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Rozdzielczość"
@@ -1476,11 +1531,11 @@ msgstr "Rozdzielczość"
msgid "Some audio will be resampled to %1Hz"
msgstr "Nastąpi zmiana częstotliwości niektórych ścieżek dźwiękowych do %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr "Niektóre pliki uległy zmianie od ostatniego otwarcia Projektu."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1501,7 +1556,7 @@ msgstr ""
"\n"
"Pliki te zostaną ponownie zbadane, sprawdź ustawienia."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
@@ -1509,7 +1564,7 @@ msgstr ""
"Niektóre z napisów dzielą się na więcej niż %1 linii, dlatego zostaną "
"przycięte."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1532,11 +1587,11 @@ msgstr "Część twoich materiałów wymaga klucza KDM"
msgid "Some of your content needs an OV"
msgstr "Część twoich materiałów wymaga wersji OV paczki DCP"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Stereo"
@@ -1549,19 +1604,19 @@ msgstr "Miksuj 2.0 do 5.1 wersja A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Miksuj 2.0 do 5.1 wersja B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Niedziela"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Zapowiedź"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Filtr Telecine"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Testowy"
@@ -1583,25 +1638,25 @@ msgstr "Certyfikat jest nieprawidłowy"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Certyfikat jest nieprawidłowy (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1611,7 +1666,7 @@ msgstr ""
"3D. Ustaw rodzaj wideo na 2D. Możesz stworzyć paczkę DCP 3D zawierającą "
"ten materiaÅ‚ zaznaczajÄ…c opcjÄ™ 3D w zakÅ‚adce „DCPâ€."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1619,23 +1674,37 @@ msgstr ""
"Dysk, na którym zapisany jest Projekt ma mało wolnego miejsca. Zwolnij "
"miejsce na dysku i spróbuj ponownie."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Plik %1 został przesunięty o 2% milisekund wcześniej."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Plik %1 został przesunięty o 2% milisekund później."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Długość pliku %1 została skrócona o %2 milisekund."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Długość pliku %1 została wydłużona o %2 milisekund."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1650,11 +1719,11 @@ msgstr ""
"s paczki DCP bliższej tej używanej w twoich materiałach, zakładając, że "
"docelowy serwer wspiera wybranÄ… liczbÄ™ klatek/s."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "Paczka DCP nie zawiera wideo"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1663,35 +1732,38 @@ msgstr ""
"Brakuje pamięci, aby wykonać tę operację. Jeśli twój system jest 32-bitowy, "
"spróbuj zmniejszyć liczbę wątków kodujących w Preferencjach."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
"Ten klucz KDM jest kompatybilny z programem DCP-o-matic, ale zawarty "
"certyfikat jest błędny."
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
"Ten klucz KDM jest niekompatybilny z certyfikatem deszyfrujÄ…cym programu DCP-"
"o-matic."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"Obecny błąd wystąpił, ponieważ używasz 32-bitowej wersji programu DCP-o-"
"matic i chcesz wykorzystać zbyt dużo wątków kodujących. Zmniejsz 'Liczbę "
"wątków używanych przez DCP-o-matic' w zakładce „Ogólne†Preferencji i "
"spróbuj ponownie."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"Obecny błąd wystąpił, ponieważ używasz 32-bitowej wersji programu DCP-o-"
"matic. Zainstaluj ponownie program w wersji 64-bitowej i spróbuj ponownie."
@@ -1705,45 +1777,47 @@ msgstr ""
"klikając prawym przyciskiem na wybranych materiałach i wybierając opcję "
"\"Dodaj KDM\"."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Projekt został utworzony przy pomocy nowszej wersji DCP-o-matic i nie może "
"być otwarty w tej wersji. Przepraszamy!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Projekt został utworzony przy pomocy starszej wersji DCP-o-matic i nie może "
"być otwarty w tej wersji. Musisz stworzyć nowy Projekt i ponownie dodać "
"materiały i ustawienia. Przepraszamy!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Czwartek"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Tekst z kodami czasowymi"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Zwiastun"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Transkodowanie %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Przejście"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Wtorek"
@@ -1751,7 +1825,7 @@ msgstr "Wtorek"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Archiwum ZIP zawiera nieobsługiwane pliki"
@@ -1759,35 +1833,35 @@ msgstr "Archiwum ZIP zawiera nieobsługiwane pliki"
msgid "Unexpected image type received by server"
msgstr "Serwer otrzymał nieobsługiwany typ obrazu"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Nieznany"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Nieznany błąd"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Nieznany rodzaj pliku dźwiękowego (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Wyostrzanie i filtr Gausowski"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Nieokreślony"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Nowy"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Nieużywany"
@@ -1799,7 +1873,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1807,11 +1881,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Sprawdź DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Przerzuć w pionie"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Dla niedowidzÄ…cych"
@@ -1819,23 +1893,23 @@ msgstr "Dla niedowidzÄ…cych"
msgid "Waiting"
msgstr "Czekam"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Filtr Telecine"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Åšroda"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "I jeszcze jeden filtr usuwania przeplotu"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1846,7 +1920,7 @@ msgstr ""
"obsługiwana przez wszystkie projektory. Zaleca się zmianę liczby klatek/s "
"na wartość %2 FPS."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1856,7 +1930,7 @@ msgstr ""
"obsługiwana przez wszystkie projektory. Rozważ zmianę liczby klatek/s na "
"wartość %2 FPS."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1865,19 +1939,11 @@ msgstr ""
"przez wszystkie projektory. Paczka może nie być kompatybilna ze wszystkimi "
"systemami."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Używasz w Projekcie materiałów 3D, jednak DCP jest ustawiony na 2D. Ustaw "
-"opcje DCP na 3D, jeśli chcesz odtwarzać go na systemach 3D (jak Real-D, "
-"MasterImage itd.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Używasz wbudowanego miksera stereo-do-5.1. Nie jest jeszcze w pełni "
@@ -1885,7 +1951,16 @@ msgstr ""
"źródłowego. Jeśli chcesz go użyć, zaleca się, by sprawdzić paczkę DCP w "
"kinie i upewnić się, że dźwięk jest poprawny."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Używasz w Projekcie materiałów 3D, jednak DCP jest ustawiony na 2D. Ustaw "
+"opcje DCP na 3D, jeśli chcesz odtwarzać go na systemach 3D (jak Real-D, "
+"MasterImage itd.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1893,7 +1968,7 @@ msgstr ""
"Używasz %1 plików, które zdają się być plikami .vob z DVD. Powinieneś je "
"połączyć w jeden plik, by mieć pewność płynnych przejść kolejnych fragmentów."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1901,7 +1976,7 @@ msgstr ""
"Co najmniej jeden z twoich materiałów zawiera dźwięk Atmos, a materiały mają "
"różne wartości klatek/s. Musisz usunąć materiał z dźwiękiem Atmos."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1909,7 +1984,7 @@ msgstr ""
"Projekt zawiera nakładające się napisy, które nie są dozwolone w standardzie "
"Interlop. Zmień standard paczki na SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1921,26 +1996,27 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Musisz najpierw dodać materiały zanim utworzysz DCP"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"Docelowa paczka DCP ma mniej niż 6 kanałów dźwiękowych. To może powodować "
"problemy z odtwarzaniem na niektórych serwerach. Twoje DCP może mieć 6 "
"kanałów dźwiękowych. Dodane materiały mogą mieć mniej kanałów dźwiękowych, "
"DCP-o-matic wypełni nieużywane kanały ciszą."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1949,7 +2025,7 @@ msgstr ""
"problemy z odtwarzaniem na niektórych serwerach. Jeśli to możliwe, ustaw "
"kontener DCP na Flat lub Scope."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1957,14 +2033,14 @@ msgstr ""
"Poziom dźwięku jest bardzo wysoki (%1). Powinieneś zmniejszyć głośność "
"materiału dźwiękowego."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"Twój Projekt zawiera materiał wideo, który nie jest wyrównany do granicy "
"obrazu."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1972,21 +2048,21 @@ msgstr ""
"Twój Projekt zawiera skadrowany materiał wideo, który nie jest wyrównany do "
"granicy obrazu."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[ruchome obrazy]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[stopklatka]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[napisy]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_rolka%1"
@@ -2018,11 +2094,11 @@ msgstr "kopiowanie %1"
msgid "could not find stream information"
msgstr "nie udało się znaleźć informacji o strumieniu"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "nie udało się przenieść materiałów Atmos do DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "nie udało się przenieść dźwięku do DCP (%1)"
@@ -2050,7 +2126,7 @@ msgstr "nie udało się zapisać do pliku %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "wystąpił błąd podczas async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "wystąpił błąd podczas async_read (%1)"
@@ -2058,28 +2134,28 @@ msgstr "wystąpił błąd podczas async_read (%1)"
msgid "error during async_write (%1)"
msgstr "wystąpił błąd podczas async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "klatek na sekundÄ™"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "liczba kl/s w Projekcie i DCP różnią się."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
@@ -2087,35 +2163,45 @@ msgstr ""
"nowo."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "ma rozdzielczość 2K, a film jest w 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "ma rozdzielczość 4K, a film jest w 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "jest ustawiony na Interop, podczas gdy docelowy DCP jest SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "jest ustawiony na SMPTE, podczas gdy docelowy DCP jest Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "inny materiał audio nakłada się na ten w DCP; usuń go."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "inny materiał audio nakłada się na ten w DCP; usuń go."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "inny materiał wideo nakłada się na ten w DCP; usuń go."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2124,16 +2210,16 @@ msgstr ""
"rolek na 'podziel zgodnie z zawartością paczki' w zakładce 'DCP'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "kontener ustawiony w Projekcie rożni się od tej w DCP."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "min"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "przenoszenie"
@@ -2142,7 +2228,7 @@ msgid "name"
msgstr "nazwa"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2151,7 +2237,7 @@ msgstr ""
"zapisany ponownie."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
@@ -2160,31 +2246,39 @@ msgstr ""
"zapisana ponownie."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "stopklatka"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "inne napisy nakładają się na te w DCP; usuń je."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "nieznany"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "klatki obrazu"
+#~ msgid "Copying old video file"
+#~ msgstr "KopiujÄ™ plik wideo ze starej paczki"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "KopiujÄ™ plik wideo do paczki DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "Powiadomienie DCP-o-matic"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "inne napisy nakładają się na te w DCP; usuń je."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "nie posiada napisów kodowanych w żadnej rolce."
@@ -2195,13 +2289,6 @@ msgstr "klatki obrazu"
#~ msgstr "nie ma dźwięku w żadnej rolce."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Zgłoś ten problem używając menu „Pomoc -> Zgłoś błąd albo napisz maila do "
-#~ "carl@dcpomatic.comâ€"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "Twój domyślny kontener był niestandardowy i został zmieniony na Flat "
diff --git a/src/lib/po/pt_BR.po b/src/lib/po/pt_BR.po
index 6abd45555..b0f82d00a 100644
--- a/src/lib/po/pt_BR.po
+++ b/src/lib/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2018-01-15 16:19-0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.5\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Taxa de quadros do conteúdo %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Redimensionado para %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Proporções de exibição %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Preenchido com barras pretas %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Redimensionado para %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " em %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -94,39 +94,82 @@ msgstr ""
"Duração: $LENGTH\n"
"Tamanho: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr ""
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Dolby Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [audio]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [movie]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [video]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"O DCP-o-matic não pôde abrir o arquivo %1 (%2). Talvez o arquivo não exista "
+"ou tenha um formato não suportado."
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+"O DCP-o-matic não aceita mais o filtro `%1', portanto ele foi desativado."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+msgid "%1 notification"
+msgstr ""
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", aspect ratio do pixel %.2f:1"
@@ -163,11 +206,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Tela cheia)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -180,49 +223,50 @@ msgstr "2.35 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "Redutor de ruído 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 faltando; terminando em %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Alguns projetores apresentam problemas no playback de DCPs com bit-rates "
@@ -230,22 +274,22 @@ msgstr ""
"esse bit-rate produz conteúdo que é visualmente quase indistinguível de "
"conteúdos encodados no limite de 250Mbits/s."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Comercial"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -257,7 +301,7 @@ msgstr ""
"superior e inferior do frame Flat. Talvez seja mais indicado criar um DCP "
"Scope, escolhendo Scope (2.39:1) no tab \"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
#, fuzzy
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
@@ -269,7 +313,7 @@ msgstr ""
"do frame Scope. Talvez seja mais indicado criar um DCP Flat, escolhendo Flat "
"(1.85:1) no tab \"DCP\"."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Ocorreu um erro de processamento com o arquivo %1."
@@ -278,59 +322,59 @@ msgstr "Ocorreu um erro de processamento com o arquivo %1."
msgid "Analysing audio"
msgstr "Analisar áudio"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
#, fuzzy
msgid "Analysing subtitles"
msgstr "Buscando legendas"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -349,73 +393,73 @@ msgstr "O áudio será convertido para %1Hz"
msgid "Audio will not be resampled"
msgstr "O áudio não terá sua taxa de amostragem alterada"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "Gama de cores extendida BT1361"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 com luminância constante"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 para sistema de 10-bits"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 para sistema de 12-bits"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 com luminância não-constante"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr ""
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits por pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
#, fuzzy
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter (YADIF)"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Cancelado"
@@ -428,11 +472,11 @@ msgstr "não pode conter barras"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Impossível processar formato de pixel %1 durante %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr ""
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Central"
@@ -440,7 +484,7 @@ msgstr "Central"
msgid "Channels"
msgstr "Canais"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -449,30 +493,35 @@ msgstr ""
msgid "Checking content"
msgstr "Examinar conteúdo"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Verificando dados existentes de imagem"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
#, fuzzy
msgid "Chroma-derived constant luminance"
msgstr "BT2020 com luminância constante"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
#, fuzzy
msgid "Chroma-derived non-constant luminance"
msgstr "BT2020 com luminância não-constante"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
#, fuzzy
msgid "Closed captions"
msgstr "Redução de ruído"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Legendas em texto"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Primárias de cor"
@@ -486,17 +535,17 @@ msgstr "Primárias de cor"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Gama de cores"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Característica de transferência de cores"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Espaço de cor"
@@ -504,15 +553,15 @@ msgstr "Espaço de cor"
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Computando processamento"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Computando processamento"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -530,23 +579,23 @@ msgstr "tipo de conteúdo"
msgid "Content sample rate"
msgstr "Taxa de amostragem de áudio do conteúdo"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
"Todos os conteúdos a serem concatenados devem conter ou não conter áudio"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
#, fuzzy
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Todos os conteúdos a serem concatenados devem conter ou não conter legendas"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
"Todos os conteúdos a serem concatenados devem conter ou não conter vídeo"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
#, fuzzy
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
@@ -559,13 +608,13 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "O conteúdo a ser concatenado deve ter a mesma taxa de quadros"
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"O conteúdo a ser concatenado deve ter a mesma configuração de 'queimar "
"legendas na imagem'."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"O conteúdo a ser concatenado deve ter a mesma configuração em 'usar "
@@ -611,7 +660,7 @@ msgid "Content to be joined must have the same fades."
msgstr ""
"O conteúdo a ser concatenado deve ter as mesmas 'fade in' e 'fade out'."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "O conteúdo a ser concatenado deve ter a mesma largura de borda."
@@ -619,41 +668,41 @@ msgstr "O conteúdo a ser concatenado deve ter a mesma largura de borda."
msgid "Content to be joined must have the same picture size."
msgstr "O conteúdo a ser concatenado deve ter o mesmo tamanho de imagem."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
"O conteúdo a ser concatenado deve ter o mesmo reposicionamento de legenda no "
"eixo X."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
"O conteúdo a ser concatenado deve ter o mesmo redimensionamento de legenda "
"no eixo X."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
"O conteúdo a ser concatenado deve ter o mesmo reposicionamento de legenda no "
"eixo Y."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr ""
"O conteúdo a ser concatenado deve ter o mesmo redimensionamento de legenda "
"no eixo Y."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "O conteúdo a ser concatenado deve ter os mesmos fades de legendas."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"O conteúdo a ser concatenado deve ter o mesmo espaçamento de linha de "
"legenda."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "O conteúdo a ser concatenado deve ter a mesma taxa de quadros"
@@ -661,25 +710,25 @@ msgstr "O conteúdo a ser concatenado deve ter a mesma taxa de quadros"
msgid "Content to be joined must have the same video frame type."
msgstr "O conteúdo a ser concatenado deve ter o mesmo tipo de quadro."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
#, fuzzy
msgid "Content to be joined must use the same DCP track."
msgstr "O conteúdo a ser concatenado deve usar as mesmas fontes."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "O conteúdo a ser concatenado deve usar as mesmas fontes."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "O conteúdo a ser concatenado deve usar a mesma faixa de legendas."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
#, fuzzy
msgid "Content to be joined must use the same text language."
msgstr "O conteúdo a ser concatenado deve usar as mesmas fontes."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "O conteúdo tem %1x%2"
@@ -687,15 +736,6 @@ msgstr "O conteúdo tem %1x%2"
msgid "Copy DCP to TMS"
msgstr "Copiar DCP para TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-#, fuzzy
-msgid "Copying video file into DCP"
-msgstr "Tamanhos de conteúdo inconsistentes no DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Impossível conectar com o servidor %1 (%2)"
@@ -713,20 +753,21 @@ msgstr "Impossível decodificar arquivo JPEG2000 %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Impossível decodificar arquivo de imagem (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Impossível abrir arquivo ZIP baixado"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Impossível buscar servidores de codificação remotos. Talvez haja outra "
"instância de DCP-o-matic aberta."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Impossível abrir %1"
@@ -734,21 +775,21 @@ msgstr "Impossível abrir %1"
msgid "Could not open %1 to send"
msgstr "Impossível abrir %1 para enviar"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Impossível abrir arquivo ZIP baixado"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
#, fuzzy
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Impossível abrir arquivo ZIP baixado"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
#, fuzzy
msgid "Could not open file for writing"
msgstr "não foi possível abrir o arquivo %1 para gravação (%2)"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
#, fuzzy
msgid "Could not open output file %1 (%2)"
msgstr "não foi possível modificar o arquivo %1 (%2)"
@@ -765,19 +806,19 @@ msgstr "Impossível iniciar transferência"
msgid "Could not write to remote file (%1)"
msgstr "Impossível modificar arquivo remoto (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX primário"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX secundário"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -789,7 +830,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "Legendas XML do DCP"
@@ -806,46 +847,35 @@ msgstr "O DCP vai ser exibido a %.1f%% da velocidade do conteúdo.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "O DCP vai utilizar frames intercalados do conteúdo.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"O DCP-o-matic não pôde abrir o arquivo %1 (%2). Talvez o arquivo não exista "
-"ou tenha um formato não suportado."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
-msgstr ""
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr ""
-"O DCP-o-matic não aceita mais o filtro `%1', portanto ele foi desativado."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Desentrelaçamento de conteúdo"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -857,7 +887,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Querido projecionista,\n"
"\n"
@@ -871,12 +901,16 @@ msgstr ""
"Atenciosamente,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
#, fuzzy
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 e CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
#, fuzzy
msgid "Download failed (%1 error %2)"
msgstr "Download falhou (%1/%2 erro %3)"
@@ -902,19 +936,19 @@ msgstr "Enviar KDMs por email para %1"
msgid "Email notification"
msgstr ""
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Enviar relatório de erros por email"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Enviar relatório de erros por email para %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Codificação"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -922,20 +956,20 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Erro no arquivo de legenda:: %1 encontrado quando se esperava %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Erro: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Buscando legendas"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr ""
@@ -949,17 +983,17 @@ msgstr "Examinar conteúdo"
msgid "Examining subtitles"
msgstr "Buscando legendas"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
#, fuzzy
msgid "Examining subtitles and closed captions"
msgstr "Buscando legendas"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
#, fuzzy
msgid "Extracting"
msgstr "Classificação"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -967,54 +1001,54 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Falha na autenticação com o servidor (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
#, fuzzy
msgid "Failed to encode the DCP."
msgstr "Falha no envio de email (%1)"
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
#, fuzzy
msgid "Failed to send email"
msgstr "Falha no envio de email (%1)"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Longa-metragem"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Nome do arquivo"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Nome do arquivo"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Filme"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Buscando duração"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Taxa de quadros"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr ""
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Full"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Full (0-%1)"
@@ -1038,35 +1072,35 @@ msgstr "Duração total em quadros de conteúdo na taxa do DCP"
msgid "Full length in video frames at content rate"
msgstr "Duração total em quadros de conteúdo na taxa do conteúdo"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gama 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gama 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Removedor de posterização em gradações"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Trilha deficientes auditivos"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Redutor de ruído 3D de alta qualidade"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr ""
@@ -1074,106 +1108,107 @@ msgstr ""
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB ou sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Erro desconhecido."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr ""
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "Entrega de KDM: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Desentrelaçador (kernel)"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Esquerdo"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Esquerdo central"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Surround traseiro esquerdo"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Surround esquerdo"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Duração"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limitado"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Limitado (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Linear"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarítmico (faixa 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarítmico (faixa 316:1)"
@@ -1181,7 +1216,7 @@ msgstr "Logarítmico (faixa 316:1)"
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1189,24 +1224,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Decodificador Mid-Side (MS)"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Misc"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Contagem de canais inconsistente no DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Taxas de amostragem de áudio inconsistentes no DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Taxas de quadros inconsistentes no DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Tamanhos de conteúdo inconsistentes no DCP"
@@ -1215,19 +1250,19 @@ msgstr "Tamanhos de conteúdo inconsistentes no DCP"
msgid "Missing required setting %1"
msgstr "falta configuração obrigatória %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr ""
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Desentrelaçador com compensação de movimento"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr ""
@@ -1241,77 +1276,87 @@ msgstr "Nenhum servidor de email configurado nas preferências"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Nenhum servidor de email configurado nas preferências"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Não foram encontradas imagens válidas na pasta."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Redução de ruído"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Nenhum"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (executou por %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (executou por %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Apenas o primeiro conteúdo a ser concatenado pode ter um corte de início."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Apenas o último conteúdo a ser concatenado pode ter um corte de fim."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Redução de ruído"
+
+#: src/lib/text_type.cc:79
#, fuzzy
msgid "Open subtitles"
msgstr "Legendas em texto"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Sem memória"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Redução de ruído tipo overcomplete wavelet"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Comunicado"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Preparado para frame rate de vídeo"
@@ -1319,116 +1364,116 @@ msgstr "Preparado para frame rate de vídeo"
msgid "Programming error at %1:%2 %3"
msgstr "Erro de programação em %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Anúncio de Utilidade Pública"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Classificação"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Direito"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Direito central"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Surround traseiro direito"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Surround direito"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr ""
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr ""
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 para sistemas de 10, 12, 14 e 16 bits"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1443,27 +1488,27 @@ msgstr "SSH erro (%1)"
msgid "SSH error [%1] (%2)"
msgstr "SSH erro (%1)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr ""
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Processando arquivos de imagem"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Enviando email"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Curta-metragem"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Tamanho"
@@ -1471,11 +1516,11 @@ msgstr "Tamanho"
msgid "Some audio will be resampled to %1Hz"
msgstr "Alguns áudios serão reamostrados para %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1490,13 +1535,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1518,11 +1563,11 @@ msgstr "uma parte do seu conteúdo necessita de KDM"
msgid "Some of your content needs an OV"
msgstr "uma parte do seu conteúdo necessita de uma versão original (OV)"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Stereo"
@@ -1535,19 +1580,19 @@ msgstr "Upmix de estéreo para 5.1, tipo A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Upmix de estéreo para 5.1, tipo B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr ""
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Filtro de Telecine"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Teste"
@@ -1567,32 +1612,32 @@ msgstr "A cadeia de certificado para assinatura é inválida"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "A cadeia de certificado para assinatura é inválida (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1600,23 +1645,37 @@ msgstr ""
"O drive que contém o filme está com pouco espaço. Libere espaço e tente "
"novamente."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "O arquivo %1 foi adiantado %2 milissegundos."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "O arquivo %1 foi atrasado %2 milissegundos."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "O arquivo %1 foi cortado por %2 milissegundos a menos."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "O arquivo %1 foi cortado por %2 milissegundos a mais."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1625,11 +1684,11 @@ msgid ""
"systems support your chosen DCP rate."
msgstr ""
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1639,27 +1698,30 @@ msgstr ""
"de 32 bits, tente reduzir o número de threads para codificação no tab Geral "
"das Preferências, no menu Editar."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
+"Não há memória suficiente para esta ação. Se você está rodando em um sistema "
+"de 32 bits, tente reduzir o número de threads para codificação no tab Geral "
+"das Preferências, no menu Editar."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1670,48 +1732,50 @@ msgstr ""
"Este arquivo é um KDM. KDMs devem ser adicionados a conteúdos DCPs clicando-"
"se com o botão direito no conteúdo e escolhendo \"Adicionar KDM\"."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Este filme foi criado com uma versão mais recente de DCP-o-matic, e não pode "
"ser carregado nesta versão. Desculpe-nos, e considere instalar uma versão "
"mais recente!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Este filme foi criado com uma versão mais recente de DCP-o-matic, e não pode "
"ser carregado nesta versão. Será necessário criar um novo Filme, readicionar "
"seu conteúdo e refazer os ajustes. Desculpe-nos, e considere instalar uma "
"versão mais recente!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr ""
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
#, fuzzy
msgid "Transcoding %1"
msgstr "Transcodificar %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transicional"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr ""
@@ -1719,7 +1783,7 @@ msgstr ""
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Conteúdo inesperado no arquivo ZIP"
@@ -1727,36 +1791,36 @@ msgstr "Conteúdo inesperado no arquivo ZIP"
msgid "Unexpected image type received by server"
msgstr "Tipo de imagem inesperada recebida pelo servidor"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
#, fuzzy
msgid "Unknown"
msgstr "desconhecido"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Erro desconhecido"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Formato de amostragem de áudio desconhecido (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Unsharp Mask e Blur Gaussiano"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Não especificado"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Sem_Título"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Sem uso"
@@ -1768,7 +1832,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1776,11 +1840,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr ""
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr ""
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Trilha descritiva"
@@ -1788,24 +1852,24 @@ msgstr "Trilha descritiva"
msgid "Waiting"
msgstr "Aguardando"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
#, fuzzy
msgid "Weave filter"
msgstr "Filtro de Telecine"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr ""
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter (YADIF)"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1816,7 +1880,7 @@ msgstr ""
"suportada. Recomendamos a alteração da taxa de quadros do seu DCP para um "
"valor padrão, ou que faça um DCP SMPTE."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1827,7 +1891,7 @@ msgstr ""
"suportada. Recomendamos a alteração da taxa de quadros do seu DCP para um "
"valor padrão, ou que faça um DCP SMPTE."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
#, fuzzy
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
@@ -1837,7 +1901,14 @@ msgstr ""
"suportada. Recomendamos a alteração da taxa de quadros do seu DCP para um "
"valor padrão, ou que faça um DCP SMPTE."
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
+msgid ""
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
+msgstr ""
+
+#: src/lib/hints.cc:324
msgid ""
"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
@@ -1846,14 +1917,7 @@ msgstr ""
"o DCP para 3D se quiser reprodução correta em um sistema 3D (por exemplo "
"Real-D, MasterImage, etc.)"
-#: src/lib/hints.cc:120
-msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
-msgstr ""
-
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1861,19 +1925,19 @@ msgstr ""
"Você tem %1 arquivos que parecem ser arquivos VOB de um DVD. É recomendado "
"que você os concatene previamente para garantir uma reprodução sem cortes."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1886,22 +1950,22 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "você precisa adicionar conteúdo ao DCP antes de criá-lo"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
#, fuzzy
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
@@ -1911,21 +1975,21 @@ msgstr ""
"alguns projetores. Se possível, use apenas Flat ou Scope nos formatos de "
"container."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr ""
"Seu nível de áudio é muito alto (no %1). Reduza o ganho no conteúdo de áudio."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"Seu projeto contém conteúdo de vídeo que não foi alinhado a uma borda de "
"quadro."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1933,21 +1997,21 @@ msgstr ""
"Seu projeto contém conteúdo de vídeo cujo corte não foi alinhado a uma borda "
"de quadro."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[sequência de imagens]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[imagem estática]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[legendas]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr ""
@@ -1979,12 +2043,12 @@ msgstr "copiando %1"
msgid "could not find stream information"
msgstr "não foi possível encontrar informação do stream"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
#, fuzzy
msgid "could not move atmos asset into the DCP (%1)"
msgstr "não foi possível mover os arquivos de áudio para o DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "não foi possível mover os arquivos de áudio para o DCP (%1)"
@@ -2015,7 +2079,7 @@ msgstr "não foi possível modificar o arquivo %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "erro durante async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "erro durante async_read (%1)"
@@ -2023,69 +2087,77 @@ msgstr "erro durante async_read (%1)"
msgid "error during async_write (%1)"
msgstr "erro durante async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "quadros por segundo"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
#, fuzzy
msgid "it has a different frame rate to the film."
msgstr "O filme tem uma taxa de quadros diferente deste DCP."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
#, fuzzy
msgid "it is 2K and the film is 4K."
msgstr "O filme está configurado como Interop e este DCP é SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
#, fuzzy
msgid "it is 4K and the film is 2K."
msgstr "O filme está configurado como Interop e este DCP é SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
#, fuzzy
msgid "it is Interop and the film is set to SMPTE."
msgstr "O filme está configurado como Interop e este DCP é SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
#, fuzzy
msgid "it is SMPTE and the film is set to Interop."
msgstr "O filme está configurado como SMPTE e este DCP é Interop."
-#: src/lib/dcp_content.cc:736
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
#, fuzzy
-msgid "it overlaps other audio content; remove the other content."
+msgid "it overlaps other audio content."
msgstr "Há outros conteúdos de áudio sobrepostos neste DCP. Remova-os."
-#: src/lib/dcp_content.cc:700
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
#, fuzzy
-msgid "it overlaps other video content; remove the other content."
+msgid "it overlaps other text content."
+msgstr "Há outros conteúdos de áudio sobrepostos neste DCP. Remova-os."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "Há outros conteúdos de vídeo sobrepostos neste DCP. Remova-os."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
#, fuzzy
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
@@ -2095,17 +2167,17 @@ msgstr ""
"'Rolos' em 'Dividir por arquivo de conteúdo'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
#, fuzzy
msgid "its video frame size differs from the film's."
msgstr "O tamanho de quadro do vídeo difere daquele do DCP."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "movendo"
@@ -2114,46 +2186,49 @@ msgid "name"
msgstr "nome"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "imagem estática"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "Há outros conteúdos de vídeo sobrepostos neste DCP. Remova-os."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "desconhecido"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "quadros de vídeo"
#, fuzzy
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Tamanhos de conteúdo inconsistentes no DCP"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "Há outros conteúdos de vídeo sobrepostos neste DCP. Remova-os."
+
+#, fuzzy
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "O DCP não tem som em todos os rolos."
diff --git a/src/lib/po/pt_PT.po b/src/lib/po/pt_PT.po
index 758500720..ca18d6de7 100644
--- a/src/lib/po/pt_PT.po
+++ b/src/lib/po/pt_PT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: DCP-o-matic PORTUGUESE (Portugal)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2016-03-19 18:19+0000\n"
"Last-Translator: Tiago Casal Ribeiro <tiago@casalribeiro.com>\n"
"Language-Team: \n"
@@ -18,7 +18,7 @@ msgstr ""
"X-Generator: Poedit 1.8.7.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, fuzzy, c-format
msgid ""
"\n"
@@ -27,7 +27,7 @@ msgstr ""
"\n"
"Cadência de fotogramas do conteúdo %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
#, fuzzy
msgid ""
"\n"
@@ -36,7 +36,7 @@ msgstr ""
"\n"
"Recortado para %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, fuzzy, c-format
msgid ""
"\n"
@@ -45,7 +45,7 @@ msgstr ""
"\n"
"Rácio do ecrã %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
#, fuzzy
msgid ""
"\n"
@@ -54,7 +54,7 @@ msgstr ""
"\n"
"Preenchido com negro para caber no contentor %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
#, fuzzy
msgid ""
"\n"
@@ -63,18 +63,18 @@ msgstr ""
"\n"
"Redimensionado para %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr ""
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr ""
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -88,41 +88,83 @@ msgid ""
"Size: $SIZE\n"
msgstr ""
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr ""
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
#, fuzzy
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [áudio]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [movie]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
#, fuzzy
msgid "%1 [video]"
msgstr "%1 [movie]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"O DCP-o-matic não conseguiu abrir o ficheiro %1. Talvez não exista ou está "
+"num formato inesperado."
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "O DCP-o-matic já não suporta o filtro '%1', e este foi desactivado."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+msgid "%1 notification"
+msgstr ""
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, fuzzy, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", rácio de pixeis %.2f:1"
@@ -161,11 +203,11 @@ msgstr ""
msgid "1.90 (Full frame)"
msgstr "Full frame"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -178,68 +220,68 @@ msgstr ""
msgid "2.39 (Scope)"
msgstr ""
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "Remoção de ruído 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr ""
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr ""
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr ""
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Publicidade"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -247,14 +289,14 @@ msgid ""
"tab."
msgstr ""
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
"DCP's container to have the same ratio as your content."
msgstr ""
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Ocorreu um erro ao manipular o ficheiro %1."
@@ -263,59 +305,59 @@ msgstr "Ocorreu um erro ao manipular o ficheiro %1."
msgid "Analysing audio"
msgstr "Analizar áudio"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
#, fuzzy
msgid "Analysing subtitles"
msgstr "À procura das legendas"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -334,74 +376,74 @@ msgstr "A taxa de amostragem será alterada para %1Hz"
msgid "Audio will not be resampled"
msgstr "A taxa de amostragem será alterada"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "Gama de cores ampliada BT1361"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "Luminância constante BT2020"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 para um sistema de 10-bit"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 para um sistema de 12-bit"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "Luminância não constante BT2020"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr ""
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bits por pixel"
# It's a filter name, has no translation to portuguese.
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
#, fuzzy
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Cancelado"
@@ -414,11 +456,11 @@ msgstr "não pode conter barras"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Impossível manusear o formato de pixeis %1 durante %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr ""
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Central"
@@ -426,7 +468,7 @@ msgstr "Central"
msgid "Channels"
msgstr "Canais"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -435,30 +477,35 @@ msgstr ""
msgid "Checking content"
msgstr "Examinar conteúdo"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "A verificar dados de imagem existentes"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
#, fuzzy
msgid "Chroma-derived constant luminance"
msgstr "Luminância constante BT2020"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
#, fuzzy
msgid "Chroma-derived non-constant luminance"
msgstr "Luminância não constante BT2020"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
#, fuzzy
msgid "Closed captions"
msgstr "Redução de ruído"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Legendas de texto"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Cores preliminares"
@@ -472,17 +519,17 @@ msgstr "Cores preliminares"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Gama de cores"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Característica de transferência de cores"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Espaço de cor"
@@ -490,16 +537,16 @@ msgstr "Espaço de cor"
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "A processar o resumo"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
#, fuzzy
msgid "Computing digests"
msgstr "A processar o resumo"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -517,22 +564,22 @@ msgstr "tipo de conteúdo"
msgid "Content sample rate"
msgstr "Cadência de fotogramas do conteúdo de áudio"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
#, fuzzy
msgid "Content to be joined must all have or not have audio"
msgstr "O conteúdo a ser unido deve ter o mesmo ganho de áudio."
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
#, fuzzy
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas."
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
#, fuzzy
msgid "Content to be joined must all have or not have video"
msgstr "O conteúdo a ser unido deve ter os mesmos fades."
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
#, fuzzy
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
@@ -543,12 +590,12 @@ msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas."
msgid "Content to be joined must have all its video used or not used."
msgstr "O conteúdo a ser unido deve ter a mesma cadência de fotogramas."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"O conteúdo a ser unido deve ter a mesma configuração 'gravar legendas'."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr "O conteúdo a ser unido deve ter a mesma configuração 'usar legendas'."
@@ -590,7 +637,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr "O conteúdo a ser unido deve ter os mesmos fades."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
#, fuzzy
msgid "Content to be joined must have the same outline width."
msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas."
@@ -599,33 +646,33 @@ msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas."
msgid "Content to be joined must have the same picture size."
msgstr "O conteúdo a ser unido deve ter o mesmo tamanho de imagem."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "O conteúdo a ser unido deve ter o mesmo alinhamento X nas legendas."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "O conteúdo a ser unido deve ter o mesmo alinhamento Y nas legendas."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "O conteúdo a ser unido deve ter a mesma escala Y nas legendas."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
#, fuzzy
msgid "Content to be joined must have the same subtitle fades."
msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
#, fuzzy
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "O conteúdo a ser unido deve ter a mesma escala X nas legendas."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
#, fuzzy
msgid "Content to be joined must have the same video frame rate"
msgstr "O conteúdo a ser unido deve ter a mesma cadência de fotogramas."
@@ -634,25 +681,25 @@ msgstr "O conteúdo a ser unido deve ter a mesma cadência de fotogramas."
msgid "Content to be joined must have the same video frame type."
msgstr "O conteúdo a ser unido deve ter o mesmo tipo de fotogramas de vídeo."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
#, fuzzy
msgid "Content to be joined must use the same DCP track."
msgstr "O conteúdo a ser unido deve usar os mesmos tipos de letra."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "O conteúdo a ser unido deve usar os mesmos tipos de letra."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "O conteúdo a ser unido deve usar o mesmo fluxo de legendas."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
#, fuzzy
msgid "Content to be joined must use the same text language."
msgstr "O conteúdo a ser unido deve usar os mesmos tipos de letra."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "O vídeo do conteúdo tem %1x%2"
@@ -660,15 +707,6 @@ msgstr "O vídeo do conteúdo tem %1x%2"
msgid "Copy DCP to TMS"
msgstr "Copiar DCP para TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-#, fuzzy
-msgid "Copying video file into DCP"
-msgstr "Dimensões de vídeo do DCP inválidas"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Não foi possivel ligar ao servidor %1 (%2)"
@@ -686,20 +724,21 @@ msgstr "Não foi possível descodificar o ficheiro JPEG2000 %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Não foi possível descodificar a imagem (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Não foi possível abrir o ficheiro ZIP descarregado"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Não foi possível procurar por servidores de codificação remotos. Talvez "
"outra instância do DCP-o-matic esteja em execução."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Não foi possível abrir %1"
@@ -707,21 +746,21 @@ msgstr "Não foi possível abrir %1"
msgid "Could not open %1 to send"
msgstr "Não foi possível abrir %1 para enviar"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Não foi possível abrir o ficheiro ZIP descarregado"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
#, fuzzy
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Não foi possível abrir o ficheiro ZIP descarregado"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
#, fuzzy
msgid "Could not open file for writing"
msgstr "não foi possível abrir o ficheiro para leitura"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
#, fuzzy
msgid "Could not open output file %1 (%2)"
msgstr "não foi possível escrever para o ficheiro %1 (%2)"
@@ -739,19 +778,19 @@ msgstr "Não foi possível iniciar a transferência"
msgid "Could not write to remote file (%1)"
msgstr "Não foi possível escrever para o ficheiro remoto (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX primário"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX secundário"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -765,7 +804,7 @@ msgstr "Flat"
msgid "DCI Scope"
msgstr "Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "Legendas XML DCP"
@@ -783,46 +822,35 @@ msgstr "O DCP será reproduzido a %.1f%% da velocidade do conteúdo.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "O DCP usará todos os outros fotogramas do conteúdo.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
-#, fuzzy
-msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
-msgstr ""
-"O DCP-o-matic não conseguiu abrir o ficheiro %1. Talvez não exista ou está "
-"num formato inesperado."
-
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "O DCP-o-matic já não suporta o filtro '%1', e este foi desactivado."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "A Desentrelaçar"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -834,7 +862,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Caro Projeccionista\n"
"\n"
@@ -848,12 +876,16 @@ msgstr ""
"Cumprimentos,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
#, fuzzy
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 e CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
#, fuzzy
msgid "Download failed (%1 error %2)"
msgstr "O download falhou (%1/%2 erro %3)"
@@ -879,19 +911,19 @@ msgstr "Enviar chaves KDM por email para %1"
msgid "Email notification"
msgstr ""
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Enviar relatório de problemas"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Enviar relatório de problemas para %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr ""
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -899,20 +931,20 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Erro no ficheiro de legendas: encontrou %1 mas esperava %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Erro: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "À procura das legendas"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
#, fuzzy
msgid "Examining audio, subtitles and closed captions"
msgstr "Examen du contenu"
@@ -927,17 +959,17 @@ msgstr "Examinar conteúdo"
msgid "Examining subtitles"
msgstr "À procura das legendas"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
#, fuzzy
msgid "Examining subtitles and closed captions"
msgstr "Examen du contenu"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
#, fuzzy
msgid "Extracting"
msgstr "Classificação"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -945,55 +977,55 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "A autenticação com o servidor falhou (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
#, fuzzy
msgid "Failed to encode the DCP."
msgstr "Falha no envio de email (%1)"
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
#, fuzzy
msgid "Failed to send email"
msgstr "Falha no envio de email (%1)"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Longa-metragem"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filename"
msgstr "nome"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "nome"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Filme"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "À procura da duração"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Cadência de fotogramas"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Sexta-feira"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Full"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Full (0-%1)"
@@ -1019,35 +1051,35 @@ msgstr "Duração total dos fotogramas de vídeo à cadência do DCP"
msgid "Full length in video frames at content rate"
msgstr "Duração total dos fotogramas de vídeo à cadência do conteúdo"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gama 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gama 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Alterar banda do gradiente"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "DA"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Deficientes auditivos"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Remoção de ruido 3D de alta qualidade"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
#, fuzzy
msgid "Horizontal flip"
msgstr "Filtre dé-bloc horizontal"
@@ -1056,106 +1088,107 @@ msgstr "Filtre dé-bloc horizontal"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB ou sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "A causa do erro não é conhecida."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr ""
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "Envio de chaves KDM: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Desentrelaçador do núcleo"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "E"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Esquerdo"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Esquerdo central"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Esquerdo traseiro surround"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Esquerdo surround"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Duração"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limitado"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Limitado (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Linear"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarítmico (variação 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarítmico (Variação 316:1)"
@@ -1163,7 +1196,7 @@ msgstr "Logarítmico (Variação 316:1)"
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Es"
@@ -1171,24 +1204,24 @@ msgstr "Es"
msgid "Mid-side decoder"
msgstr "Descodificador Mid-side"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Misc"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Canais de áudio do DCP em número inválido"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Taxa de amostragem de áudio do DCP inválida"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Cadência de fotogramas do DCP inválida"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Dimensões de vídeo do DCP inválidas"
@@ -1197,19 +1230,19 @@ msgstr "Dimensões de vídeo do DCP inválidas"
msgid "Missing required setting %1"
msgstr "falta definição necessária %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Segunda-feira"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr ""
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Desentrelaçador de compensação de movimento"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr ""
@@ -1223,76 +1256,86 @@ msgstr "Servidor de correio não configura nas preferências"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Servidor de correio não configura nas preferências"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Não foram encontrados ficheiros de imagem válidos na pasta."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Redução de ruído"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr ""
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (executado durante %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (executado durante %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "Apenas o primeiro elemento a ser unido pode ser aparado no início."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Apenas o último elemento a ser unido pode ser aparado no fim."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Redução de ruído"
+
+#: src/lib/text_type.cc:79
#, fuzzy
msgid "Open subtitles"
msgstr "Legendas de texto"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Memória esgotada"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Redutor de ruído de onda"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Regra"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr ""
@@ -1301,119 +1344,119 @@ msgstr ""
msgid "Programming error at %1:%2 %3"
msgstr "Erro de programação em %1:%2"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Anúncio Público"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "D"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Classificação"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
#, fuzzy
msgid "Rec. 1886"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
#, fuzzy
msgid "Rec. 2020"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Direito"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Direita central"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Direito traseiro surround"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Direito surround"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr ""
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr ""
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Ds"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr ""
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr ""
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr ""
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr ""
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
#, fuzzy
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr ""
@@ -1428,28 +1471,28 @@ msgstr "Erro de SSH (%1)"
msgid "SSH error [%1] (%2)"
msgstr "Erro de SSH (%1)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Sábado"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
#, fuzzy
msgid "Scanning image files"
msgstr "A processar o resumo de imagem"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "A enviar email"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Curta-metragem"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Tamanho"
@@ -1457,11 +1500,11 @@ msgstr "Tamanho"
msgid "Some audio will be resampled to %1Hz"
msgstr "Algum áudio vais ser alterado para %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1476,13 +1519,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1501,11 +1544,11 @@ msgstr ""
msgid "Some of your content needs an OV"
msgstr ""
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr ""
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr ""
@@ -1517,19 +1560,19 @@ msgstr "Multiplicador de canais de Stereo para 5.1 A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Multiplicador de canais de Stereo para 5.1 B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Domingo"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Filtro de telecinema"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Teste"
@@ -1550,32 +1593,32 @@ msgstr "A cadeia de certificação para assinatura é inválida"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "A cadeia de certificação para assinatura é inválida"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1583,23 +1626,37 @@ msgstr ""
"O disco onde o filme está armazenado está com pouco espaço. Liberte algum "
"espaço e tente de novo."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr ""
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr ""
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr ""
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr ""
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1608,11 +1665,11 @@ msgid ""
"systems support your chosen DCP rate."
msgstr ""
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1622,27 +1679,30 @@ msgstr ""
"sistema de 32-bit tente reduzir o número de linhas de execução na aba Geral "
"das Preferências."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
+"Não há memória suficiente para concluir esta acção. Se estiver a usar um "
+"sistema de 32-bit tente reduzir o número de linhas de execução na aba Geral "
+"das Preferências."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1651,46 +1711,48 @@ msgid ""
"the content and choosing \"Add KDM\"."
msgstr ""
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Este filme foi criado com uma versão mais recente do DCP-o-matic, e não pode "
"ser carregado nesta. Desculpe!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Este filme foi criado com uma versão anterior do DCP-o-matic, e infelizmente "
"não pode ser carregado nesta. Necessita criar um novo Filme, voltar a "
"adicionar o conteúdo e configurá-lo de novo. Desculpe!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Quinta-feira"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
#, fuzzy
msgid "Transcoding %1"
msgstr "Transcodificar %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitório"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Terça-feira"
@@ -1698,7 +1760,7 @@ msgstr "Terça-feira"
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Conteúdos inesperados no ficheiro ZIP"
@@ -1706,36 +1768,36 @@ msgstr "Conteúdos inesperados no ficheiro ZIP"
msgid "Unexpected image type received by server"
msgstr "Tipo de imagem inesperada recebida pelo servidor"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
#, fuzzy
msgid "Unknown"
msgstr "desconhecido"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Erro desconhecido"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Formato de amostragem áudio desconhecido (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Máscara de nitidez e desfoque de Gauss"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Não especificado"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Sem título"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Não utilizado"
@@ -1747,7 +1809,7 @@ msgstr "Combinar E"
msgid "Upmix R"
msgstr "Combinar D"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "DV"
@@ -1755,11 +1817,11 @@ msgstr "DV"
msgid "Verify DCP"
msgstr ""
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr ""
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Deficientes Visuais"
@@ -1767,76 +1829,76 @@ msgstr "Deficientes Visuais"
msgid "Waiting"
msgstr "A aguardar"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
#, fuzzy
msgid "Weave filter"
msgstr "Filtro de telecinema"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Quarta-feira"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
# It's a filter name, has no translation to portuguese.
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
"to %2 fps."
msgstr ""
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
"rate to %2 fps."
msgstr ""
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
msgstr ""
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:324
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
msgstr ""
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
msgstr ""
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1847,59 +1909,59 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Deve adicionar algum conteúdo ao DCP antes de o criar"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
msgstr ""
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr ""
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr ""
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[moving images]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[still]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[subtitles]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr ""
@@ -1931,12 +1993,12 @@ msgstr "a copiar %1"
msgid "could not find stream information"
msgstr "não foi possível encontrar a informação do fluxo"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
#, fuzzy
msgid "could not move atmos asset into the DCP (%1)"
msgstr "não foi possível enviar o áudio para o DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "não foi possível enviar o áudio para o DCP (%1)"
@@ -1967,7 +2029,7 @@ msgstr "não foi possível escrever para o ficheiro %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "erro durante conexão assíncrona (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "erro durante leitura assíncrona (%1)"
@@ -1975,64 +2037,72 @@ msgstr "erro durante leitura assíncrona (%1)"
msgid "error during async_write (%1)"
msgstr "erro durante escrita assíncrona (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "fotogramas por segundo"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr ""
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr ""
-#: src/lib/dcp_content.cc:736
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
#, fuzzy
-msgid "it overlaps other audio content; remove the other content."
+msgid "it overlaps other audio content."
msgstr "Existe outro conteúdo áudio sobreposto a este DCP; remova-o."
-#: src/lib/dcp_content.cc:700
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
#, fuzzy
-msgid "it overlaps other video content; remove the other content."
+msgid "it overlaps other text content."
+msgstr "Existe outro conteúdo áudio sobreposto a este DCP; remova-o."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "Existe outro conteúdo video sobreposto a este DCP; remova-o."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
#, fuzzy
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
@@ -2042,16 +2112,16 @@ msgstr ""
"'Bobinas' para 'Dividir por conteúdo de vídeo'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr ""
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "a mover"
@@ -2060,46 +2130,49 @@ msgid "name"
msgstr "nome"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "imagem estática"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "Existe outro conteúdo video sobreposto a este DCP; remova-o."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "desconhecido"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "fotogramas de vídeo"
#, fuzzy
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Dimensões de vídeo do DCP inválidas"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "Existe outro conteúdo video sobreposto a este DCP; remova-o."
+
+#, fuzzy
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "Não há nenhuma bobina de audio no DCP"
diff --git a/src/lib/po/ru_RU.po b/src/lib/po/ru_RU.po
index 85f45924b..2e3bd6318 100644
--- a/src/lib/po/ru_RU.po
+++ b/src/lib/po/ru_RU.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: DCP\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2022-02-11 22:17+0500\n"
"Last-Translator: Mikhail Epshteyn <virus-2006@yandex.ru>\n"
"Language-Team: Mikhail Epshteyn\n"
@@ -17,7 +17,7 @@ msgstr ""
"X-Poedit-Basepath: .\n"
"X-Poedit-SearchPath-0: .\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"ЧаÑтота кадров контента: %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Размер при кадрировании: %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Соотношение Ñторон Ñкрана - %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Заполнено черным Ð´Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾Ð½ÐºÐ¸ под контейнер %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"МаÑштаб: %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " на %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -94,39 +94,89 @@ msgstr ""
"ДлительноÑть: $LENGTH\n"
"Размер: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 ГБ) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [аудио]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [фильм]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [видео]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic не удалоÑÑŒ открыть файл %1 (%2). Возможно, он не ÑущеÑтвует или "
+"имеет неожиданный формат."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки DCP как OV. ПожалуйÑта, "
+"проверьте Ñти наÑтройки, чтобы убедитьÑÑ, что Ñто то, чего вы хотите."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки. Теперь чаÑтота кадров фильма "
+"ÑоответÑтвует вашему контенту Atmos."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+"DCP-o-matic больше не поддерживает фильтр `%1', поÑтому он был выключен."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "Почтовое уведомление"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 кадров"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", Ñоотношение Ñторон пикÑÐµÐ»Ñ %.2f:1"
@@ -163,11 +213,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Full frame)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -180,11 +230,11 @@ msgstr "2.35 (35-мм Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "Подавитель шума 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -194,32 +244,33 @@ msgstr ""
"уверены, что ваш DCP будет воÑпроизводитьÑÑ Ð½Ð° ÑовмеÑтимом проекторе, "
"рекомендуетÑÑ Ð·Ð°Ð´Ð°Ñ‚ÑŒ DCP 2K на вкладке \"DCP→Видео\"."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 кадр/Ñек"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; оÑталоÑÑŒ %1; Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>Ð’Ñ‹ Ñоздали %1 DCP Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ DCP-o-matic!</h2><img width=\"20%%\" "
"src=\"memory:me.jpg\" align=\"center\"><p>Привет. ÐœÐµÐ½Ñ Ð·Ð¾Ð²ÑƒÑ‚ Карл и Ñ "
@@ -234,34 +285,36 @@ msgstr ""
"dcpomatic.com/donate_amount?amount=10\">Перейти в Paypal Ð´Ð»Ñ Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ "
"€10</a></ul><p>Благодарю ваÑ!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Ðекоторые проекторы имеют проблемы Ñ Ð²Ð¾Ñпроизведением DCP Ñ Ð¾Ñ‡ÐµÐ½ÑŒ выÑоким "
"битрейтом. Хорошей идеей будет Ñнизить пропуÑкную ÑпоÑобноÑть JPEG2000 до "
"200Мбит/Ñ; Ñто не должно привеÑти к заметным изменениÑм изображениÑ."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"Файл Ñубтитров в Ñтом проекте помечен Ñзыком '%1', который неизвеÑтен Ð´Ð»Ñ "
"DCP-o-matic. Языковой файл был очищен."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "ADV (Рекламный)"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -273,7 +326,7 @@ msgstr ""
"Вы можете изменить формат контейнера DCP на SCOPE (2.39:1) на вкладке "
"\"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -284,7 +337,7 @@ msgstr ""
"контента будут чёрные облаÑти. Ð’Ñ‹ можете задать Ñоотношение контейнера DCP "
"таким же, как и ваш контент."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Произошла ошибка при обращении к файлу %1."
@@ -292,30 +345,30 @@ msgstr "Произошла ошибка при обращении к файлу
msgid "Analysing audio"
msgstr "Ðнализ аудио"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Ðнализ Ñубтитров"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
"Ðайдены маркеры, уÑтановленные поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°. Они будут "
"проигнорированы."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Ðайдены файлы Ñ Ñубтитрами CC, которые больше, чем "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "Ðайдены файлы Ñ Ñубтитрами CC, XML-чаÑть которых больше, чем "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Ðайдены файлы Ñ Ñубтитрами, которые больше, чем "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -323,7 +376,7 @@ msgstr ""
"Ðайдена Ñтрока Ñубтитров, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð»Ð¸Ð½Ð½ÐµÐµ 52 Ñимволов. РекомендуетÑÑ "
"ограничить длину вÑех Ñтрок до 52 Ñимволов."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -331,7 +384,7 @@ msgstr ""
"Ðайдена Ñтрока Ñубтитров, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð»Ð¸Ð½Ð½ÐµÐµ 79 Ñимволов. Ð’Ñ‹ должны ограничить "
"длину вÑех Ñтрок до 79 Ñимволов."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -339,7 +392,7 @@ msgstr ""
"Ðайдены Ñубтитры из более трёх Ñтрок. РекомендуетÑÑ Ð¸Ñпользовать не более "
"трёх Ñтрок."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -347,7 +400,7 @@ msgstr ""
"Ðайдены Ñубтитры, продолжительноÑть которых менее 15 кадров. РекомендуетÑÑ "
"задать продолжительноÑть Ð´Ð»Ñ Ð²Ñех Ñубтитров как минимум 15 кадров."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -356,7 +409,7 @@ msgstr ""
"предыдущего. РекомендуетÑÑ Ð·Ð°Ð´Ð°Ñ‚ÑŒ промежуток между Ñубтитрами как минимум 2 "
"кадра."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
#, fuzzy
msgid ""
"At least one piece of subtitle content has no specified language. It is "
@@ -379,72 +432,72 @@ msgstr "ЧаÑтота аудио будет изменена на %1 Гц"
msgid "Audio will not be resampled"
msgstr "ЧаÑтота аудио не будет изменена"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 раÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð³Ð°Ð¼Ð¼Ð° (ECG)"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 поÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 Ð´Ð»Ñ 10-битной ÑиÑтемы"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 Ð´Ð»Ñ 12-битной ÑиÑтемы"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 непоÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Бит на пикÑель"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Фильтр деинтерлейÑинга bwdif"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Отменено"
@@ -456,11 +509,11 @@ msgstr "Ðе может Ñодержать ÑлÑши"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Ðевозможно обработать формат пикÑÐµÐ»Ñ %1 во Ð²Ñ€ÐµÐ¼Ñ %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Ðевозможно Ñоздать KDM, Ñ‚.к. Ñтот проект не зашифрован."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "C - Центральный"
@@ -468,7 +521,7 @@ msgstr "C - Центральный"
msgid "Channels"
msgstr "Каналы"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "Проверьте их новые наÑтройки и попробуйте Ñнова."
@@ -477,27 +530,32 @@ msgstr "Проверьте их новые наÑтройки и попробуÐ
msgid "Checking content"
msgstr "Проверка контента на предмет изменений"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Проверка данных изображениÑ"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "ХроматичеÑÐºÐ°Ñ Ð¿Ð¾ÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "ХроматичеÑÐºÐ°Ñ Ð½ÐµÐ¿Ð¾ÑтоÑÐ½Ð½Ð°Ñ ÑркоÑть"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Скрытые Ñубтитры"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Открытые Ñубтитры (вшитые)"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "ОÑновные цвета"
@@ -511,17 +569,17 @@ msgstr "ОÑновные цвета"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð³Ð°Ð¼Ð¼Ð°"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "ХарактериÑтика цветопередачи"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Цветовое проÑтранÑтво"
@@ -529,15 +587,15 @@ msgstr "Цветовое проÑтранÑтво"
msgid "Combine DCPs"
msgstr "Объединить DCP"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Проверка целоÑтноÑти"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Проверка целоÑтноÑти"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "ПоздравлениÑ!"
@@ -555,19 +613,19 @@ msgstr "тип контента"
msgid "Content sample rate"
msgstr "ЧаÑтота диÑкретизации аудио-контента"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь либо не иметь аудио"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь либо не иметь Ñубтитры"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь либо не иметь видео"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -579,13 +637,13 @@ msgid "Content to be joined must have all its video used or not used."
msgstr ""
"ВеÑÑŒ добавлÑемый видеоконтент должен быть помечен как иÑпользуемый либо нет."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"ВеÑÑŒ добавлÑемый контент должен иметь одинаковые наÑтройки \"вшить "
"Ñубтитры\"."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"ВеÑÑŒ добавлÑемый контент должен иметь одинаковые наÑтройки \"иÑпользовать "
@@ -624,7 +682,7 @@ msgstr "ВеÑÑŒ добавлÑемый контент должен иметь Ð
msgid "Content to be joined must have the same fades."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковое затухание."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковую ширину контура."
@@ -632,41 +690,41 @@ msgstr "ВеÑÑŒ добавлÑемый контент должен иметь Ð
msgid "Content to be joined must have the same picture size."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый размер изображениÑ."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
"ВеÑÑŒ добавлÑемый контент должен иметь одинаковое горизонтальное Ñмещение "
"Ñубтитров."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
"ВеÑÑŒ добавлÑемый контент должен иметь одинаковый размер Ñубтитров по "
"горизонтали."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
"ВеÑÑŒ добавлÑемый контент должен иметь одинаковое вертикальное Ñмещение "
"Ñубтитров."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr ""
"ВеÑÑŒ добавлÑемый контент должен иметь одинаковый размер Ñубтитров по "
"вертикали."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковое затухание Ñубтитров."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"ВеÑÑŒ добавлÑемый контент должен иметь одинаковый межÑтрочный интервал "
"Ñубтитров."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковую чаÑтота кадров видео"
@@ -674,23 +732,23 @@ msgstr "ВеÑÑŒ добавлÑемый контент должен иметь Ð
msgid "Content to be joined must have the same video frame type."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый тип кадров видео."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "ВеÑÑŒ добавлÑемый контент должен иÑпользовать ту же дорожку DCP."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковые шрифты."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь ту же дорожку Ñубтитров."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "ВеÑÑŒ добавлÑемый контент должен иметь одинаковый Ñзык текÑта."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Разрешение контента: %1x%2"
@@ -698,14 +756,6 @@ msgstr "Разрешение контента: %1x%2"
msgid "Copy DCP to TMS"
msgstr "Копировать DCP на TMS (Theater Management System)"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Копирую Ñтарый видеофайл"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Копирую видеофайл в DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Ðе удалоÑÑŒ подключитьÑÑ Ðº Ñерверу %1 (%2)"
@@ -722,20 +772,21 @@ msgstr "Ðе удалоÑÑŒ декодировать JPEG2000-файл(Ñ‹) %1 (%
msgid "Could not decode image (%1)"
msgstr "Ðе удалоÑÑŒ декодировать изображение (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Ðе удалоÑÑŒ открыть загруженный ZIP-файл"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Ðе удалоÑÑŒ доÑтучатьÑÑ Ð´Ð¾ удалённого Ñервера кодированиÑ. Возможно запущена "
"ещё одна ÐºÐ¾Ð¿Ð¸Ñ DCP-o-matic."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Ðе удалоÑÑŒ открыть %1"
@@ -743,19 +794,19 @@ msgstr "Ðе удалоÑÑŒ открыть %1"
msgid "Could not open %1 to send"
msgstr "Ðе удалоÑÑŒ открыть %1 Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Ðе удалоÑÑŒ открыть загруженный ZIP-файл"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Ðе удалоÑÑŒ открыть загруженный ZIP-файл (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Ðе удалоÑÑŒ открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "Ðе удалоÑÑŒ открыть файл вывода %1 (%2)"
@@ -771,19 +822,19 @@ msgstr "Ðе удалоÑÑŒ начать передачу"
msgid "Could not write to remote file (%1)"
msgstr "Ðе удалоÑÑŒ запиÑать в удалённый файл (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX оÑновной (DBP)"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX второÑтепенный (DBS)"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -795,7 +846,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML Ñубтитры"
@@ -812,50 +863,35 @@ msgstr "DCP будет воÑпроизводитьÑÑ Ð½Ð° %.1f%% от ÑкоÑ
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP будет иÑпользовать каждый второй кадр контента.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic не удалоÑÑŒ открыть файл %1 (%2). Возможно, он не ÑущеÑтвует или "
-"имеет неожиданный формат."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки DCP как OV. ПожалуйÑта, "
-"проверьте Ñти наÑтройки, чтобы убедитьÑÑ, что Ñто то, чего вы хотите."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic пришлоÑÑŒ изменить ваши наÑтройки. Теперь чаÑтота кадров фильма "
-"ÑоответÑтвует вашему контенту Atmos."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr ""
-"DCP-o-matic больше не поддерживает фильтр `%1', поÑтому он был выключен."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "Уведомление DCP-o-matic"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 или AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "ДеинтерлейÑинг"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -867,7 +903,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Уважаемый киномеханик\n"
"\n"
@@ -881,11 +917,15 @@ msgstr ""
"С наилучшими пожеланиÑми,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 или CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Ошибка загрузки (%1 ошибка %2)"
@@ -910,19 +950,19 @@ msgstr "Отправка ключей KDM Ð´Ð»Ñ %1"
msgid "Email notification"
msgstr "Почтовое уведомление"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Сообщить о проблеме"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Сообщить о проблеме Ð´Ð»Ñ %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Завершено"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "EPS (Эпизод)"
@@ -930,20 +970,20 @@ msgstr "EPS (Эпизод)"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Ошибка в файле Ñубтитров: найдено %1, Ñ…Ð¾Ñ‚Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¾ÑÑŒ %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Ошибка: (%1)"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Проверка Ñубтитров"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Проверка аудио, открытых и Ñкрытых Ñубтитров"
@@ -955,15 +995,15 @@ msgstr "Проверка контента"
msgid "Examining subtitles"
msgstr "Проверка Ñубтитров"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Проверка Ñубтитров"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Извлечение"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -971,52 +1011,52 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Ошибка аутентификации на Ñервере (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Ошибка ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ DCP."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Ошибка отправки пиÑьма"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "FTR (Полнометражный фильм)"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "Файлы были изменены поÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² проект."
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Проект"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "РаÑчёт длительноÑти"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "ЧаÑтота кадров"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "ПÑтница"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Полный"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Полный (0-%1)"
@@ -1040,35 +1080,35 @@ msgstr "ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° видеокадров Ð´Ð»Ñ Ñ‡Ð°Ñтоты кÐ
msgid "Full length in video frames at content rate"
msgstr "ÐŸÐ¾Ð»Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° видеокадров Ð´Ð»Ñ Ñ‡Ð°Ñтоты кадров контента"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Гамма 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Гамма 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Разбиение градиента"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Ð”Ð»Ñ ÑлабоÑлышащих"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Ð’Ñ‹ÑококачеÑтвенный подавитель шума 3D"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Отразить по горизонтали"
@@ -1076,21 +1116,21 @@ msgstr "Отразить по горизонтали"
msgid "Hz"
msgstr "Гц"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB или sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
"ЕÑли вы иÑпользуете 25 кадр/Ñек, вам Ñледует изменить Ñтандарт вашего DCP на "
"SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
#, fuzzy
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
@@ -1101,15 +1141,15 @@ msgstr ""
"причины Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Interop. РекомендуетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ñтандарт DCP на "
"SMPTE на вкладке \"DCP\"."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1117,73 +1157,74 @@ msgstr ""
"РекомендуетÑÑ Ñ€Ð°Ñположить первый Ñубтитр поÑле 4 Ñекунд от начала, чтобы "
"гарантировать его видимоÑть."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "ÐеизвеÑтно, что вызвало Ñту ошибку."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "ДоÑтавка KDM: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "ДеинтерлейÑинг Ñдром"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "L - Левый"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "LC - Левый центральный"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "LRS - Левый задний объёмный"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "LS - Левый объёмный"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "ДлительноÑть"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "LFE"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "LFE - ÐЧ (Ñабвуфер)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Ограничен"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Ограничен (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Линейный"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "ЛогарифмичеÑкий (диапазон 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "ЛогарифмичеÑкий (диапазон 316:1)"
@@ -1191,7 +1232,7 @@ msgstr "ЛогарифмичеÑкий (диапазон 316:1)"
msgid "Lost communication between main and writer processes"
msgstr "ПотерÑна ÑвÑзь между оÑновным и запиÑывающим процеÑÑами"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1199,24 +1240,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Декодер mid-side"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Разное"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "ÐеÑоответÑтвие количеÑтва аудиоканалов в DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "ÐеÑоответÑтвие чаÑтоты диÑкретизации аудио в DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "ÐеÑоответÑтвие чаÑтоты кадров в DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "ÐеÑоответÑтвие размера видео в DCP"
@@ -1224,19 +1265,19 @@ msgstr "ÐеÑоответÑтвие размера видео в DCP"
msgid "Missing required setting %1"
msgstr "ОтÑутÑтвует обÑзательный параметр %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Понедельник"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Моно"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "ДиентерлейÑер компенÑации движениÑ"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "В DCP не обнаружены CPL-файлы."
@@ -1250,79 +1291,93 @@ msgstr "Ð’ наÑтройках не задан почтовый Ñервер"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Ð’ наÑтройках не задан почтовый Ñервер"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Ð’ папке не найдено подходÑщих изображений."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Подавление шума"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Ðе задан"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "Готово! (выполнено за %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "Готово! (выполнено за %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Только первый Ñлемент добавлÑемого контента может иметь обрезку Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
"Только поÑледний Ñлемент добавлÑемого контента может иметь обрезку Ñ ÐºÐ¾Ð½Ñ†Ð°."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Скрытые Ñубтитры"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Открытые Ñубтитры (вшитые)"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
+#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Откройте проект DCP-o-matic, проверьте наÑтройки, Ñохраните их и попробуйте "
"ещё раз."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "ОриентациÑ"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "ÐедоÑтаточно памÑти"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Подавитель шума owdenoise"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"ПожалуйÑта, Ñообщите о данной проблеме, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐŸÐ¾Ð¼Ð¾Ñ‰ÑŒ -> Сообщить о "
+"проблеме. Или отправьте пиÑьмо на carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "POL (СтратегичеÑкий трейлер)"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Подготовлено Ð´Ð»Ñ Ñ‡Ð°Ñтоты кадров видео"
@@ -1330,93 +1385,93 @@ msgstr "Подготовлено Ð´Ð»Ñ Ñ‡Ð°Ñтоты кадров видео"
msgid "Programming error at %1:%2 %3"
msgstr "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "PRO (Промо-ролик)"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "PSA (Ð¡Ð¾Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€ÐµÐºÐ»Ð°Ð¼Ð°)"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "RTG (Рейтинговый)"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "R - Правый"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "RC - Правый центральный"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "RRS - Правый задний объёмный"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "RS - Правый объёмный"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Повернуть на 90º против чаÑовой Ñтрелки"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Повернуть на 90º по чаÑовой Ñтрелке"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1427,23 +1482,23 @@ msgstr ""
"титров). Ð’Ñ‹ должны добавить Ñти маркеры, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ½Ð¾Ð¿ÐºÑƒ \"Маркеры\" на "
"вкладке \"DCP\"."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 Ð´Ð»Ñ 10, 12, 14 и 16-битных ÑиÑтем"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1456,27 +1511,27 @@ msgstr "Ошибка SSH [%1]"
msgid "SSH error [%1] (%2)"
msgstr "Ошибка SSH [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Суббота"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Сканирование файлов изображений"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Отправка почты"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "SHR (Короткометражный фильм)"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "ЖеÑÑ‚"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Размер"
@@ -1484,11 +1539,11 @@ msgstr "Размер"
msgid "Some audio will be resampled to %1Hz"
msgstr "ЧаÑтота некоторых аудио будет изменена на %1 Гц"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr "Ðекоторые файлы изменилиÑÑŒ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° их Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² проект."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1511,7 +1566,7 @@ msgstr ""
"Эти файлы ÑÐµÐ¹Ñ‡Ð°Ñ Ð±ÑƒÐ´ÑƒÑ‚ перепроверены. Возможно, вам придётÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ‚ÑŒ их "
"наÑтройки."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
@@ -1519,7 +1574,7 @@ msgstr ""
"Ðекоторые из ваших Ñкрытых Ñубтитров занимают более %1 Ñтрок. Они будут "
"обрезаны."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1541,11 +1596,11 @@ msgstr "ЧаÑть вашего контента требует KDM"
msgid "Some of your content needs an OV"
msgstr "ЧаÑть вашего контента требует OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Стерео"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Стерео"
@@ -1558,19 +1613,19 @@ msgstr "Преобразователь Стерео->5.1 типа A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Преобразователь Стерео->5.1 типа B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "ВоÑкреÑенье"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "TSR (Тизер)"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Фильтр Telecine"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "TST (ТеÑтовый ролик)"
@@ -1590,25 +1645,25 @@ msgstr "Цепочка Ñертификатов Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи невер
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Цепочка Ñертификатов Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи неверна (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1618,7 +1673,7 @@ msgstr ""
"тип 2D. Тем не менее, вы можете Ñделать 3D DCP, отметив опцию 3D на вкладке "
"\"DCP->Видео\"."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1626,23 +1681,37 @@ msgstr ""
"Ðа уÑтройÑтво, на котором хранитÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚, заканчиваетÑÑ Ð¼ÐµÑто. ОÑвободите "
"меÑто и попробуйте Ñнова."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Файл %1 был перемещен на %2 миллиÑекунд ранее."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Файл %1 был перемещен на %2 миллиÑекунд позднее."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Файл %1 был обрезан на %2 миллиÑекунд меньше."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Файл %1 был обрезан на %2 миллиÑекунд больше."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1657,11 +1726,11 @@ msgstr ""
"к вашему контенту, при уÑловии, что ваша Ð¿Ñ€Ð¾ÐµÐºÑ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема поддерживает "
"выбранную вами чаÑтоту кадров DCP."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "В данном DCP нет видео"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1671,31 +1740,34 @@ msgstr ""
"попробуйте уменьшить чиÑло потоков ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÐаÑтройках на вкладке "
"\"ОÑновные\"."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
"Этот KDM был Ñделан Ð´Ð»Ñ DCP-o-matic, но не Ð´Ð»Ñ ÐµÐ³Ð¾ конечного Ñертификата."
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr "Этот KDM не был Ñделан Ð´Ð»Ñ Ñертификата раÑшифровки DCP-o-matic."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"ВероÑтно, Ñта ошибка произошла в 32-битной верÑии DCP-o-matic при попытке "
"иÑпользовать Ñлишком много потоков кодированиÑ. ПожалуйÑта, уменьшите чиÑло "
"потоков ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÐаÑтройках на вкладке \"ОÑновные\" и попробуйте Ñнова."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"ВероÑтно, Ñта ошибка произошла в 32-битной верÑии DCP-o-matic. ПожалуйÑта, "
"уÑтановите 64-битную верÑию и попробуйте Ñнова."
@@ -1708,45 +1780,47 @@ msgstr ""
"Этот файл - ключ KDM. Ключи нужно добавлÑть нажатием правой кнопки мыши на "
"контент и выбором \"Добавить KDM\"."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Проект был Ñоздан более новой верÑией DCP-o-matic и не может быть загружен "
"Ñтой верÑией. Извините!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Проект был Ñоздан более Ñтарой верÑией DCP-o-matic и, к Ñожалению, не может "
"быть загружен Ñтой верÑией. Вам необходимо Ñоздать новый проект, заново "
"добавить контент и повторно наÑтроить его. Извините!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Четверг"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Субтитры"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "TRL (Трейлер)"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "ТранÑкодирование %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "XSN (Транзитный)"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Вторник"
@@ -1754,7 +1828,7 @@ msgstr "Вторник"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Ðеожиданное Ñодержимое ZIP-файла"
@@ -1762,35 +1836,35 @@ msgstr "Ðеожиданное Ñодержимое ZIP-файла"
msgid "Unexpected image type received by server"
msgstr "Сервером получен неожиданный тип изображениÑ"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "ÐеизвеÑтно"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "ÐераÑпознанный формат аудио (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Ðерезкое маÑкирование и Размытие по ГауÑÑу"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Ðе указано"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "БезымÑнный"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Ðе иÑпользуетÑÑ"
@@ -1802,7 +1876,7 @@ msgstr "Преобразовать Л"
msgid "Upmix R"
msgstr "Преобразовать П"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1810,11 +1884,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Проверить DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Отразить по горизонтали"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Ð”Ð»Ñ ÑлабовидÑщих"
@@ -1822,23 +1896,23 @@ msgstr "Ð”Ð»Ñ ÑлабовидÑщих"
msgid "Waiting"
msgstr "Ожидание"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Фильтр Weave"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Среда"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Фильтр деинтерлейÑинга YADIF"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1849,7 +1923,7 @@ msgstr ""
"поддерживаетÑÑ Ð½Ðµ вÑеми проекторами. РекомендуетÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ чаÑтоту кадров "
"вашего DCP на %2 кадр/Ñек."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1859,7 +1933,7 @@ msgstr ""
"поддерживаетÑÑ Ð½Ðµ вÑеми проекторами. Возможно, вы захотите изменить чаÑтоту "
"на %2 кадр/Ñек."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1868,19 +1942,11 @@ msgstr ""
"поддерживаетÑÑ Ð½Ðµ вÑеми проекторами. Учтите, что у Ð²Ð°Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть проблемы "
"ÑовмеÑтимоÑти."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Ð’Ñ‹ иÑпользуете 3D контент, но ваш DCP имеет тип 2D. Измените тип DCP на 3D, "
-"еÑли хотите воÑпроизвеÑти его на 3D-ÑиÑтеме (напр. Real-D, MasterImage и Ñ‚."
-"п.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Ð’Ñ‹ иÑпользуете преобразователь Стерео->5.1. Это ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¸ "
@@ -1888,7 +1954,16 @@ msgstr ""
"проÑлушать полученный DCP в кинотеатре, чтобы убедитьÑÑ, что он звучит "
"хорошо."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Ð’Ñ‹ иÑпользуете 3D контент, но ваш DCP имеет тип 2D. Измените тип DCP на 3D, "
+"еÑли хотите воÑпроизвеÑти его на 3D-ÑиÑтеме (напр. Real-D, MasterImage и Ñ‚."
+"п.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1896,7 +1971,7 @@ msgstr ""
"У Ð²Ð°Ñ %1 файлов, которые похожи на VOB-файлы из DVD. Вам необходимо "
"объединить их, чтобы гарантировать плавный переход между файлами."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1904,7 +1979,7 @@ msgstr ""
"Обнаружено неÑколько чаÑтей контента Atmos Ñ Ñ€Ð°Ð·Ð½Ð¾Ð¹ чаÑтотой кадров. Вам "
"нужно удалить чаÑть контента Atmos."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1912,7 +1987,7 @@ msgstr ""
"Ваши Ñкрытые Ñубтитры Ñодержат переÑÐµÑ‡ÐµÐ½Ð¸Ñ (overlap), которые не допуÑкаютÑÑ "
"Ð´Ð»Ñ Interop DCP. Измените ваш Ñтандарт DCP на SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1924,26 +1999,27 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Вам необходимо добавить контент в DCP перед его Ñозданием"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"Ваш DCP Ñодержит менее 6 аудиоканалов. Это может вызвать проблемы на "
"некоторых проекторах. Возможно, вы захотите указать 6 каналов Ð´Ð»Ñ DCP. "
"Даже еÑли у Ð²Ð°Ñ Ð¼ÐµÐ½ÑŒÑˆÐµ каналов, DCP-o-matic автоматичеÑки заполнит "
"недоÑтающие тишиной."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1952,7 +2028,7 @@ msgstr ""
"привеÑти к проблемам на некоторых проекторах. ЕÑли возможно, иÑпользуйте "
"Ñоотношение Ñторон Flat или Scope Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð° DCP."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1960,14 +2036,14 @@ msgstr ""
"Уровень вашего аудио Ñлишком выÑок (на %1). Вам Ñтоит понизить уровень "
"уÑÐ¸Ð»ÐµÐ½Ð¸Ñ (gain) вашего аудиоконтента."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"Ð’ вашем проекте ÑодержитÑÑ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, который не был привÑзан к границе "
"кадра."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1975,21 +2051,21 @@ msgstr ""
"Ð’ вашем проекте ÑодержитÑÑ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, обрезка которого не была выровнена "
"по границе кадра."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[движущийÑÑ]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[Ñтатичный]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[Ñубтитры]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_reel%1"
@@ -2021,11 +2097,11 @@ msgstr "копирование %1"
msgid "could not find stream information"
msgstr "не удалоÑÑŒ найти информацию о потоке"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "не удалоÑÑŒ перемеÑтить atmos в DCP-пакет (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "не удалоÑÑŒ перемеÑтить аудио в DCP-пакет (%1)"
@@ -2053,7 +2129,7 @@ msgstr "не удалоÑÑŒ запиÑать в файл %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_read (%1)"
@@ -2061,62 +2137,72 @@ msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_read (%1)"
msgid "error during async_write (%1)"
msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "кадра(ов) в Ñекунду"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "ч"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "чаÑтота кадров проекта отличаетÑÑ Ð¾Ñ‚ чаÑтоты кадров DCP."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr "имеетÑÑ Ð¾Ð±Ñ€ÐµÐ·ÐºÐ° Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°, поÑтому Ñубтитры должны быть перезапиÑаны."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "ÑвлÑетÑÑ 2K, а проект - 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "ÑвлÑетÑÑ 4K, а проект - 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "ÑвлÑетÑÑ Interop, а проект наÑтроен как SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "ÑвлÑетÑÑ SMPTE, а проект наÑтроен как Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "перекрывает другой аудиоконтент; удалите другой контент."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "перекрывает другой аудиоконтент; удалите другой контент."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "перекрывает другой видеоконтент; удалите другой контент."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2125,16 +2211,16 @@ msgstr ""
"режим чаÑтей фильма \"РазделÑть по видеоконтенту\"."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "размер кадра видео в проекте отличаетÑÑ Ð¾Ñ‚ размера видео DCP."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "м"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "движущийÑÑ"
@@ -2143,7 +2229,7 @@ msgid "name"
msgstr "название"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2152,7 +2238,7 @@ msgstr ""
"быть перезапиÑан."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
@@ -2161,31 +2247,39 @@ msgstr ""
"быть перезапиÑан."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "Ñ"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "Ñтатичный"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "перекрывает другой текÑтовый контент; удалите другой контент."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "неизвеÑтно"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "видеокадры"
+#~ msgid "Copying old video file"
+#~ msgstr "Копирую Ñтарый видеофайл"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Копирую видеофайл в DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "Уведомление DCP-o-matic"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "перекрывает другой текÑтовый контент; удалите другой контент."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "во вÑех чаÑÑ‚ÑÑ… фильма нет Ñкрытых Ñубтитров (CC)."
@@ -2196,13 +2290,6 @@ msgstr "видеокадры"
#~ msgstr "во вÑех чаÑÑ‚ÑÑ… фильма нет звука."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "ПожалуйÑта, Ñообщите о данной проблеме, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐŸÐ¾Ð¼Ð¾Ñ‰ÑŒ -> Сообщить о "
-#~ "проблеме. Или отправьте пиÑьмо на carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "Ваш Ñтандартный контейнер некорректен, поÑтому был изменён на Flat "
diff --git a/src/lib/po/sk_SK.po b/src/lib/po/sk_SK.po
index 8c252a04f..fe04381a2 100644
--- a/src/lib/po/sk_SK.po
+++ b/src/lib/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2016-01-06 00:23+0100\n"
"Last-Translator: Tomáš HlaváÄ\n"
"Language-Team: \n"
@@ -18,7 +18,7 @@ msgstr ""
"X-Generator: Poedit 1.8.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, fuzzy, c-format
msgid ""
"\n"
@@ -27,7 +27,7 @@ msgstr ""
"\n"
"Snímacia frekvencia obsahu %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
#, fuzzy
msgid ""
"\n"
@@ -36,7 +36,7 @@ msgstr ""
"\n"
"Zmenšené na %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, fuzzy, c-format
msgid ""
"\n"
@@ -45,7 +45,7 @@ msgstr ""
"\n"
"Pomer strán displeja %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
#, fuzzy
msgid ""
"\n"
@@ -54,7 +54,7 @@ msgstr ""
"\n"
"Vyplnené Äiernou, aby sa zmestil do kontajnera %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
#, fuzzy
msgid ""
"\n"
@@ -63,18 +63,18 @@ msgstr ""
"\n"
"Zmenšené na %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr ""
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr ""
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -88,41 +88,83 @@ msgid ""
"Size: $SIZE\n"
msgstr ""
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr ""
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
#, fuzzy
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [zvuk]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [video]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
#, fuzzy
msgid "%1 [video]"
msgstr "%1 [video]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic nemohol otvoriť %1. Možno, že súbor neexistuje alebo nie je "
+"podporovaný."
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+msgid "%1 notification"
+msgstr ""
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, fuzzy, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", pomer strán obrazových bodov %.2f:1"
@@ -161,11 +203,11 @@ msgstr ""
msgid "1.90 (Full frame)"
msgstr "Full frame (Celý obraz)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -178,68 +220,68 @@ msgstr ""
msgid "2.39 (Scope)"
msgstr ""
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D denoiser"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr ""
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr ""
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr ""
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Reklama"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -247,14 +289,14 @@ msgid ""
"tab."
msgstr ""
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
"DCP's container to have the same ratio as your content."
msgstr ""
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Vyskytla sa chyba poÄas spracovávania súboru %1."
@@ -263,59 +305,59 @@ msgstr "Vyskytla sa chyba poÄas spracovávania súboru %1."
msgid "Analysing audio"
msgstr "Analyzovať zvuk"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
#, fuzzy
msgid "Analysing subtitles"
msgstr "Hľadám titulky"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -334,73 +376,73 @@ msgstr "Zvuk bude re-samplovaný na %1Hz"
msgid "Audio will not be resampled"
msgstr "Zvuk nebude resamplovaný"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 rozšírený rozsah farieb"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 konštansta jasu"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 pre 10-bit systém"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 pre 12-bit systém"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 non-constant luminance"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr ""
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bitov na pixel"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
#, fuzzy
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Len Äalší deinterlacing filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Zrušené"
@@ -413,11 +455,11 @@ msgstr "nemôže obsahovať lomky"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Nemôžem spracovaÅ¥ formát pixelu %1 poÄas %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr ""
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Center"
@@ -426,7 +468,7 @@ msgstr "Center"
msgid "Channels"
msgstr "Zvukové kanály"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -435,30 +477,35 @@ msgstr ""
msgid "Checking content"
msgstr "VypoÄítavam obsah"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Kontrolujem existujúce video dáta"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
#, fuzzy
msgid "Chroma-derived constant luminance"
msgstr "BT2020 konštansta jasu"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
#, fuzzy
msgid "Chroma-derived non-constant luminance"
msgstr "BT2020 non-constant luminance"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
#, fuzzy
msgid "Closed captions"
msgstr "Redukcia hluku"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "[titulky]"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Primárne voľby fariem"
@@ -472,17 +519,17 @@ msgstr "Primárne voľby fariem"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Rozsah farieb"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Charakteristika prenosu farieb"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Farebný priestor"
@@ -490,16 +537,16 @@ msgstr "Farebný priestor"
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "PoÄítam zhrnutie"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
#, fuzzy
msgid "Computing digests"
msgstr "PoÄítam zhrnutie"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -517,22 +564,22 @@ msgstr "typ obsahu"
msgid "Content sample rate"
msgstr "Snímacia frekvencia obsahu"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
#, fuzzy
msgid "Content to be joined must all have or not have audio"
msgstr "Aby sa spojil obsah, musí mať tú istú hlasitosť zvuku."
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
#, fuzzy
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú X mierku. "
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
#, fuzzy
msgid "Content to be joined must all have or not have video"
msgstr "Aby sa spojil obsah, musí mať rovnaké miznutie."
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
#, fuzzy
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
@@ -543,11 +590,11 @@ msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú X mierku. "
msgid "Content to be joined must have all its video used or not used."
msgstr "Aby sa spojil obsah, musí maÅ¥ rovnaký poÄet obrázkov za sekundu."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr "Aby sa spojil obsah, musí mať tie isté 'vypálené titulky' nastavenia."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr "Aby sa spojil obsah, musí mať tie isté 'použiť titulky' nastavenia."
@@ -586,7 +633,7 @@ msgstr "Aby sa spojil obsah, musí mať rovnaké nastavenia orezania."
msgid "Content to be joined must have the same fades."
msgstr "Aby sa spojil obsah, musí mať rovnaké miznutie."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
#, fuzzy
msgid "Content to be joined must have the same outline width."
msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú X mierku. "
@@ -595,33 +642,33 @@ msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú X mierku. "
msgid "Content to be joined must have the same picture size."
msgstr "Aby sa spojil obsah, musí mať rovnakú veľkosť obrazu."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "Aby sa spojil obsah, musí mať rovnaký titulkový X offset. "
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú X mierku. "
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "Aby sa spojil obsah, musí mať rovnaký titulkový Y offset."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú Y mierku."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
#, fuzzy
msgid "Content to be joined must have the same subtitle fades."
msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú X mierku. "
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
#, fuzzy
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "Aby sa spojil obsah, musí mať rovnakú titulkovú X mierku. "
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
#, fuzzy
msgid "Content to be joined must have the same video frame rate"
msgstr "Aby sa spojil obsah, musí maÅ¥ rovnaký poÄet obrázkov za sekundu."
@@ -630,25 +677,25 @@ msgstr "Aby sa spojil obsah, musí maÅ¥ rovnaký poÄet obrázkov za sekundu."
msgid "Content to be joined must have the same video frame type."
msgstr "Aby sa spojil obsah, musí mať rovnaký typ videa."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
#, fuzzy
msgid "Content to be joined must use the same DCP track."
msgstr "Aby sa spojil obsah, musí používať rovnaké písma."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Aby sa spojil obsah, musí používať rovnaké písma."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Aby sa spojil obsah, musí používať rovnaký titulkový stream."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
#, fuzzy
msgid "Content to be joined must use the same text language."
msgstr "Aby sa spojil obsah, musí používať rovnaké písma."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Video je %1x%2"
@@ -656,15 +703,6 @@ msgstr "Video je %1x%2"
msgid "Copy DCP to TMS"
msgstr "Kopírovať DCP do TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-#, fuzzy
-msgid "Copying video file into DCP"
-msgstr "Nehoduje sa veľkosť videa v DCO"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Nemôžem sa pripojiť k serveru %1 (%2)"
@@ -682,20 +720,21 @@ msgstr "Nemôžem dekódovať JPEG2000 súbor %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Nemôžem dekódovať video súbor (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Nemôžem otvoriť ZIP súbor"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Nemôžem skontrolovať vzdialené enkódovacie servre. Možno je už DCP-o-matic "
"zapnutý."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Nemôžem otvoriť %1"
@@ -703,21 +742,21 @@ msgstr "Nemôžem otvoriť %1"
msgid "Could not open %1 to send"
msgstr "Nemôžem otvoriť %1 na poslanie"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Nemôžem otvoriť ZIP súbor"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
#, fuzzy
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Nemôžem otvoriť ZIP súbor"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
#, fuzzy
msgid "Could not open file for writing"
msgstr "Datei konnte nicht zum Lesen geöffnet werden."
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
#, fuzzy
msgid "Could not open output file %1 (%2)"
msgstr "nemôžem zapisovať do súboru %1 (%2)"
@@ -735,19 +774,19 @@ msgstr "Nemôžem zaÄaÅ¥ prenos"
msgid "Could not write to remote file (%1)"
msgstr "Nemôžem zapisovať do vzdialeného súboru (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX primárne"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX sekundárne"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -761,7 +800,7 @@ msgstr "Flat"
msgid "DCI Scope"
msgstr "Scope (2.39:1)"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML titulky"
@@ -779,46 +818,35 @@ msgstr "DCP bude bežať na %.1f%% obsahu videa.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP bude používať každý druhý frame obsahu \n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
-#, fuzzy
-msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
-msgstr ""
-"DCP-o-matic nemohol otvoriť %1. Možno, že súbor neexistuje alebo nie je "
-"podporovaný."
-
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic nepodporuje `%1' filter, takže filter bude vypnutý."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "De-interlacing"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -830,7 +858,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Milý premietaÄ,\n"
"\n"
@@ -844,12 +872,16 @@ msgstr ""
"Ďakujem a prajem pekný deň,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
#, fuzzy
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 a CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
#, fuzzy
msgid "Download failed (%1 error %2)"
msgstr "SÅ¥ahovanie zlyhalo (%1/%2 chyba %3)"
@@ -875,19 +907,19 @@ msgstr "Email KDM pre %1"
msgid "Email notification"
msgstr ""
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Správa o probléme s Emailom"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Správa o probléme s Emailom pre %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr ""
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -896,20 +928,20 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Chyba v SubRip súbore: videný %1 a bol oÄakávaný %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Chyba: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Hľadám titulky"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr ""
@@ -923,17 +955,17 @@ msgstr "VypoÄítavam obsah"
msgid "Examining subtitles"
msgstr "Hľadám titulky"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
#, fuzzy
msgid "Examining subtitles and closed captions"
msgstr "Hľadám titulky"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
#, fuzzy
msgid "Extracting"
msgstr "Prístupnosť"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -941,57 +973,57 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Chyba pri autentifikovaní so serverom (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
#, fuzzy
msgid "Failed to encode the DCP."
msgstr "Chyba pri posielaní emailu (%1)"
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
#, fuzzy
msgid "Failed to send email"
msgstr "Chyba pri posielaní emailu (%1)"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Feature"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filename"
msgstr "meno"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "meno"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
#, fuzzy
msgid "Finding length"
msgstr "Dĺžka videa"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
#, fuzzy
msgid "Frame rate"
msgstr "Frame rate videa (poÄet obrázkov za sekundu)"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Piatok"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Full"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Full (0-%1)"
@@ -1016,35 +1048,35 @@ msgstr ""
msgid "Full length in video frames at content rate"
msgstr ""
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradient debander"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Sluchovo postihnutý(í)"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Vysoko kvalitný 3D denoiser"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
#, fuzzy
msgid "Horizontal flip"
msgstr "Horizontaler De-Blocker"
@@ -1053,106 +1085,107 @@ msgstr "Horizontaler De-Blocker"
msgid "Hz"
msgstr ""
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB alebo sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Neviem, Äo zapríÄinilo túto chybu."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr ""
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "KDM donáška: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Kernel deinterlacer"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Left (Ľavá)"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Left centre (Ľavý stred)"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Left rear surround (Ľavý zadný priestorový)"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Left surround (Ľavý zadný)"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr ""
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (Subwoofer)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Limitovaný"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Limitovaný (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Lineárny"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logarmitmický (rozsah 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logarmitmický (rozsah 316:1 )"
@@ -1160,7 +1193,7 @@ msgstr "Logarmitmický (rozsah 316:1 )"
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1168,24 +1201,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Mid-side dekóder"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Rôzne"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "PoÄet zvukových kanálov sa nezhoduje v DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Vzorkovací kmitoÄet zvuku sa nezhoduje v DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Nezhoduje sa poÄet obrázkov za sekundu v DPC"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Nehoduje sa veľkosť videa v DCO"
@@ -1194,19 +1227,19 @@ msgstr "Nehoduje sa veľkosť videa v DCO"
msgid "Missing required setting %1"
msgstr "chýbajúce potrebné nastavenia %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Pondelok"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr ""
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Pohybový kompenzaÄný odstraňovaÄ"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr ""
@@ -1218,76 +1251,86 @@ msgstr ""
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr ""
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Žiadne platné súbory nebolo nájdené v prieÄinku."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Redukcia hluku"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr ""
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (hotovo za %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (hotovo za %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "Iba prvá ÄasÅ¥ pripojeného obsahu môže byÅ¥ upravená od zaÄiatku."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Iba posledná ÄasÅ¥ pripojeného obsahu môže byÅ¥ upravená od konca."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Redukcia hluku"
+
+#: src/lib/text_type.cc:79
#, fuzzy
msgid "Open subtitles"
msgstr "[titulky]"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Málo pamäte"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Overcomplete wavelet denoiser"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Policy"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr ""
@@ -1296,119 +1339,119 @@ msgstr ""
msgid "Programming error at %1:%2 %3"
msgstr "Chyba pri programovaní na %1:%2"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Public Service Announcement (Verejné oznámenie služby)"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Prístupnosť"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
#, fuzzy
msgid "Rec. 1886"
msgstr "Rec. 601 (SD)"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
#, fuzzy
msgid "Rec. 2020"
msgstr "Rec. 601 (SD)"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601 (SD)"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709 (HD)"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Right (Pravý)"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Right centre (Pravý stredný)"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Right rear surround (Pravý zadný priestorový)"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Right surround (Pravý priestorový)"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr ""
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr ""
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr ""
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr ""
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr ""
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr ""
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
#, fuzzy
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr ""
@@ -1423,28 +1466,28 @@ msgstr "SSH chyba (%1)"
msgid "SSH error [%1] (%2)"
msgstr "SSH chyba (%1)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Sobota"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
#, fuzzy
msgid "Scanning image files"
msgstr "PoÄítam súhrn videa"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Posielam email"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Short (Krátky film)"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr ""
@@ -1452,11 +1495,11 @@ msgstr ""
msgid "Some audio will be resampled to %1Hz"
msgstr "Nejaké audio bude prevzorkované na %1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1471,13 +1514,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1496,11 +1539,11 @@ msgstr ""
msgid "Some of your content needs an OV"
msgstr ""
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr ""
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr ""
@@ -1512,19 +1555,19 @@ msgstr "Stereo na 5.1 up-mixer A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Stereo na 5.1 up-mixer B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Nedel'a"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser (Krátka upútavka)"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Telecine Filter"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1546,32 +1589,32 @@ msgstr "Reťaz certifikátov pre podpisovanie je neplatná"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Reťaz certifikátov pre podpisovanie je neplatná"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1579,23 +1622,37 @@ msgstr ""
"Disk, na ktorom sa nachádza film už má málo voľného miesta. NieÄo vymažte a "
"skúste to znovu."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr ""
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr ""
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr ""
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr ""
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1604,11 +1661,11 @@ msgid ""
"systems support your chosen DCP rate."
msgstr ""
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1617,27 +1674,29 @@ msgstr ""
"Zostáva málo pamäte. Ak je váš operaÄný system 32-bitový, skúste znížiÅ¥ "
"poÄet enkódovacích threadov v záložke VÅ¡eobecné, v nastaveniach."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
+"Zostáva málo pamäte. Ak je váš operaÄný system 32-bitový, skúste znížiÅ¥ "
+"poÄet enkódovacích threadov v záložke VÅ¡eobecné, v nastaveniach."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1646,46 +1705,48 @@ msgid ""
"the content and choosing \"Add KDM\"."
msgstr ""
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Tento film bol vytvorený novÅ¡ou verziou DCP-o-matic, a nemôže byÅ¥ naÄítaný "
"touto verziou. PrepáÄte !"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Tento film bol vytvorený staršou verziou DCP-o-matic, a bohužiaľ nemôže byť "
"naÄítaný do tejto verzie. Budete musieÅ¥ vytvoriÅ¥ nový Film, znovu pridaÅ¥ váš "
"obsah a znovu to nastaviť."
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "ÄŒetrtek"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
#, fuzzy
msgid "Transcoding %1"
msgstr "Transkódovanie %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitional (Prechod)"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Utorok"
@@ -1693,7 +1754,7 @@ msgstr "Utorok"
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "NeoÄakávaný obsah ZIP"
@@ -1701,36 +1762,36 @@ msgstr "NeoÄakávaný obsah ZIP"
msgid "Unexpected image type received by server"
msgstr "NeoÄakávaný typ obrazu obdŕžaný od servera "
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
#, fuzzy
msgid "Unknown"
msgstr "neznáme"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Neznáma chyba"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Nerozpoznaná vzorkovacia frekvencia audia (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Doostrenie a Gaussove rozostrenie"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Nešpecifikované"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Nepomenované"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Nepoužité"
@@ -1742,7 +1803,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1750,11 +1811,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr ""
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr ""
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Zrakovo postihnutý(í)"
@@ -1762,75 +1823,75 @@ msgstr "Zrakovo postihnutý(í)"
msgid "Waiting"
msgstr "Čakám"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
#, fuzzy
msgid "Weave filter"
msgstr "Telecine Filter"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Streda"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Len Äalší deinterlacing filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
"to %2 fps."
msgstr ""
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
"rate to %2 fps."
msgstr ""
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
msgstr ""
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:324
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
msgstr ""
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
msgstr ""
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1841,59 +1902,59 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Musíte pridať obsah do DCP pred tým, ako ho vytvoríte"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
msgstr ""
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr ""
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr ""
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[presúvam obrázky]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[stále]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[titulky]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr ""
@@ -1925,12 +1986,12 @@ msgstr "kopírujem %1"
msgid "could not find stream information"
msgstr "nemôžem nájsť informácie o streame"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
#, fuzzy
msgid "could not move atmos asset into the DCP (%1)"
msgstr "nemôžem presunúť audio do DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "nemôžem presunúť audio do DCP (%1)"
@@ -1961,7 +2022,7 @@ msgstr "nemôžem zapisovať do súboru %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "chyba poÄas async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "chyba poÄas async_read (%1)"
@@ -1969,64 +2030,72 @@ msgstr "chyba poÄas async_read (%1)"
msgid "error during async_write (%1)"
msgstr "chyba poÄas async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "obrázky za sekundu"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "h"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr ""
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr ""
-#: src/lib/dcp_content.cc:736
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
#, fuzzy
-msgid "it overlaps other audio content; remove the other content."
+msgid "it overlaps other audio content."
msgstr "Už sa tu nachádza iný zvuk, ktorý sa prekrýva s DCP; zmaže ho."
-#: src/lib/dcp_content.cc:700
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
#, fuzzy
-msgid "it overlaps other video content; remove the other content."
+msgid "it overlaps other text content."
+msgstr "Už sa tu nachádza iný zvuk, ktorý sa prekrýva s DCP; zmaže ho."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "Už sa tu nachádza iné video, ktoré sa prekrýva s DCP; zmaže ho."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
#, fuzzy
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
@@ -2036,16 +2105,16 @@ msgstr ""
"podľa obsahu videa'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr ""
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "presúvam"
@@ -2054,46 +2123,49 @@ msgid "name"
msgstr "meno"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "stále"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "Už sa tu nachádza iné video, ktoré sa prekrýva s DCP; zmaže ho."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "neznáme"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "video snímky"
#, fuzzy
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Nehoduje sa veľkosť videa v DCO"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "Už sa tu nachádza iné video, ktoré sa prekrýva s DCP; zmaže ho."
+
+#, fuzzy
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "DCP nemá zvuk vo všetkých reeloch."
diff --git a/src/lib/po/sl_SI.po b/src/lib/po/sl_SI.po
index f735363e8..a8970f8ea 100644
--- a/src/lib/po/sl_SI.po
+++ b/src/lib/po/sl_SI.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2024-02-10 16:15+0100\n"
"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
"Language-Team: \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.1\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Hitrost vsebine v sliÄicah %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Obrezano na %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Prikazano razmerje stranic %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Obdano s Ärnino, da se prilega vsebniku %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Velikost spremenjena na %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " na %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -94,39 +94,89 @@ msgstr ""
"Dolžina: $LENGTH\n"
"Velikost: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [zvok]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [video]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic ne more odpreti datoteke %1 (%2). Morda ne obstaja ali pa je v "
+"nepriÄakovani obliki."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic je moral spremeniti vaše nastavitve, da DCP lahko nosi oznako "
+"OV. Preglejte te nastavitve, da se prepriÄate, da so skladne z vaÅ¡imi "
+"željami."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"DCP-o-matic je moral spremeniti nastavitve, tako da je hitrost sliÄic filma "
+"enaka tisti vaše vsebine Atmos."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic ne podpira veÄ filtra »%1«, zato je bil izklopljen."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "E-poštno obvestilo"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 sliÄic"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", razmerje stranic slikovne toÄke %.2f:1"
@@ -163,11 +213,11 @@ msgstr "1,85 (ploski, Flat)"
msgid "1.90 (Full frame)"
msgstr "1,90 (cela sliÄica, Full frame)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr "10"
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr "16"
@@ -179,11 +229,11 @@ msgstr "2,35 (35-mm široki/scope)"
msgid "2.39 (Scope)"
msgstr "2,39 (široki/scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D-razšumnik"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -193,32 +243,33 @@ msgstr ""
"prepriÄani, da boste predvajali ta DCP na primernemu projektorju, je "
"priporoÄljivo, da nastavite DCP na 2K pod »DCP → Video«."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 sl/s"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 preostalo; zakljuÄevanje ob %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>%1 DCP ste izdelali z DCP-o-matic!</h2><img width=\"20%%\" src=\"memory:"
"me.jpg\" align=\"center\"><p>Pozdravljeni. Jaz sem Carl in sem razvijalec "
@@ -232,34 +283,36 @@ msgstr ""
"donirajte €20</a></li><li><a href=\"https://dcpomatic.com/donate_amount?"
"amount=10\">Pojdite na PayPal in donirajte 10 €</a></li></ul><p>Hvala!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"Nekateri projektorji imajo težave s predvajanjem DCP-jev z zelo visoko bitno "
"hitrostjo. Dobro je, da spustite pasovno širino JPEG2000 na približno 200 "
"Mbit/s; to verjetno ne bo imelo opaznega uÄinka na sliko."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"Datoteka podnaslovov ali zaprtih napisov v tem projektu je oznaÄena z "
"jezikom »%1«, ki ga DCP-o-matic ne prepozna. Jezik datoteke je poÄiÅ¡Äen."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 (»Hibridna log-gama«)"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Oglas"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -271,7 +324,7 @@ msgstr ""
"zgoraj in spodaj v ravnem prikazu (1,85:1, Flat). Vsebnik DCP-ja bi morda "
"raje nastavili na ukrivljeni format (2,39:1, Scope) na zavihku »DCP«."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -282,7 +335,7 @@ msgstr ""
"levem in desnem robu. Morda bi raje nastavili vsebnik DCP, da ima enako "
"razmerje kot vaša vsebina."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Pri obravnavi datoteke %1 je prišlo do napake."
@@ -290,28 +343,28 @@ msgstr "Pri obravnavi datoteke %1 je prišlo do napake."
msgid "Analysing audio"
msgstr "Analiziranje zvoka"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Analiziranje podnaslovov"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr "Vsaj ena oznaka sledi po koncu projekta in bo prezrta."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Vsaj ena od datotek z zaprtimi napisi je veÄja od "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "Vsaj en del datotek XML zaprtih napisov je veÄji od "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Vsaj ena od datotek podnaslovov je veÄja od "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -319,7 +372,7 @@ msgstr ""
"Vsaj ena od vrstic podnaslovov ima veÄ kot 52 znakov. PriporoÄljivo je, da "
"ima vsaka vrstica najveÄ 52 znakov."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -327,7 +380,7 @@ msgstr ""
"Vsaj ena od vrstic podnaslovov ima veÄ kot 79 znakov. PriporoÄljivo je, da "
"ima vsaka vrstica najveÄ 79 znakov."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -335,7 +388,7 @@ msgstr ""
"Vsaj eden od vaÅ¡ih podnaslovov ima veÄ kot 3 vrstice. PriporoÄljivo je "
"uporabiti najveÄ 3 vrstice."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -343,7 +396,7 @@ msgstr ""
"Vsaj en vaÅ¡ podnaslov traja manj kot 15 sliÄic. PriporoÄljivo je, da vsak "
"podnaslov dolg vsaj 15 sliÄic."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -351,7 +404,7 @@ msgstr ""
"Vsaj eden od vaÅ¡ih podnaslovov se zaÄne manj kot 2 sliÄici po prejÅ¡njem. "
"PriporoÄljivo je, da je vrzel med podnaslovi vsaj 2 sliÄici."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -373,72 +426,72 @@ msgstr "Zvok bo prevzorÄen na %1 Hz"
msgid "Audio will not be resampled"
msgstr "Zvok ne bo prevzroÄen"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 z razširjenim barvnim gamutom"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 s konstantno svetilnostjo"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 za 10-bitni sistem"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 za 12-bitni sistem"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 s spremenljivo svetilnostjo"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bitov na slik. toÄko"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Filter razpletanja Boba Weaverja"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR (D)"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Preklicano"
@@ -450,11 +503,11 @@ msgstr "Ne sme vsebovati poševnic"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Formata slikovne toÄke %1 ni mogoÄe procesirati med %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "KDM ni mogoÄe narediti, ker ta projekt ni Å¡ifriran."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Sredinsko"
@@ -462,7 +515,7 @@ msgstr "Sredinsko"
msgid "Channels"
msgstr "Kanali"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "Preverite njihove nove nastavitve in poskusite znova."
@@ -470,27 +523,32 @@ msgstr "Preverite njihove nove nastavitve in poskusite znova."
msgid "Checking content"
msgstr "Preverjanje vsebine"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Preverjanje obstojeÄih slikovnih podatkov"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Konstantna svetilnost iz krome"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Nekonstantna svetilnost iz krome"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr "Posnetek"
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Zaprti napisi"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Odpri podnaslove"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Primarne barve"
@@ -504,17 +562,17 @@ msgstr "Primarne barve"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Barvni obseg"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "ZnaÄilnost barvnega prenosa"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Barvni prostor"
@@ -522,15 +580,15 @@ msgstr "Barvni prostor"
msgid "Combine DCPs"
msgstr "Združi DCP-je"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "RaÄunanje povzetka"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "RaÄunanje povzetkov"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "ÄŒestitamo!"
@@ -546,23 +604,23 @@ msgstr "Bitna globina vsebine"
msgid "Content sample rate"
msgstr "Mera vzorÄenja vsebine"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "Vsebina, ki jo želite združiti, mora imeti vse ali ne imeti zvoka"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Vsebina, ki jo želite združiti, mora imeti vsa podnaslove oz. napise ali pa "
"jih sploh ne imeti."
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
"Vsebina, ki jo želite združiti, mora imeti vsa videoposnetek ali ga sploh ne "
"imeti."
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -575,13 +633,13 @@ msgstr ""
"Vsebina, ki jo želite združiti, mora imeti uporabljene vse videoposnetke ali "
"pa nobenega."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"Vsebina, ki jo želite združiti, mora imeti enako nastavitev »zapeci "
"podnaslove«."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Vsebina, ki jo želite združiti, mora imeti enako nastavitev »uporabi "
@@ -625,7 +683,7 @@ msgid "Content to be joined must have the same fades."
msgstr ""
"Vsebina, ki jo želite združiti, mora imeti enake odtemnitve/zatemnitve."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Vsebina, ki jo želite združiti, mora imeti enako širino orisa."
@@ -633,35 +691,35 @@ msgstr "Vsebina, ki jo želite združiti, mora imeti enako širino orisa."
msgid "Content to be joined must have the same picture size."
msgstr "Vsebina, ki jo želite združiti, mora imeti enako velikost slike."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "Vsebina, ki jo želite združiti, mora imeti enak odmik podnaslovov X."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Vsebina, ki jo želite združiti, mora imeti enako merilo podnaslovov X."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "Vsebina, ki jo želite združiti, mora imeti enak odmik podnaslovov Y."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Vsebina, ki jo želite združiti, mora imeti enako merilo podnaslovov Y."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
"Vsebina, ki jo želite združiti, mora imeti enake odtemnitve/zatemnitve "
"podnaslovov."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"Vsebina, ki jo želite združiti, mora imeti enak razmik med vrsticami "
"podnaslovov."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Vsebina, ki jo želite združiti, mora imeti enako hitrost video sliÄic."
@@ -669,24 +727,24 @@ msgstr "Vsebina, ki jo želite združiti, mora imeti enako hitrost video sliÄic
msgid "Content to be joined must have the same video frame type."
msgstr "Vsebina, ki jo želite združiti, mora imeti enako vrsto video sliÄice."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr ""
"Vsebina, ki jo želite združiti, mora uporabljati isto stezo/posnetek DCP."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Vsebina, ki jo želite združiti, mora uporabljati iste pisave."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Vsebina, ki jo želite združiti, mora uporabljati isti tok podnaslovov."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "Vsebina, ki jo želite združiti, mora uporabljati isti jezik besedila."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Video vsebine je %1x%2"
@@ -694,14 +752,6 @@ msgstr "Video vsebine je %1x%2"
msgid "Copy DCP to TMS"
msgstr "Kopiraj DCP v TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Kopiranje stare video datoteke"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Kopiranje video datoteke v DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Ni mogoÄe vzpostaviti povezave s strežnikom %1 (%2)"
@@ -718,20 +768,21 @@ msgstr "Datoteke JPEG2000 %1 (%2) ni mogoÄe dekodirati"
msgid "Could not decode image (%1)"
msgstr "Slike ni mogoÄe dekodirati (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Ni bilo mogoÄe odpreti prenesene datoteke ZIP"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Ni bilo mogoÄe prisluhniti oddaljenim strežnikom kodiranja. Morda je zagnan "
"še en primerek programa DCP-o-matic."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Ni mogoÄe odpreti: %1"
@@ -739,19 +790,19 @@ msgstr "Ni mogoÄe odpreti: %1"
msgid "Could not open %1 to send"
msgstr "Za poÅ¡iljanje ni bilo mogoÄe odpreti %1"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Ni bilo mogoÄe odpreti prenesene datoteke ZIP"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Ni bilo mogoÄe odpreti prenesene datoteke ZIP (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Ni bilo mogoÄe odpreti datoteke za pisanje"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "Izhodne datoteke %1 (%2) ni bilo mogoÄe odpreti"
@@ -767,19 +818,19 @@ msgstr "Prenosa ni mogoÄe zaÄeti"
msgid "Could not write to remote file (%1)"
msgstr "Ni mogoÄe pisati v oddaljeno datoteko (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX, primarni"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX, sekundarni"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -791,7 +842,7 @@ msgstr "DCI, ploski (flat)"
msgid "DCI Scope"
msgstr "DCI, ukrivljeni (scope)"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "Podnaslovi DCP XML"
@@ -808,50 +859,35 @@ msgstr "DCP bo predvajan pri %.1f%% hitrosti vsebine.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP bo uporabil vsako drugo sliÄico vsebine.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic ne more odpreti datoteke %1 (%2). Morda ne obstaja ali pa je v "
-"nepriÄakovani obliki."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic je moral spremeniti vaše nastavitve, da DCP lahko nosi oznako "
-"OV. Preglejte te nastavitve, da se prepriÄate, da so skladne z vaÅ¡imi "
-"željami."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic je moral spremeniti nastavitve, tako da je hitrost sliÄic filma "
-"enaka tisti vaše vsebine Atmos."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic ne podpira veÄ filtra »%1«, zato je bil izklopljen."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "Obvestilo DCP-o-matic"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 ali AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Razpletanje"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -863,7 +899,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Dragi/a projekcionist/ka,\n"
"\n"
@@ -877,11 +913,15 @@ msgstr ""
"Lep pozdrav,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 ali CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Prenos ni uspel (%1 napaka %2)"
@@ -905,19 +945,19 @@ msgstr "E-pošlji KDM-je za %1"
msgid "Email notification"
msgstr "E-poštno obvestilo"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "PoroÄilo o težavah z e-poÅ¡to"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "PoroÄilo o težavah z e-poÅ¡to za %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Kodiranje"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Epizoda"
@@ -925,19 +965,19 @@ msgstr "Epizoda"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Napaka v datoteki podnaslovov: zaznano %1, priÄakovano %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr " Napaka: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr "Dogodek"
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
msgid "Examining audio"
msgstr "PreuÄevanje zvoka"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "PreuÄevanje zvoka, podnaslovov in zaprtih napisov"
@@ -949,15 +989,15 @@ msgstr "PreuÄevanje vsebine"
msgid "Examining subtitles"
msgstr "PreuÄevanje podnaslovov"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "PreuÄevanje podnaslovov in zaprtih napisov"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Razširjanje"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -965,51 +1005,51 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Preverjanje pristnosti s strežnikom (%1) je spodletelo"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Kodiranje DCP-ja je spodletelo."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Pošiljanje e-pošte je spodletelo"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "CeloveÄerni film"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Ime datoteke"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr "Imena datotek"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "Datoteke so se spremenile, odkar so bile dodane v projekt."
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Iskanje dolžine"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Hitrost sliÄic"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Petek"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Polno"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Polno (0-%1)"
@@ -1033,35 +1073,35 @@ msgstr "Polna dolžina v video sliÄicah pri hitrosti DCP"
msgid "Full length in video frames at content rate"
msgstr "Polna dolžina v video sliÄicah pri hitrosti vsebine"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gama 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gama 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Razpasovnik preliva"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Za osebe z okvarami sluha"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Visokokakovostni 3D-razšumnik"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr "Svetli toni"
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Vodoravno preobrni"
@@ -1069,19 +1109,19 @@ msgstr "Vodoravno preobrni"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB ali SYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "ÄŒe uporabljate 25 sl/s, morate spremeniti standard DCP v SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
@@ -1091,9 +1131,10 @@ msgstr ""
"poseben razlog za uporabo Interop. Svetujemo, da vaš DCP uporablja standard "
"SMPTE, kar doloÄite na zavihku »DCP«."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
+#, fuzzy
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
@@ -1103,7 +1144,7 @@ msgstr ""
"preveriti vse podnaslove v svojem projektu, da se prepriÄate, da so umeÅ¡Äeni "
"na želeno mesto."
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1111,72 +1152,73 @@ msgstr ""
"PriporoÄljivo je, da postavite svoj prvi podnaslov vsaj 4 sekunde po zaÄetku "
"DCP, da se prepriÄate, da je viden."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Ni znano, kaj je povzroÄilo to napako."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "Dostava KDM: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Razpletalnik jedra"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Levo"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Levo, sredina"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Levo, zadaj, okolica"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Levo, okolica"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Dolžina"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "Lfe (sub/pod)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Omejeno"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
msgid "Limited / video (%1-%2)"
msgstr "Omejeno/video (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Linearno"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logaritemsko (obseg 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logaritemsko (obseg 316:1)"
@@ -1184,7 +1226,7 @@ msgstr "Logaritemsko (obseg 316:1)"
msgid "Lost communication between main and writer processes"
msgstr "Izgubljena komunikacija med glavnimi in zapisovalnimi procesi"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1192,24 +1234,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Srednje-stranski dekodirnik"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Razno"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Neskladno Å¡tevilo zvoÄnih kanalov v DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Neskladne mere vzorÄenja zvoka v DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Neskladna hitrost v sliÄicah v DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Neskladna velikost videa v DCP"
@@ -1217,19 +1259,19 @@ msgstr "Neskladna velikost videa v DCP"
msgid "Missing required setting %1"
msgstr "Manjka zahtevana nastavitev %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Ponedeljek"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Razpletalnik s kompenzacijo gibanja"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "V DCP-ju ni CPL-jev."
@@ -1242,78 +1284,89 @@ msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr ""
"Noben odhodni poÅ¡tni strežnik ni doloÄen v nastavitvah na zavihku e-poÅ¡te"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "V mapi ni najdenih veljavnih slikovnih datotek."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Zmanjšanje šuma"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Brez"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr "V redu"
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
msgid "OK (ran for %1 from %2 to %3)"
msgstr "V redu (potekalo %1 od %2 do %3)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "V redu (potekalo %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
"Samo prvi del vsebine, ki ga želite združiti, ima lahko zaÄetno porezavo."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
"Samo zadnji del vsebine, ki ga želite združiti, ima lahko konÄno porezavo."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Zaprti napisi"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Odpri podnaslove"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
+#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Odprite projekt v DCP-o-matic, preverite nastavitve in ga shranite, preden "
"poskusite znova."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Usmerjenost"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Zmanjkalo pomnilnika"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Nadpopoln razÅ¡umnik valÄkov"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Politika"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr "Vnaprej pomnoži kanal alfa"
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Pripravljeno za hitrost video sliÄic"
@@ -1321,93 +1374,93 @@ msgstr "Pripravljeno za hitrost video sliÄic"
msgid "Programming error at %1:%2 %3"
msgstr "Programska napaka na %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promo"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Obvestilo o javnih storitvah"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Ocena"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "desna"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Desno, sredina"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Desno, zadaj, okolica"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Desno, okolica"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Zasukaj za 90° v nasprotni SUK"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Zasukaj za 90° v SUK"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs (Ds)"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1418,23 +1471,23 @@ msgstr ""
"napisov (FFMC). Te oznake morate dodati z gumbom »OznaÄevalci« na zavihku "
"»DCP«."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 za 10-, 12-, 14- in 16-bitne sisteme"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1447,27 +1500,27 @@ msgstr "Napaka SSH [%1]"
msgid "SSH error [%1] (%2)"
msgstr "Napaka SSH [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Sobota"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Pregledovanje slikovnih datotek"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Pošiljanje e-pošte"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Kratki film"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Sign"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Velikost"
@@ -1475,11 +1528,11 @@ msgstr "Velikost"
msgid "Some audio will be resampled to %1Hz"
msgstr "Nekateri zvoÄni elementi bodo prevzorÄeni na %1 Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr "Nekatere datoteke so bile spremenjene, odkar so bile dodane v projekt."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1502,14 +1555,14 @@ msgstr ""
"Te datoteke bodo zdaj ponovno pregledane, zato boste morda morali preveriti "
"njihove nastavitve."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
"Nekateri vaši zaprti napisi segajo presegajo %1 vrstic, zato bodo odrezani."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1531,11 +1584,11 @@ msgstr "Nekatere vaše vsebine potrebujejo KDM"
msgid "Some of your content needs an OV"
msgstr "Nekatere vaše vsebine potrebujejo OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr "Stereo kartica"
@@ -1547,19 +1600,19 @@ msgstr "Stereo na 5,1; mešalnik/pretvornik A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Stereo na 5,1: mešalnik/pretvornik B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Nedelja"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Dražilnik (teaser)"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Filter telekiniranja"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Preizkus"
@@ -1579,13 +1632,14 @@ msgstr "Veriga potrdil za podpisovanje ni veljavna"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Veriga potrdil za podpisovanje ni veljavna (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
+#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"Veriga potrdil, ki jo DCP-o-matic uporablja za podpisovanje DCP-jev in KDM-"
"jev, vsebuje majhno napako, ki bo prepreÄila pravilno preverjanje "
@@ -1593,13 +1647,14 @@ msgstr ""
"verigo potrdil za podpisovanje s klikom gumba »Ponovno izdelaj potrdila in "
"kljuÄ â€¦Â« na strani KljuÄi v Nastavitvah."
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
+#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"Veriga potrdil, ki jo DCP-o-matic uporablja za podpisovanje DCP-jev in KDM-"
"jev, ima predolgo obdobje veljavnosti. To bo povzroÄilo težave pri "
@@ -1607,7 +1662,7 @@ msgstr ""
"verigo potrdil za podpisovanje s klikom gumba »Ponovno izdelaj potrdila in "
"kljuÄ â€¦Â« na strani KljuÄi v nastavitvah."
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1617,7 +1672,7 @@ msgstr ""
"Nastavite jo na 2D. Iz te vsebine lahko še vedno naredite 3D-DCP, tako da "
"na zavihku videoposnetka DCP potrdite možnost 3D."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1625,23 +1680,42 @@ msgstr ""
"Pogon, na katerem je film shranjen, ima malo nezasedenega prostora. "
"Sprostite nekaj veÄ prostora in poskusite znova."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Datoteka %1 je bila premaknjena %2 milisekund naprej."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Datoteka %1 je bila premaknjena %2 milisekund nazaj."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Datoteka %1 je bila obrezana za %2 milisekund manj."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Datoteka %1 je bila obrezana za %2 milisekund veÄ."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+#, fuzzy
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+"V tej razliÄici je priÅ¡lo do sprememb naÄina postavitve podnaslovov. "
+"UmeÅ¡Äanje mora biti zdaj bolj pravilno glede na standarde, vendar morate "
+"preveriti vse podnaslove v svojem projektu, da se prepriÄate, da so umeÅ¡Äeni "
+"na želeno mesto."
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1655,11 +1729,11 @@ msgstr ""
"DCP na takšno, ki je bližje vaši vsebini, pod pogojem, da ciljni sistemi "
"projekcije podpirajo izbrano hitrost DCP."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "V tem DCP-ju ni videa"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1669,32 +1743,35 @@ msgstr ""
"sistem, poskusite zmanjšati število niti šifriranja na zavihku Splošno v "
"Nastavitvah."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
"Ta KDM je bil izdelan za DCP-o-matic, vendar ne za njegovo listno potrdilo."
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr "Ta KDM ni bil narejen za potrdilo za dešifriranje DCP-o-matic."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"Do te napake je verjetno priÅ¡lo, ker izvajate 32-bitno razliÄico DCP-o-matic "
"in poskuÅ¡ate uporabiti preveÄ niti za kodiranje. Prosimo, zmanjÅ¡ajte "
"»število niti, ki naj jih uporablja DCP-o-matic« na zavihku Splošno v "
"nastavitvah in poskusite znova."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"Do te napake je verjetno priÅ¡lo, ker izvajate 32-bitno razliÄico DCP-o-"
"matic. Ponovno namestite DCP-o-matic s 64-bitnim namestitvenim programom in "
@@ -1708,45 +1785,47 @@ msgstr ""
"Ta datoteka je KDM. KDM-je je treba dodati vsebini DCP vsebini tako, da z "
"desno tipko miške kliknete vsebino in izberete »Dodaj KDM«."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Ta film je nastal z novejÅ¡o razliÄico DCP-o-matic in ga ni mogoÄe naložiti v "
"to razliÄico. Oprostite!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Ta film je nastal s starejÅ¡o razliÄico DCP-o-matic in ga žal ni mogoÄe "
"naložiti v to razliÄico. Ustvariti morate nov film, znova dodati vsebino in "
"jo znova nastaviti. Oprostite!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "ÄŒetrtek"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "ÄŒasovno opredeljeno besedilo"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Napovednik"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Prekodiranje %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Prehodni"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Torek"
@@ -1754,7 +1833,7 @@ msgstr "Torek"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "NepriÄakovana vsebina datoteke ZIP"
@@ -1762,35 +1841,35 @@ msgstr "NepriÄakovana vsebina datoteke ZIP"
msgid "Unexpected image type received by server"
msgstr "NepriÄakovana vrsta slike, ki jo je prejel strežnik"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Neznano"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Neznana napaka"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Neprepoznana oblika vzorca zvoka (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Razostri masko in Gaussova zabrisanost"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "NedoloÄeno"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Neimenovano"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Neuporabljeno"
@@ -1802,7 +1881,7 @@ msgstr "Zmešaj navzgor L"
msgid "Upmix R"
msgstr "Zmešaj navzgor R (D)"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1810,11 +1889,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Preveri DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "NavpiÄno preobrni"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Za slabovidne osebe"
@@ -1822,23 +1901,23 @@ msgstr "Za slabovidne osebe"
msgid "Waiting"
msgstr "ÄŒakanje"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Filter tkanja"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Sreda"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Å e en filter za razpletanje"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
@@ -1848,7 +1927,7 @@ msgstr ""
"podpirajo vsi projektorji. Svetujemo vam, da spremenite hitrost predvajanja "
"DCP na %2 sl/s."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1858,7 +1937,7 @@ msgstr ""
"podpirajo vsi projektorji. Morda boste želeli razmisliti o spremembi "
"hitrosti sliÄic na %2 sl/s."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1866,18 +1945,11 @@ msgstr ""
"Nastavljeno imate za hitrost sliÄic DCP 30 sl/s, ki je ne podpirajo vsi "
"projektorji. Zavedajte se, da imate morda težave z združljivostjo."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Uporabljate 3D-vsebino, vendar je vaš DCP nastavljen na 2D. Nastavite DCP "
-"na 3D, Äe ga želite predvajati na 3D-sistemu (npr. Real-D, MasterImage itn.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Uporabljate funkcijo programa DCP-o-matic za spremembo stereo zvoka v "
@@ -1885,7 +1957,15 @@ msgstr ""
"kakovost zvoka. Če nadaljujete, morate poslušati rezultat DCP v "
"kinodvorani, da se prepriÄate, da je sliÅ¡ati dobro."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Uporabljate 3D-vsebino, vendar je vaš DCP nastavljen na 2D. Nastavite DCP "
+"na 3D, Äe ga želite predvajati na 3D-sistemu (npr. Real-D, MasterImage itn.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1893,7 +1973,7 @@ msgstr ""
"Imate %1 datotek, za katere kaže, da so datoteke VOB z DVD-ja. Združite jih, "
"da zagotovite gladke spoje med datotekami."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1901,7 +1981,7 @@ msgstr ""
"Imate veÄ kot en kos vsebine Atmos, in nimajo enake hitrosti sliÄic. "
"Odstraniti morate nekaj vsebine Atmos."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1909,7 +1989,7 @@ msgstr ""
"Imate prekrivanje zaprtih napisov, ki niso dovoljeni v DCP-jih Interop. "
"Spremenite standard DCP v SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1921,7 +2001,7 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Preden jo ustvarite, morate DCP-ju dodati nekaj vsebin"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
@@ -1931,19 +2011,20 @@ msgstr ""
"distributerji pri preverjanju kakovosti vaÅ¡ega DCP sporoÄijo napake. ÄŒe se "
"želite temu izogniti, nastavite Å¡tevilo zvoÄnih kanalov DCP na 8 ali 16."
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"VaÅ¡ DCP ima manj kot 6 zvoÄnih kanalov. To lahko povzroÄi težave pri "
"nekaterih projektorjih. DCP lahko nastavite tako, da ima 6 kanalov. Ni "
"pomembno, ali ima vaša vsebina manj kanalov, saj bo DCP-o-matic dodatne "
"napolnil s tišino."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1952,7 +2033,7 @@ msgstr ""
"nekaterih projektorjih. ÄŒe je mogoÄe, uporabite plosko (flat) ali Å¡iroko "
"(scope) za razmerje vsebnika DCP."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1960,13 +2041,13 @@ msgstr ""
"Raven zvoka je zelo visoka (na %1). ZmanjÅ¡ati morate ojaÄitev zvoÄne "
"vsebine."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"VaÅ¡ projekt vsebuje video vsebino, ki ni bila usklajena z robom sliÄic."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1974,21 +2055,21 @@ msgstr ""
"Vaš projekt vsebuje video vsebino, katere porezava ni poravnana z robom "
"sliÄic."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[gibljive slike]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[fotografija]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[podnaslovi]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_reel%1"
@@ -2020,11 +2101,11 @@ msgstr "kopiranje %1"
msgid "could not find stream information"
msgstr "podatkov o toku ni mogoÄe najti"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "sredstva atmos ni bilo mogoÄe premakniti v DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "zvoÄnega sredstva ni bilo mogoÄe premakniti v DCP (%1)"
@@ -2052,7 +2133,7 @@ msgstr "ni mogoÄe pisati v datoteko %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "napaka med async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "napaka med async_read (%1)"
@@ -2060,28 +2141,28 @@ msgstr "napaka med async_read (%1)"
msgid "error during async_write (%1)"
msgstr "napaka med async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "sliÄic na sekundo"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "u"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "ima drugaÄno hitrost sliÄic kot film."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
@@ -2089,35 +2170,45 @@ msgstr ""
"napisi ponovno zapisani."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "Je 2K, film pa 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "Je 4K, film pa 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "je Interop in film je nastavljen na SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "je SMPTE in film je nastavljen na Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "prekriva druge zvoÄne vsebine; odstranite drugo vsebino."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "prekriva druge zvoÄne vsebine; odstranite drugo vsebino."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "prekriva drugo video vsebino; odstranite drugo vsebino."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2126,16 +2217,16 @@ msgstr ""
"kolutov na »razdeli po video vsebini«."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "njegova velikost video sliÄice se razlikuje od velikosti v filmu."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "m"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "gibljive slike"
@@ -2144,7 +2235,7 @@ msgid "name"
msgstr "ime"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2153,7 +2244,7 @@ msgstr ""
"ponovno zapisati."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
@@ -2162,26 +2253,34 @@ msgstr ""
"ponovno zapisati."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "s"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "fotografija"
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr "prekrivajo drugo besedilno vsebino; odstranite drugo vsebino."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "neznano"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "video sliÄice"
+
+#~ msgid "Copying old video file"
+#~ msgstr "Kopiranje stare video datoteke"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Kopiranje video datoteke v DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "Obvestilo DCP-o-matic"
+
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "prekrivajo drugo besedilno vsebino; odstranite drugo vsebino."
diff --git a/src/lib/po/sv_SE.po b/src/lib/po/sv_SE.po
index f64e4d947..2482e0199 100644
--- a/src/lib/po/sv_SE.po
+++ b/src/lib/po/sv_SE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2021-12-28 14:46+0100\n"
"Last-Translator: Mattias Mattsson <vitplister@gmail.com>\n"
"Language-Team: \n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.3\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -26,7 +26,7 @@ msgstr ""
"\n"
"Källmaterialets bildhastighet är %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -34,7 +34,7 @@ msgstr ""
"\n"
"Beskuren till %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -43,7 +43,7 @@ msgstr ""
"\n"
"Bildformat %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -51,7 +51,7 @@ msgstr ""
"\n"
"Svarta kanter tillagda för att passa %1-behållaren (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -59,18 +59,18 @@ msgstr ""
"\n"
"Skalat till %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " på %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -94,39 +94,89 @@ msgstr ""
"Speltid: $LENGTH\n"
"Storlek: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [ljud]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [film]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [bild]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic kunde inte öppna %1 (%2). Kanske finns inte filen eller har ett "
+"okänt format."
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic var tvungen att ändra dina inställningar för att referera till "
+"DCP:er som OV. Var vänlig kontrollera dessa inställningar så att det är "
+"korrekta."
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+"DCP-o-matic var tvungen att ändra dina inställningar så att filmens "
+"bildhastighet är samma som för Atmos-innehållet."
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic stödjer inte längre '%1'-filtret, så det har inaktiverats."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "E-postmeddelande"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", pixlarnas höjd/bredd-förhållande %.2f:1"
@@ -163,11 +213,11 @@ msgstr "1,85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1,90 (Full frame)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1,66"
@@ -180,11 +230,11 @@ msgstr "2,35 (35 mm Cinemascope)"
msgid "2.39 (Scope)"
msgstr "2,39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D brusreducering"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -194,32 +244,33 @@ msgstr ""
"denna DCP på en sådan projektor är det lämpligt att ställa om DCP:n till 2K "
"under fliken \"DCP→Video\"."
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 återstår; klar kl. %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
+#, fuzzy
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>Du har gjort %1 DCP:er med DCP-o-matic!</h2><img width=\"20%%\" "
"src=\"memory:me.jpg\" align=\"center\"><p>Hej. Jag heter Carl och är "
@@ -233,34 +284,36 @@ msgstr ""
"via Paypal</a><li><a href=\"https://dcpomatic.com/donate_amount?"
"amount=10\">Ge 10 EUR via Paypal</a></ul><p>Stort tack!"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"En del utrustning har problem att spela upp DCP:er med hög bitrate. "
"Rekommenderat är en JPEG2000-bitrate på ungefär 200 Mbit/s; detta ger "
"troligen ingen synbar försämring av bildkvaliteten."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"En fil med undertext i detta projekt är markerat med språket '%1', vilket "
"DCP-omatic inte känner igen. Filens språk-fält har tömts."
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "Advertisement"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -272,7 +325,7 @@ msgstr ""
"upp- och nertill inuti en 1,85:1-ruta. Rekommenderat är att istället välja "
"DCP-behållare Scope (2.39:1) på \"DCP\"-fliken."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -283,7 +336,7 @@ msgstr ""
"på sidorna inuti en 2,39:1-ruta . Rekommenderat är att istället välja en DCP-"
"behållare med samma bildformat som källmaterialet."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Ett fel inträffade vid hantering av filen %1."
@@ -291,30 +344,30 @@ msgstr "Ett fel inträffade vid hantering av filen %1."
msgid "Analysing audio"
msgstr "Analyserar ljud"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "Analyserar undertexter"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
"Ã…tminstone en markering kommer efter slutet av projektet och kommer att "
"ignoreras."
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "Åtminstone en av dina undertextfiler är större än "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "Åtminstone en av dina undertextfilers XML-del är större än "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "Åtminstone en av dina undertextfiler är större än "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -322,7 +375,7 @@ msgstr ""
"Åtminstone en av dina rader i undertexten är längre än 52 bokstaver. Det är "
"lämpligt att se till att varje rad är max 52 bokstäver låg."
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -330,7 +383,7 @@ msgstr ""
"Åtminstone en av dina rader i undertexten är längre än 79 bokstaver. Det är "
"lämpligt att se till att varje rad är max 79 bokstäver låg."
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
@@ -338,7 +391,7 @@ msgstr ""
"Åtminstone en av dina undertexter innehåller mer än 3 rader. Det är lämpligt "
"att använda max 3 rader."
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -346,7 +399,7 @@ msgstr ""
"Åtminstone en av dina undertexter är kortare än 15 bildrutor. Det är "
"lämpligt att använda minst 15 bildrutor."
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -354,7 +407,7 @@ msgstr ""
"Åtminstone en av dina undertexter börjar mindre än 2 bildrutor efter "
"föregående undertext. Det är lämpligt att använda minst 2 bildrutor mellan."
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
#, fuzzy
msgid ""
"At least one piece of subtitle content has no specified language. It is "
@@ -377,73 +430,73 @@ msgstr "Ljudspåret kommer samplas om till %1 Hz"
msgid "Audio will not be resampled"
msgstr "Ljudspåret kommer inte samplas om"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 utökat färgomfång"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 konstant luminans"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 för ett 10-bitars system"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 för ett 12-bitars system"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 icke-konstant luminans"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Bitar per pixel"
# Filtret heter så, ska ej översättas
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Bob Weaver Deinterlacing Filter"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Avbruten"
@@ -455,11 +508,11 @@ msgstr "Får inte innehålla snedstreck"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Kan inte hantera pixelformat %1 under %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Kan inte göra KDM eftersom projektet inte är krypterat."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Center"
@@ -467,7 +520,7 @@ msgstr "Center"
msgid "Channels"
msgstr "Antal kanaler"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -476,27 +529,32 @@ msgstr ""
msgid "Checking content"
msgstr "Kontrollerar om källmaterialet har ändrats"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Kontrollerar befintlig bilddata"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Krominans-härledd konstant luminans"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Krominans-härledd icke-konstant luminans"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "Dövtextning"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "Undertexter"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "Primärfärger"
@@ -510,17 +568,17 @@ msgstr "Primärfärger"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Färgområde"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "Färgsystemkarakteristisk"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Färgrymd"
@@ -528,15 +586,15 @@ msgstr "Färgrymd"
msgid "Combine DCPs"
msgstr "Kombinera DCP:er"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Beräknar hashsumma"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Beräknar hashsummor"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "Hurra!"
@@ -554,23 +612,23 @@ msgstr "filmtyp"
msgid "Content sample rate"
msgstr "Källmaterialets samplingsfrekvens"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
"Källmaterial som ska sammanfogas måste alla antingen ha eller inte ha ljud"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Källmaterial som ska sammanfogas måste alla antingen ha eller inte ha "
"undertext"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
"Källmaterial som ska sammanfogas måste alla antingen ha eller inte ha video"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -581,13 +639,13 @@ msgid "Content to be joined must have all its video used or not used."
msgstr ""
"Källmaterial som ska sammanfogas måste ha allt sitt video använt eller inte."
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"Källmaterial som ska sammanfogas måste använda samma inställning för 'bränn "
"in undertexter'."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Källmaterial som ska sammanfogas måste använda samma inställning för 'använd "
@@ -637,7 +695,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr "Källmaterial som ska sammanfogas måste ha samma in- och uttoning."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Texten i undertextspår som ska sammanfogas måste ha samma konturbredd."
@@ -645,31 +703,31 @@ msgstr "Texten i undertextspår som ska sammanfogas måste ha samma konturbredd.
msgid "Content to be joined must have the same picture size."
msgstr "Källmaterial som ska sammanfogas måste ha samma bildstorlek."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "Undertextspår som ska sammanfogas måste ha samma förskjutning i x-led."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "Undertextspår som ska sammanfogas måste ha samma skalning i x-led."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "Undertextspår som ska sammanfogas måste ha samma förskjutning i y-led."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "Undertextspår som ska sammanfogas måste ha samma skalning i y-led."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "Undertextspår som ska sammanfogas måste ha samma in- och uttoning."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "Undertextspår som ska sammanfogas måste ha samma radavstånd."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Källmaterial som ska sammanfogas måste ha samma bildhastighet"
@@ -677,23 +735,23 @@ msgstr "Källmaterial som ska sammanfogas måste ha samma bildhastighet"
msgid "Content to be joined must have the same video frame type."
msgstr "Källmaterial som ska sammanfogas måste ha samma 2D-/3D-typ."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "Källmaterial som ska sammanfogas måste ha samma DCP-spår."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Källmaterial som ska sammanfogas måste använda samma typsnitt."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Källmaterial som ska sammanfogas måste använda undertext-ström."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "Källmaterial som ska sammanfogas måste använda samma språk för text."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Källmaterialet är %1x%2"
@@ -701,14 +759,6 @@ msgstr "Källmaterialet är %1x%2"
msgid "Copy DCP to TMS"
msgstr "Kopiera DCP till TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "Kopierar tidigare videofil"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "Kopierar in videofil till DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Kunde inte ansluta till server %1 (%2)"
@@ -725,20 +775,21 @@ msgstr "Kunde inte avkoda JPEG2000-fil %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Kunde inte avkoda bild (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Kunde inte öppna hämtad ZIP-fil"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Kunde inte lyssna efter kodnings-servrar. Kanske en annan instans av DCP-o-"
"matic körs."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Kunde inte öppna %1"
@@ -746,19 +797,19 @@ msgstr "Kunde inte öppna %1"
msgid "Could not open %1 to send"
msgstr "Kunde inte öppna %1 för att skicka"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Kunde inte öppna hämtad ZIP-fil"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Kunde inte öppna hämtad ZIP-fil"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "Kunde inte öppna fil %1 för skrivning (%2)"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "Kunde inte öppna ut-fil %1 (%2)"
@@ -774,19 +825,19 @@ msgstr "Kunde inte starta överföring"
msgid "Could not write to remote file (%1)"
msgstr "Kunde inte skriva till fjärrfil (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX primär"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX sekundär"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -798,7 +849,7 @@ msgstr "Flat"
msgid "DCI Scope"
msgstr "Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML-undertexter"
@@ -815,50 +866,35 @@ msgstr "DCP:n kommer spelas upp i %.1f %% av källmaterialets hastighet.\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP:n kommer använda varannan bild från källmaterialet.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic kunde inte öppna %1 (%2). Kanske finns inte filen eller har ett "
-"okänt format."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-"DCP-o-matic var tvungen att ändra dina inställningar för att referera till "
-"DCP:er som OV. Var vänlig kontrollera dessa inställningar så att det är "
-"korrekta."
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-"DCP-o-matic var tvungen att ändra dina inställningar så att filmens "
-"bildhastighet är samma som för Atmos-innehållet."
-
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic stödjer inte längre '%1'-filtret, så det har inaktiverats."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "Meddelande från DCP-o-matic"
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "Datasat AP20 eller AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "Avflätning"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -870,7 +906,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Hej maskinist!\n"
"\n"
@@ -884,11 +920,15 @@ msgstr ""
"Vänliga hälsningar,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 eller CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "Nedladdning misslyckades (%1 fel %2)"
@@ -914,19 +954,19 @@ msgstr "E-posta KDM:er för %2"
msgid "Email notification"
msgstr "E-postmeddelande"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "E-posta felrapport"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "E-posta felrapport för %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "Kodar"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "Episode"
@@ -934,20 +974,20 @@ msgstr "Episode"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Fel i undertext-file: såg %1 men vi förväntade oss %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Fel: %1"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Läser undertexter"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "Undersöker ljud och undertexter"
@@ -959,15 +999,15 @@ msgstr "Läser källmaterial"
msgid "Examining subtitles"
msgstr "Läser undertexter"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "Undersöker undertexter"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "Extraherar"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -975,53 +1015,53 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Misslyckades att autentisera med server (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "Misslyckades att omvandla DCPn."
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "Misslyckades att skicka e-post"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "Feature"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Filnamn"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Filnamn"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Film"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "Söker längd"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "Bildhastighet"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "Fredag"
# Sammanhang?
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Komplett"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Komplett (0-%1)"
@@ -1045,36 +1085,36 @@ msgstr "Speltid i bildrutor i DCP:ns hastighet"
msgid "Full length in video frames at content rate"
msgstr "Speltid i bildrutor i källmaterialets hastighet"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Gamma 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Gamma 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Gradientutjämnare"
# Sammanhang?
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Ljudspår för hörslinga"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "Högkvalitativ brusreducering för 3D"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Horisontell spegling"
@@ -1082,19 +1122,19 @@ msgstr "Horisontell spegling"
msgid "Hz"
msgstr "Hz"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB eller sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "Om 25 fps används bör DCP-standard vara SMPTE."
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
#, fuzzy
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
@@ -1105,15 +1145,15 @@ msgstr ""
"specifikt skäl till att använda Interop. Du bör säkerställa att din DCP "
"använder SMPTE under fliken \"DCP\"."
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1121,73 +1161,74 @@ msgstr ""
"Det är lämpligt att lägga din första undertext minst 2 sekunder efter "
"starten på DCPn för att säkerställa att den syns."
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Det är inte känt vad som orsakade detta fel."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "KDM-leverans: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "Kärn-avflätare"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Vänster"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Vänster center"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Vänster baksurround"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Vänster surround"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "Speltid"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "LFE"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "LFE (Sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Begränsat"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Begränsat (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Linjär"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Logaritmisk (100:1 omfång)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Logaritmisk (316:1 omfång)"
@@ -1195,7 +1236,7 @@ msgstr "Logaritmisk (316:1 omfång)"
msgid "Lost communication between main and writer processes"
msgstr "Tappade kommunikationen mellan huvud- och skrivprocessen"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1203,24 +1244,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Mid-side decoder"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Diverse"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Antalet ljudkanaler är inte enhetligt genom hela DCP:n"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "Ljudspårets samplingsfrekvens är inte enhetlig genom hela DCP:n"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "Bildhastigheten är inte enhetlig genom hela DCP:n"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "Bildstorleken är inte enhetlig genom hela DCP:n"
@@ -1228,19 +1269,19 @@ msgstr "Bildstorleken är inte enhetlig genom hela DCP:n"
msgid "Missing required setting %1"
msgstr "Nödvändig inställning saknas: %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "MÃ¥ndag"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Mono"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "Rörelsekompenserande avflätare"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "Inga CPL:er hittades i DCP:n."
@@ -1254,78 +1295,91 @@ msgstr "Ingen e-postserver har angetts i inställningar"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Ingen e-postserver har angetts i inställningar"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "Inga giltiga bildfiler hittades i mappen."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "Brusreducering"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Inget"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "OK (tog %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "OK (tog %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "Endast det första blocket källmaterial kan trimmas från start."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Endast det sista blocket källmaterial kan trimmas från slutet."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "Dövtextning"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "Undertexter"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
"Några filer har ändrats sedan de lades till i projektet. Öppna projektet i "
"DCP-o-matic, kolla inställningarna, spara sedan innan du försöker igen."
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "Orientering"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "Minnet slut"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Överkomplett wavelet-brusreducering"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"Vänligen rapportera detta problem genom att använda 'Hjälp -> Rapportera "
+"problem' eller via e-post till carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "Policy"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Förberedd för videobildshastighet"
@@ -1333,93 +1387,93 @@ msgstr "Förberedd för videobildshastighet"
msgid "Programming error at %1:%2 %3"
msgstr "Programmeringsfel vid %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "Promo"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "Public Service Announcement"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "Rating"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Höger"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Höger center"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Höger baksurround"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Höger surround"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Rotera 90 grader moturs"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Rotera 90 grader medurs"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1429,23 +1483,23 @@ msgstr ""
"av eftertexterna (FFEC) och första bildrutan av rullande eftertexter "
"(FFMC). Du bör lägga till dessa markeringar i fliken \"DCP\"."
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 för 10-, 12-, 14- och 16-bitars system"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1458,27 +1512,27 @@ msgstr "SSH fel [%1]"
msgid "SSH error [%1] (%2)"
msgstr "SSH fel [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Lördag"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "GÃ¥r igenom bildfiler"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Skickar e-post"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "Short"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "Tecken"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Upplösning"
@@ -1486,7 +1540,7 @@ msgstr "Upplösning"
msgid "Some audio will be resampled to %1Hz"
msgstr "En del av ljudspåret kommer samplas om till %1 Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
#, fuzzy
msgid "Some files have been changed since they were added to the project."
msgstr ""
@@ -1495,7 +1549,7 @@ msgstr ""
"Dessa filer kommer nu att genomsökas på nytt, deras inställningar kan "
"därefter behöva kontrolleras."
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
#, fuzzy
msgid ""
"Some files have been changed since they were added to the project.\n"
@@ -1519,7 +1573,7 @@ msgstr ""
"Dessa filer kommer nu att genomsökas på nytt, deras inställningar kan "
"därefter behöva kontrolleras."
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
@@ -1527,7 +1581,7 @@ msgstr ""
"Några av dina dolda undertext-block har fler än %1 rader. De överskjutande "
"raderna kommer förmodligen klippas bort."
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1549,11 +1603,11 @@ msgstr "En del av ditt källmaterial behöver en KDM"
msgid "Some of your content needs an OV"
msgstr "En del av ditt källmaterial behöver en OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Stereo"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Stereo"
@@ -1566,19 +1620,19 @@ msgstr "Stereo till 5.1 upp-mixare A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Stereo till 5.1 upp-mixare B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "Söndag"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "Teaser"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Telecine-filter"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "Test"
@@ -1598,25 +1652,25 @@ msgstr "Certifikatkedjan för att signera är ogiltig"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Certifikatkedjan för att signera är ogiltig (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1626,7 +1680,7 @@ msgstr ""
"Vänligen ange den som 2D. Det går fortfarande att göra en 3D DCP från detta "
"källmaterial genom att kryssa i 3D-vaket i fliken för DCP-video."
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1634,23 +1688,37 @@ msgstr ""
"Filsystemet som filmen lagras på har för lite ledigt utrymme. Frigör utrymme "
"och försök igen."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Filen %1 har flyttats %2 millisekunder tidigare."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Filen %1 har flyttats %2 millisekunder senare."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Filen %1 har trimmats med %2 millisekunder mindre."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Filen %1 har trimmats med %2 millisekunder mer."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1665,11 +1733,11 @@ msgstr ""
"att ange DCP:ns bildhastighet närmare källmaterialets, förutsatt att den "
"tänkta utrustningen för uppspelning klarar den angivna bildhastigheten."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "Det finns inget bildspår i denna DCP"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1679,30 +1747,33 @@ msgstr ""
"operativsystem, försök att minska antalet kodnings-trådar i Allmänt-fliken "
"under Inställningar."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr "Denna KDM är skapad för DCP-o-matic men inte för dess löv-certifikat."
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr "Denna KDM är inte gjord för DCP-o-matics dekrypterings-certifikat."
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"Detta fel beror troligen på att du kör en 32-bitars version av DCP-o-matic "
"och försöker köra för många kodningstrådar. Vänligen minska antalet trådar "
"i inställningarna och försök igen."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"Detta fel beror troligen på att du kör en 32-bitars version av DCP-o-matic. "
"Vänligen ominstallera med en 64-bitars version och försök igen."
@@ -1715,45 +1786,47 @@ msgstr ""
"Detta är en KDM. KDM:er ska läggas till DCP:er genom att högerklicka på "
"källmaterialet och välja \"Lägg till KDM\"."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Denna film skapades i en nyare version av DCP-o-matic, och den kan inte "
"öppnas i denna version. Förlåt!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Denna film skapades i en äldre version av DCP-o-matic, och tyvärr kan den "
"inte öppnas i denna version. Du måste skapa en ny film, lägga till ditt "
"källmaterial och ange inställningar på nytt. Förlåt!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Torsdag"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "Undertexter"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "Trailer"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "Transkoderar %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "Transitional"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Tisdag"
@@ -1761,7 +1834,7 @@ msgstr "Tisdag"
msgid "USL"
msgstr "USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Oväntat innehåll i ZIP-fil"
@@ -1769,35 +1842,35 @@ msgstr "Oväntat innehåll i ZIP-fil"
msgid "Unexpected image type received by server"
msgstr "Oväntad bildtyp mottogs av server"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "Okänd"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Okänt fel"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Okänt ljudsamplingsformat (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "Oskarp mask och gaussisk oskärpa"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Ospecificerad"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Utan titel"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Oanvänd"
@@ -1810,7 +1883,7 @@ msgid "Upmix R"
msgstr "Uppmixa R"
# Sammanhang?
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1818,11 +1891,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Verifiera DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Vertikal spegling"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Uppläst text"
@@ -1830,24 +1903,24 @@ msgstr "Uppläst text"
msgid "Waiting"
msgstr "Väntar"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Weave-filter"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Onsdag"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
# Filtret heter så, ska ej översättas
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1857,7 +1930,7 @@ msgstr ""
"Vald bildhastighet är %1 fps. Denna bildhastighet stöds inte av all "
"uppspelningsutrustning. Rekommenderat är att ändra bildhastighet till %2 fps."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1866,7 +1939,7 @@ msgstr ""
"Vald bildhastighet är %1 fps. Denna bildhastighet stöds inte av all "
"uppspelningsutrustning. Överväg att ändra bildhastighet till %2 fps."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -1874,19 +1947,11 @@ msgstr ""
"Vald bildhastighet är 30 fps. Denna bildhastighet stöds inte av all "
"uppspelningsutrustning. Problem vid uppspelning kan förekomma."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Du använder källmaterial i 3D, men DCP:n är inställd för 2D. Ställ in DCP:n "
-"för 3D om du vill spela upp den med 3D-utrustning (t.ex. Real-D, MasterImage "
-"etc.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"DCP-o-matics stereo-till-5.1-uppmixare används. Denna har experimentstatus "
@@ -1894,7 +1959,16 @@ msgstr ""
"rekommenderas att du provlyssnar den färdiga DCP:n på biograf för att "
"säkerställa att den låter bra."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Du använder källmaterial i 3D, men DCP:n är inställd för 2D. Ställ in DCP:n "
+"för 3D om du vill spela upp den med 3D-utrustning (t.ex. Real-D, MasterImage "
+"etc.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1902,7 +1976,7 @@ msgstr ""
"Du har %1 filer som ser ut att vara VOB-filer från en DVD. Du bör sammanfoga "
"dem för att säkerställa korrekta skarvar mellan filerna."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
@@ -1910,7 +1984,7 @@ msgstr ""
"Du har mer än en Atmos-del i innehållet, och de har inte samma "
"bildhastighet. Du måste ta bort någon/några Atmos-delar."
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1918,7 +1992,7 @@ msgstr ""
"Du har överlappande dolda undertextspår. Detta är inte tillåtet för Interop-"
"DCP:er. Ändra DCP-standard till SMPTE."
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1930,26 +2004,27 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Du måste lägga till källmaterial till DCP:n innan du skapar den"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"Din DCP har mindre än 6 kanaler ljud. Detta kan skapa problem för en del "
"projektorer. Du bör ange 6 kanaler för din DCP. Det spelar ingen roll om "
"ditt innehåll har färre kanaler, DCP-o-matic fyller i de extra kanalerna med "
"tystnad."
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1958,7 +2033,7 @@ msgstr ""
"uppspelning på en del utrustning. Använd Flat eller Scope som bildformat om "
"möjligt."
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1966,12 +2041,12 @@ msgstr ""
"Din ljudnivå är mycket hög (på %1). Rekommenderat är att sänka gain på "
"ljudspåret."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr "Ditt projekt innehåller bild som inte passar mot en hel bildruta."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1979,21 +2054,21 @@ msgstr ""
"Ditt projekt innehåller bild som är trimmat så att det inte passar mot en "
"hel bildruta."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[bildsekvens]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[stillbild]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[undertexter]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_akt%1"
@@ -2025,11 +2100,11 @@ msgstr "kopierar %1"
msgid "could not find stream information"
msgstr "kunde inte hitta information om strömmen"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "kunde inte flytta in atmos innehållet till DCP:n (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "kunde inte flytta in ljud till DCP:n (%1)"
@@ -2057,7 +2132,7 @@ msgstr "kunde inte skriva till fil %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "fel vid async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "fel vid async_read (%1)"
@@ -2065,62 +2140,72 @@ msgstr "fel vid async_read (%1)"
msgid "error during async_write (%1)"
msgstr "fel vid async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "bilder per sekund"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "tim"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "den har en annan bildhastighet än filmen."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr "den har en beskärning i början så dess undertitlar måste skrivas om."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "den är i 2K men filmen är i 4K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "den är i 4K men filmen är i 2K."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "den är i Interop men filmen är inställd att vara i SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "den är i SMPTE men filmen är inställd att vara i Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
+msgstr "den överlappar med annat ljud-källmaterial; ta bort detta."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
msgstr "den överlappar med annat ljud-källmaterial; ta bort detta."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "den överlappar med annat video-källmaterial; ta bort detta."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2129,17 +2214,17 @@ msgstr ""
"'dela upp enligt källmaterial'."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "bildrutornas storlek skiljer sig från filmens."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "min"
# Sammanhang?
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "rörlig"
@@ -2148,7 +2233,7 @@ msgid "name"
msgstr "namn"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
@@ -2156,7 +2241,7 @@ msgstr ""
"en av dess undertitlar har en icke-noll början så den måste skrivas om."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
@@ -2164,31 +2249,39 @@ msgstr ""
"en av dess undertexter har en icke-noll början så den måste skrivas om."
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "sek"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "stillbild"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "den överlappar med annat undertext-källmaterial; ta bort detta."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "okänd"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "bildrutor"
+#~ msgid "Copying old video file"
+#~ msgstr "Kopierar tidigare videofil"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "Kopierar in videofil till DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "Meddelande från DCP-o-matic"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "den överlappar med annat undertext-källmaterial; ta bort detta."
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "den har inte dold undertext i alla akter."
@@ -2199,13 +2292,6 @@ msgstr "bildrutor"
#~ msgstr "den har inte ljud i alla akter."
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "Vänligen rapportera detta problem genom att använda 'Hjälp -> Rapportera "
-#~ "problem' eller via e-post till carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr ""
#~ "Din standard-behållare är inte korrekt och har justerats till Flat "
diff --git a/src/lib/po/tr_TR.po b/src/lib/po/tr_TR.po
index 16e93a77a..d82c29bff 100644
--- a/src/lib/po/tr_TR.po
+++ b/src/lib/po/tr_TR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,50 +17,50 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
"Content frame rate %.4f\n"
msgstr ""
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
msgstr ""
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
"Display aspect ratio %.2f:1"
msgstr ""
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
msgstr ""
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
msgstr ""
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr ""
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr ""
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -74,39 +74,77 @@ msgid ""
"Size: $SIZE\n"
msgstr ""
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr ""
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr ""
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr ""
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr ""
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr ""
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr ""
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr ""
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+msgid "%1 notification"
+msgstr ""
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ""
@@ -143,11 +181,11 @@ msgstr ""
msgid "1.90 (Full frame)"
msgstr ""
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr ""
@@ -159,68 +197,68 @@ msgstr ""
msgid "2.39 (Scope)"
msgstr ""
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr ""
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr ""
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr ""
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr ""
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr ""
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -228,14 +266,14 @@ msgid ""
"tab."
msgstr ""
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
"DCP's container to have the same ratio as your content."
msgstr ""
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr ""
@@ -243,58 +281,58 @@ msgstr ""
msgid "Analysing audio"
msgstr ""
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr ""
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -313,72 +351,72 @@ msgstr ""
msgid "Audio will not be resampled"
msgstr ""
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr ""
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr ""
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr ""
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr ""
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr ""
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr ""
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr ""
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr ""
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr ""
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr ""
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr ""
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr ""
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr ""
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr ""
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr ""
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr ""
@@ -390,11 +428,11 @@ msgstr ""
msgid "Cannot handle pixel format %1 during %2"
msgstr ""
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr ""
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr ""
@@ -402,7 +440,7 @@ msgstr ""
msgid "Channels"
msgstr ""
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -410,27 +448,31 @@ msgstr ""
msgid "Checking content"
msgstr ""
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr ""
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr ""
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr ""
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr ""
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+msgid "Closed subtitles"
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr ""
@@ -444,17 +486,17 @@ msgstr ""
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr ""
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr ""
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr ""
@@ -462,15 +504,15 @@ msgstr ""
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr ""
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr ""
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -486,19 +528,19 @@ msgstr ""
msgid "Content sample rate"
msgstr ""
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr ""
@@ -507,11 +549,11 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr ""
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
@@ -547,7 +589,7 @@ msgstr ""
msgid "Content to be joined must have the same fades."
msgstr ""
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr ""
@@ -555,31 +597,31 @@ msgstr ""
msgid "Content to be joined must have the same picture size."
msgstr ""
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr ""
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr ""
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr ""
@@ -587,23 +629,23 @@ msgstr ""
msgid "Content to be joined must have the same video frame type."
msgstr ""
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr ""
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr ""
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr ""
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr ""
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr ""
@@ -611,14 +653,6 @@ msgstr ""
msgid "Copy DCP to TMS"
msgstr ""
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr ""
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr ""
@@ -635,17 +669,17 @@ msgstr ""
msgid "Could not decode image (%1)"
msgstr ""
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
msgid "Could not find file %1 in ZIP file"
msgstr ""
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr ""
@@ -653,19 +687,19 @@ msgstr ""
msgid "Could not open %1 to send"
msgstr ""
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr ""
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr ""
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr ""
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr ""
@@ -681,19 +715,19 @@ msgstr ""
msgid "Could not write to remote file (%1)"
msgstr ""
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr ""
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr ""
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr ""
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr ""
@@ -705,7 +739,7 @@ msgstr ""
msgid "DCI Scope"
msgstr ""
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr ""
@@ -722,43 +756,34 @@ msgstr ""
msgid "DCP will use every other frame of the content.\n"
msgstr ""
-#: src/lib/job.cc:172 src/lib/job.cc:187
-msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
-msgstr ""
-
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr ""
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr ""
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
msgid ""
"Dear Projectionist\n"
"\n"
@@ -770,14 +795,18 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
+msgstr ""
+
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
msgstr ""
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr ""
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr ""
@@ -801,19 +830,19 @@ msgstr ""
msgid "Email notification"
msgstr ""
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr ""
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr ""
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr ""
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -821,19 +850,19 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr ""
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr ""
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
msgid "Examining audio"
msgstr ""
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr ""
@@ -845,15 +874,15 @@ msgstr ""
msgid "Examining subtitles"
msgstr ""
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr ""
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr ""
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr ""
@@ -861,51 +890,51 @@ msgstr ""
msgid "Failed to authenticate with server (%1)"
msgstr ""
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr ""
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr ""
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr ""
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr ""
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr ""
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr ""
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr ""
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr ""
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr ""
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr ""
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr ""
@@ -929,35 +958,35 @@ msgstr ""
msgid "Full length in video frames at content rate"
msgstr ""
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr ""
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr ""
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr ""
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr ""
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr ""
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr ""
@@ -965,105 +994,105 @@ msgstr ""
msgid "Hz"
msgstr ""
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr ""
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+msgid "It is not known what caused this error. %1"
msgstr ""
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr ""
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr ""
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr ""
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr ""
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr ""
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr ""
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr ""
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr ""
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr ""
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr ""
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr ""
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
msgid "Limited / video (%1-%2)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr ""
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr ""
@@ -1071,7 +1100,7 @@ msgstr ""
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr ""
@@ -1079,24 +1108,24 @@ msgstr ""
msgid "Mid-side decoder"
msgstr ""
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr ""
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr ""
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr ""
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr ""
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr ""
@@ -1104,19 +1133,19 @@ msgstr ""
msgid "Missing required setting %1"
msgstr ""
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr ""
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr ""
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr ""
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr ""
@@ -1128,74 +1157,83 @@ msgstr ""
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr ""
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr ""
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr ""
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr ""
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
msgid "OK (ran for %1 from %2 to %3)"
msgstr ""
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr ""
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr ""
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr ""
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+msgid "Open captions"
+msgstr ""
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr ""
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr ""
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr ""
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr ""
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr ""
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr ""
@@ -1203,116 +1241,116 @@ msgstr ""
msgid "Programming error at %1:%2 %3"
msgstr ""
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr ""
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr ""
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr ""
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr ""
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr ""
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr ""
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr ""
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr ""
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr ""
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr ""
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr ""
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr ""
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr ""
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr ""
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr ""
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr ""
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr ""
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr ""
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr ""
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr ""
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr ""
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr ""
@@ -1325,27 +1363,27 @@ msgstr ""
msgid "SSH error [%1] (%2)"
msgstr ""
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr ""
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr ""
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr ""
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr ""
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr ""
@@ -1353,11 +1391,11 @@ msgstr ""
msgid "Some audio will be resampled to %1Hz"
msgstr ""
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1372,13 +1410,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1397,11 +1435,11 @@ msgstr ""
msgid "Some of your content needs an OV"
msgstr ""
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr ""
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr ""
@@ -1413,19 +1451,19 @@ msgstr ""
msgid "Stereo to 5.1 up-mixer B"
msgstr ""
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr ""
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr ""
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr ""
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr ""
@@ -1445,54 +1483,68 @@ msgstr ""
msgid "The certificate chain for signing is invalid (%1)"
msgstr ""
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgstr ""
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr ""
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr ""
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr ""
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr ""
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1501,38 +1553,37 @@ msgid ""
"systems support your chosen DCP rate."
msgstr ""
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr ""
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
"tab of Preferences."
msgstr ""
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1541,40 +1592,40 @@ msgid ""
"the content and choosing \"Add KDM\"."
msgstr ""
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr ""
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr ""
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr ""
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr ""
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr ""
@@ -1582,7 +1633,7 @@ msgstr ""
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr ""
@@ -1590,35 +1641,35 @@ msgstr ""
msgid "Unexpected image type received by server"
msgstr ""
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr ""
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr ""
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr ""
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr ""
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr ""
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr ""
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr ""
@@ -1630,7 +1681,7 @@ msgstr ""
msgid "Upmix R"
msgstr ""
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr ""
@@ -1638,11 +1689,11 @@ msgstr ""
msgid "Verify DCP"
msgstr ""
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr ""
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr ""
@@ -1650,74 +1701,74 @@ msgstr ""
msgid "Waiting"
msgstr ""
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr ""
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr ""
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr ""
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr ""
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
"to %2 fps."
msgstr ""
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
"rate to %2 fps."
msgstr ""
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
msgstr ""
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:324
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
msgstr ""
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
msgstr ""
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1727,59 +1778,59 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr ""
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
msgstr ""
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr ""
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr ""
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr ""
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr ""
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr ""
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr ""
@@ -1811,11 +1862,11 @@ msgstr ""
msgid "could not find stream information"
msgstr ""
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr ""
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr ""
@@ -1843,7 +1894,7 @@ msgstr ""
msgid "error during async_connect (%1)"
msgstr ""
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr ""
@@ -1851,78 +1902,85 @@ msgstr ""
msgid "error during async_write (%1)"
msgstr ""
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr ""
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr ""
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr ""
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+msgid "it overlaps other audio content."
msgstr ""
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+msgid "it overlaps other text content."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:739
+msgid "it overlaps other video content."
+msgstr ""
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr ""
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr ""
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr ""
@@ -1931,40 +1989,36 @@ msgid "name"
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr ""
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr ""
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr ""
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr ""
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr ""
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr ""
diff --git a/src/lib/po/uk_UA.po b/src/lib/po/uk_UA.po
index 73e0d2208..6695a6d6a 100644
--- a/src/lib/po/uk_UA.po
+++ b/src/lib/po/uk_UA.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
"PO-Revision-Date: 2018-08-20 19:32+0300\n"
"Last-Translator: Igor Voytovich <i.voyt@dualvfilms.com>\n"
"Language-Team: УкраїнÑька\n"
@@ -15,7 +15,7 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -24,7 +24,7 @@ msgstr ""
"\n"
"ЧаÑтота кадрів контенту %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -32,7 +32,7 @@ msgstr ""
"\n"
"Розмір при кадруванні: %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -41,7 +41,7 @@ msgstr ""
"\n"
"Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін контенту %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -49,7 +49,7 @@ msgstr ""
"\n"
"Заповнено чорним Ð´Ð»Ñ Ð¿Ñ–Ð´Ð³Ð¾Ð½ÐºÐ¸ контейнера %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -57,18 +57,18 @@ msgstr ""
"\n"
"Розмір при маÑштабуванні: %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " на %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
#, fuzzy
msgid ""
"$CPL_NAME\n"
@@ -92,39 +92,82 @@ msgstr ""
"ТриваліÑть: $LENGTH\n"
"Розмір: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$JOB_NAME: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr ""
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [Atmos]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [аудіо]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [відео]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [відео]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+#, fuzzy
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr ""
+"DCP-o-matic не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %1 (%2). Можливо він не Ñ–Ñнує або має "
+"неочікуваний формат."
+
+#: src/lib/film.cc:1659
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+
+#: src/lib/film.cc:1627
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr ""
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr ""
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr ""
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "DCP-o-matic більше не підтримує фильтр `%1', тому він був вимкнений."
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "E-mail повідомленнÑ"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr ""
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін пікÑелей %.2f:1"
@@ -161,11 +204,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Full frame)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr ""
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
#, fuzzy
msgid "16"
msgstr "1.66"
@@ -178,71 +221,72 @@ msgstr "2.35 (35mm Scope)"
msgid "2.39 (Scope)"
msgstr "2.39 (Scope)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ 3D"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
"advisable to set the DCP to be 2K in the \"DCP→Video\" tab."
msgstr ""
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr ""
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 кадр/Ñек"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; %1 залишилоÑÑŒ; Ñ‡Ð°Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %2%3"
-#: src/lib/analytics.cc:65
+#: src/lib/analytics.cc:66
msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"ДеÑкі проектори мають проблеми із відтвореннÑм DCP з дуже виÑоким бітрейтом. "
"Гарною ідеєю було б знизити пропуÑкну здатніÑть JPEG2000 до 200Мбит/Ñ; "
"наврÑд чи це призведе до помітних змін зображеннÑ."
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 ('Hybrid log-gamma')"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "ADV (Реклама)"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -253,7 +297,7 @@ msgstr ""
"означає, що у кадрі зверху та знизу вашого контенту будуть чорні облаÑті. Ви "
"можете змінити формат кадра вашого DCP на SCOPE (2.39:1) на вкладці \"DCP\"."
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
#, fuzzy
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
@@ -265,7 +309,7 @@ msgstr ""
"будуть чорні облаÑті. Ви можете змінити формат кадра вашого DCP на FLAT "
"(1.85:1) на вкладці \"DCP\"."
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "Виникла помилка при зверненні до файлу %1."
@@ -274,59 +318,59 @@ msgstr "Виникла помилка при зверненні до файлу
msgid "Analysing audio"
msgstr "Ðналіз аудіо"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
#, fuzzy
msgid "Analysing subtitles"
msgstr "Пошук Ñубтитрів"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr ""
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr ""
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr ""
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr ""
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr ""
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr ""
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -345,73 +389,73 @@ msgstr "Ðудіо будет реÑемпловано в %1 Гц"
msgid "Audio will not be resampled"
msgstr "Ðудіо не буде реÑемпловано"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361 розширена колірна гамма"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 поÑтійна ÑÑкравіÑть"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 Ð´Ð»Ñ 10-бітної ÑиÑтеми"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 Ð´Ð»Ñ 12-бітної ÑиÑтеми"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 непоÑтійна ÑÑкравіÑть"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "Біт на пікÑель"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
#, fuzzy
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Ще один фільтр деінтерлейÑинга"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "C"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "Відмінено"
@@ -423,11 +467,11 @@ msgstr "Ðе може міÑтити Ñлеші"
msgid "Cannot handle pixel format %1 during %2"
msgstr "Ðеможливо обробити формат пікÑÐµÐ»Ñ %1 під Ñ‡Ð°Ñ %2"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "Ðе можна Ñтворити KDM так Ñк цей проект не зашифрований."
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "Центральний"
@@ -435,7 +479,7 @@ msgstr "Центральний"
msgid "Channels"
msgstr "Канали"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr ""
@@ -444,28 +488,33 @@ msgstr ""
msgid "Checking content"
msgstr "Перевірка контенту"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "Перевірка данних зображеннÑ"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "Хроматична поÑтійна ÑÑкравіÑть"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "Хроматична непоÑтійна ÑÑкравіÑть"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr ""
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
#, fuzzy
msgid "Closed captions"
msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "ТекÑтові Ñубтитри"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "ОÑновні кольори"
@@ -479,17 +528,17 @@ msgstr "ОÑновні кольори"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "Колірна гамма"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "ХарактериÑтика передачі кольору"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "Кольорова палітра"
@@ -497,15 +546,15 @@ msgstr "Кольорова палітра"
msgid "Combine DCPs"
msgstr ""
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "Перевірка цілоÑтноÑті"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "Перевірка цілоÑтноÑті"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr ""
@@ -523,23 +572,23 @@ msgstr "тип контенту"
msgid "Content sample rate"
msgstr "ШвидкіÑть аудіо-контенту"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ контенту, вÑÑ– інші мають міÑтити або не міÑтити аудіо"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
#, fuzzy
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ контенту, вÑÑ– інші мають міÑтити або не міÑтити Ñубтитри"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ контенту, вÑÑ– інші мають міÑтити або не міÑтити відео"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
#, fuzzy
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
@@ -551,12 +600,12 @@ msgstr ""
msgid "Content to be joined must have all its video used or not used."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути така Ñама чаÑтота кадрів відео"
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ мають бути такі Ñамі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ \"вшити Ñубтитри\"."
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ мають бути такі Ñамі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ \"викориÑтовувати "
@@ -598,7 +647,7 @@ msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ мають бути такÑ
msgid "Content to be joined must have the same fades."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме згаÑаннÑ."
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути однакова ширина обводки."
@@ -606,36 +655,36 @@ msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути однакÐ
msgid "Content to be joined must have the same picture size."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий розмір зображеннÑ."
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме горизонтальне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñубтитрів."
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме розмір Ñубтитрів по горизонталі."
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме вертикальне Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñубтитрів."
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути таке Ñаме розмір Ñубтитрів по вертикалі."
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути однакове згаÑÐ°Ð½Ð½Ñ Ñубтитрів."
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr ""
"Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий інтервал між Ñ€Ñдками Ñубтитрів."
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути така Ñама чаÑтота кадрів відео"
@@ -643,25 +692,25 @@ msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути така Ñ
msgid "Content to be joined must have the same video frame type."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий тип відео."
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
#, fuzzy
msgid "Content to be joined must use the same DCP track."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий шрифт."
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий шрифт."
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ необхідно викориÑтовувати ті Ñамі Ñубтитри."
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
#, fuzzy
msgid "Content to be joined must use the same text language."
msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ має бути такий Ñамий шрифт."
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "Розмір контенту: %1x%2"
@@ -669,15 +718,6 @@ msgstr "Розмір контенту: %1x%2"
msgid "Copy DCP to TMS"
msgstr "Копіювати DCP на TMS (Theater Management System)"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr ""
-
-#: src/lib/reel_writer.cc:407
-#, fuzzy
-msgid "Copying video file into DCP"
-msgstr "ÐевідповідніÑть розміру відео в DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ð¸ÑÑ Ð´Ð¾ Ñерверу %1 (%2)"
@@ -695,20 +735,21 @@ msgstr "Ðе вдалоÑÑŒ декодувати JPEG2000-файл %1 (%2)"
msgid "Could not decode image (%1)"
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ (%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ завантажений ZIP-архів"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr ""
"Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñлухати віддалений Ñервер кодуваннÑ. Можливо працює ще одна "
"ÐºÐ¾Ð¿Ñ–Ñ DCP-o-matic."
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1"
@@ -716,21 +757,21 @@ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1"
msgid "Could not open %1 to send"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %1 Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²ÐºÐ¸"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ завантажений ZIP-архів"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
#, fuzzy
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ завантажений ZIP-архів"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
#, fuzzy
msgid "Could not open file for writing"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %1 Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу (%2)"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
#, fuzzy
msgid "Could not open output file %1 (%2)"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати в файл %1 (%2)"
@@ -747,19 +788,19 @@ msgstr "Ðе вдалоÑÑ Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¸ передачу"
msgid "Could not write to remote file (%1)"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати в віддалений файл (%1)"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "D-BOX оÑновний (DBP)"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "D-BOX другорÑдний (DBS)"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -771,7 +812,7 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML Ñубтитри"
@@ -788,45 +829,35 @@ msgstr "DCP буде програватиÑÑ Ð½Ð° %.1f%% від швидкоÑÑ
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP буде викориÑтовувати кажний другий кадр контенту.\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %1 (%2). Можливо він не Ñ–Ñнує або має "
-"неочікуваний формат."
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
msgstr ""
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
msgstr ""
-#: src/lib/ffmpeg_content.cc:121
-msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "DCP-o-matic більше не підтримує фильтр `%1', тому він був вимкнений."
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ DCP-o-matic"
-
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr ""
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "ДеинтерлейÑинг"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -838,7 +869,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"Шановний кіномеханик\n"
"\n"
@@ -852,12 +883,16 @@ msgstr ""
"Із найкращими побажаннÑми,\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
#, fuzzy
msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 и CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
#, fuzzy
msgid "Download failed (%1 error %2)"
msgstr "Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ (%1/%2 помилка %3)"
@@ -883,19 +918,19 @@ msgstr "Відправка ключей %1 по Email"
msgid "Email notification"
msgstr "E-mail повідомленнÑ"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "Повідомити про проблему"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "Помилка відправки ключей %1 по Email"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "КодуваннÑ"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr ""
@@ -903,20 +938,20 @@ msgstr ""
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "Помилка у файлі Ñубтитрів: знайдено %1, однак очікуєтьÑÑ %2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "Помилка: (%1)"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr ""
-#: src/lib/hints.cc:397
+#: src/lib/hints.cc:417
#, fuzzy
msgid "Examining audio"
msgstr "Пошук Ñубтитрів"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr ""
@@ -930,17 +965,17 @@ msgstr "Перевірка контенту"
msgid "Examining subtitles"
msgstr "Пошук Ñубтитрів"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
#, fuzzy
msgid "Examining subtitles and closed captions"
msgstr "Пошук Ñубтитрів"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
#, fuzzy
msgid "Extracting"
msgstr "RTG (Рейтинг)"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -948,54 +983,54 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "Помилка аутентифікації Ñервером (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
#, fuzzy
msgid "Failed to encode the DCP."
msgstr "Помилка відправки email (%1)"
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
#, fuzzy
msgid "Failed to send email"
msgstr "Помилка відправки email (%1)"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "FTR (Фільм)"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "Ім`Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
#, fuzzy
msgid "Filenames"
msgstr "Ім`Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr ""
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "Проект"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "РаÑчет длительноÑти"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "ЧаÑтота кадрів"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "П'ÑтницÑ"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Повний"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "Повний (0-%1)"
@@ -1019,35 +1054,35 @@ msgstr "Повна довжина відео-кадрів на швидкоÑÑ‚Ñ
msgid "Full length in video frames at content rate"
msgstr "Повна довжина відео-кадрів на швидкоÑті контенту"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "Гамма 22 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "Гамма 28 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "Ð Ð¾Ð·Ð±Ð¸Ñ‚Ñ‚Ñ Ð³Ñ€Ð°Ð´Ñ–Ñ”Ð½Ñ‚Ð°"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "Ð”Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹ з вадами Ñлуху"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "ВиÑокоÑкіÑне Ð¿Ñ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ 3D"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr ""
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "Перевернути по горизонталі"
@@ -1055,106 +1090,107 @@ msgstr "Перевернути по горизонталі"
msgid "Hz"
msgstr "Гц"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB или sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
"the SMPTE standard in the \"DCP\" tab."
msgstr ""
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
msgstr ""
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr ""
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "Ðевідомо, що викликало цю помилку."
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ KDM: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "ДеинтерлейÑинг Ñдром"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "Лівий"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "Лівий центральний"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "Лівий тиловий surround"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "Лівий surround"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "ТриваліÑть"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "LFE"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "ÐЧ (sub)"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "Обмежено"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
#, fuzzy
msgid "Limited / video (%1-%2)"
msgstr "Обмежено (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "Лінійний"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "Логаріфмічний (діапазон 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "Логаріфмічний (діапазон 316:1)"
@@ -1162,7 +1198,7 @@ msgstr "Логаріфмічний (діапазон 316:1)"
msgid "Lost communication between main and writer processes"
msgstr ""
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "Ls"
@@ -1170,24 +1206,24 @@ msgstr "Ls"
msgid "Mid-side decoder"
msgstr "Mid-side декодер"
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "Різне"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "Ðевідповідна кількіÑть аудіоканалів в DCP"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "ÐевідповідніÑть чаÑтоти диÑкретизації аудіо в DCP"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "ÐевідповідніÑть чаÑтоти кадрів в DCP"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "ÐевідповідніÑть розміру відео в DCP"
@@ -1195,19 +1231,19 @@ msgstr "ÐевідповідніÑть розміру відео в DCP"
msgid "Missing required setting %1"
msgstr "ВідÑутнє обов'Ñзкове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "Понеділок"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "Моно"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "ДеінтерлейÑер компенÑації руху"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "У DCP не виÑвлені CPL-файли."
@@ -1221,76 +1257,86 @@ msgstr "Ðе наÑтроєний поштовий Ñервер у налаштÑ
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "Ðе наÑтроєний поштовий Ñервер у налаштуваннÑÑ…"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "У папці не знайдено відповідних зображень."
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "Ðічого"
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr ""
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
#, fuzzy
msgid "OK (ran for %1 from %2 to %3)"
msgstr "Готово! (виконано за %1)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "Готово! (виконано за %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "Тільки перший елемент контенту може мати обрізку з початку."
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "Тільки оÑтанній елемент контенту може мати обрізку з кінцÑ."
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "ÐŸÑ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ"
+
+#: src/lib/text_type.cc:79
#, fuzzy
msgid "Open subtitles"
msgstr "ТекÑтові Ñубтитри"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr ""
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "ОріентаціÑ"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "ÐедоÑтатньо пам'Ñті (Out of memory)"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "Ðадповне Ð¿Ñ€Ð¸Ð´ÑƒÑˆÐµÐ½Ð½Ñ ÑˆÑƒÐ¼Ñƒ невеликої хвилі"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "POL (Стратегічний)"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "Підготовлене Ð´Ð»Ñ Ñ‡Ð°Ñтоти кадрів відео"
@@ -1298,116 +1344,116 @@ msgstr "Підготовлене Ð´Ð»Ñ Ñ‡Ð°Ñтоти кадрів відео"
msgid "Programming error at %1:%2 %3"
msgstr "Помилка Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr ""
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "PSA (Соціальна реклама)"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "R"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "RTG (Рейтинг)"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "Правий"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "Правий центральний"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "Правий тиловий surround"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "Правий surround"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "Повернути на 90º проти чаÑової Ñтрілкі"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "Повернути на 90º по чаÑовій Ñтрілці"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "Rs"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
"You should add these markers using the 'Markers' button in the \"DCP\" tab."
msgstr ""
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 Ð´Ð»Ñ 10, 12, 14 та 16-бітних ÑиÑтем"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1422,27 +1468,27 @@ msgstr "Помилка SSH (%1)"
msgid "SSH error [%1] (%2)"
msgstr "Помилка SSH (%1)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "Субота"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² зображеннÑ"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "Відправка пошти"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "SHR (Короткометражний фільм)"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr ""
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "Розмір"
@@ -1450,11 +1496,11 @@ msgstr "Розмір"
msgid "Some audio will be resampled to %1Hz"
msgstr "ДеÑке аудіо будет реÑемпловано в %1 Гц"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr ""
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1469,13 +1515,13 @@ msgid ""
"These files will now be re-examined, so you may need to check their settings."
msgstr ""
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr ""
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1495,11 +1541,11 @@ msgstr "ЧаÑтина вашого контенту потребує KDM"
msgid "Some of your content needs an OV"
msgstr "ЧаÑть вашего контента требует OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "Стерео"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
#, fuzzy
msgid "Stereo card"
msgstr "Стерео"
@@ -1512,19 +1558,19 @@ msgstr "Перетворювач A Ñтерео-->5.1"
msgid "Stereo to 5.1 up-mixer B"
msgstr "Перетворювач B Ñтерео-->5.1"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "ÐеділÑ"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "TSR (Тизер)"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "Фільтр Telecine"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "TST (ТеÑтовий)"
@@ -1544,32 +1590,32 @@ msgstr "Ланцюг Ñертифікатів Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñу невірн
msgid "The certificate chain for signing is invalid (%1)"
msgstr "Ланцюг Ñертифікатів Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñу невірний (%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
"ticking the 3D option in the DCP video tab."
msgstr ""
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
@@ -1577,23 +1623,37 @@ msgstr ""
"Ðа приÑтрої, на Ñкому зберігаєтьÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚, закінчуєтьÑÑ Ð¼Ñ–Ñце. Звільніть "
"трохи міÑÑ†Ñ Ñ‚Ð° Ñпробуйте знову."
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "Файл %1 переміщений на %2 міліÑекунди раніше."
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "Файл %1 переміщений на %2 міліÑекунди пізніше."
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "Файл %1 був обрізаний на %2 міліÑекунд менше."
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "Файл %1 був обрізаний на %2 міліÑекунд більше."
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1608,11 +1668,11 @@ msgstr ""
"вашого контенту, при умові, що ваша цільова проекційна ÑиÑтема підтримує "
"обрану вами швидкіÑть DCP."
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "У даному DCP немає відео"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
@@ -1622,27 +1682,30 @@ msgstr ""
"Ñпробуйте зменшити кількіÑть потоків ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ \"ÐалаштуваннÑÑ…\" у вкладці "
"\"ОÑновні\"."
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr ""
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+msgid "This KDM was not made for %1's decryption certificate."
msgstr ""
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
+"ÐедоÑтатньо пам'Ñті Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ—. Якщо у Ð²Ð°Ñ 32-бітна ÑиÑтема, "
+"Ñпробуйте зменшити кількіÑть потоків ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ \"ÐалаштуваннÑÑ…\" у вкладці "
+"\"ОÑновні\"."
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
#: src/lib/exceptions.cc:113
@@ -1653,46 +1716,48 @@ msgstr ""
"Цей файл - ключ (KDM). Ключі додаютьÑÑ Ð´Ð¾ DCP натиÑканнÑм правої клавіші на "
"контент Ñ– вибором «Додати KDM» у контекÑтному меню."
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"Проект був Ñтворений більш новою верÑією DCP-o-matic Ñ– не може бути "
"завантажений цією верÑією. Вибачте!"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"Проект був Ñтворений більш Ñтарою верÑією DCP-o-matic Ñ–, на жаль, не може "
"бути завантажений цією верÑією. Вам необхідно Ñтворити новий проект, "
"повторно додати контент та налаштувати його. Вибачте!"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "Четвер"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr ""
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "TRL (Трейлер)"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
#, fuzzy
msgid "Transcoding %1"
msgstr "ТранÑÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "XSN (Транзитний)"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "Вівторок"
@@ -1700,7 +1765,7 @@ msgstr "Вівторок"
msgid "USL"
msgstr ""
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "Ðеочікуваний зміÑÑ‚ ZIP-файла"
@@ -1708,36 +1773,36 @@ msgstr "Ðеочікуваний зміÑÑ‚ ZIP-файла"
msgid "Unexpected image type received by server"
msgstr "Сервером отриманий неочікуваний тип зображеннÑ"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
#, fuzzy
msgid "Unknown"
msgstr "невідомо"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "Ðевідома помилка"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "Ðерозпізнаний формат аудіо (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "МаÑка Ð¿Ð¾Ð½Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ€Ñ–Ð·ÐºÐ¾Ñті та ГауÑÑово розмиттÑ"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "Ðе визначено"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "Безіменний"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "Ðе викориÑтовуєтьÑÑ"
@@ -1749,7 +1814,7 @@ msgstr "Перевторити Л"
msgid "Upmix R"
msgstr "Перевторити П"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "VI"
@@ -1757,11 +1822,11 @@ msgstr "VI"
msgid "Verify DCP"
msgstr "Перевірити DCP"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "Перевернути по вертикалі"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "Ð”Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹ з вадами зору"
@@ -1769,23 +1834,23 @@ msgstr "Ð”Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹ з вадами зору"
msgid "Waiting"
msgstr "ОчікуваннÑ"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Фільтр Weave"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "Середа"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "Ще один фільтр деінтерлейÑинга"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1795,7 +1860,7 @@ msgstr ""
"Ви обрали Ð´Ð»Ñ Interop DCP чаÑтоту кадрів, Ñка офіційно не підтримуєтьÑÑ. "
"Радимо змінити чаÑтоту кадрів вашого DCP або заміÑть цього зробити SMPTE DCP."
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1805,7 +1870,7 @@ msgstr ""
"Ви обрали Ð´Ð»Ñ Interop DCP чаÑтоту кадрів, Ñка офіційно не підтримуєтьÑÑ. "
"Радимо змінити чаÑтоту кадрів вашого DCP або заміÑть цього зробити SMPTE DCP."
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
#, fuzzy
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
@@ -1814,19 +1879,11 @@ msgstr ""
"Ви обрали Ð´Ð»Ñ Interop DCP чаÑтоту кадрів, Ñка офіційно не підтримуєтьÑÑ. "
"Радимо змінити чаÑтоту кадрів вашого DCP або заміÑть цього зробити SMPTE DCP."
-#: src/lib/hints.cc:304
-msgid ""
-"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
-"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
-msgstr ""
-"Ви викориÑтовуєте 3D контент, але тип вашого DCP - 2D. Змінить тип DCP на "
-"3D, Ñкщо хочете відтворити його на 3D-ÑиÑтемі (напр. Real-D, MasterImage Ñ– Ñ‚."
-"п.)"
-
-#: src/lib/hints.cc:120
+#: src/lib/hints.cc:127
+#, fuzzy
msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
"resulting DCP in a cinema to make sure that it sounds good."
msgstr ""
"Ви викориÑтовуєте поÑилювач DCP-o-matic Ð´Ð»Ñ Ñтерео-в-5.1. Це Ñ” "
@@ -1834,7 +1891,16 @@ msgstr ""
"продовжите, ви маєте проÑлухати отриманий DCP у кінотеатрі, щоб впевнитиÑÑŒ, "
"що він звучить добре."
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:324
+msgid ""
+"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
+"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
+msgstr ""
+"Ви викориÑтовуєте 3D контент, але тип вашого DCP - 2D. Змінить тип DCP на "
+"3D, Ñкщо хочете відтворити його на 3D-ÑиÑтемі (напр. Real-D, MasterImage Ñ– Ñ‚."
+"п.)"
+
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1842,19 +1908,19 @@ msgstr ""
"У Ð²Ð°Ñ %1 файлів, Ñкі Ñхожі на VOB-файли з DVD. Вам необхідно об'єднати "
"(приєднати) Ñ—Ñ…, щоб гарантувати гладке з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ файлами."
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr ""
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
msgstr ""
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1866,22 +1932,22 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "Вам необхідно додати контент в DCP перед його ÑтвореннÑм"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
"set the DCP audio channels to 8 or 16."
msgstr ""
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
#, fuzzy
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
@@ -1891,7 +1957,7 @@ msgstr ""
"призвеÑти к проблемам на деÑких проекторах. Якщо можливо, викориÑтовуйте "
"ÑÐ¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñторін Flat або Scope Ð´Ð»Ñ DCP"
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
@@ -1899,14 +1965,14 @@ msgstr ""
"Рівень вашого аудіо занадто виÑокий (на %1). Вам варто знизити рівень "
"гучноÑті вашого аудіо-контенту."
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr ""
"У вашому проекті міÑтитьÑÑ Ð²Ñ–Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, Ñкий не був прив’Ñзаний до межі "
"кадру."
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
@@ -1914,21 +1980,21 @@ msgstr ""
"У вашому проекті міÑтитьÑÑ Ð²Ñ–Ð´ÐµÐ¾ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚, обрізка Ñкого не була вирівнена по "
"межі кадру."
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[поÑлідовніÑть]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[Ñтатичний]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[Ñубтитри]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr ""
@@ -1960,12 +2026,12 @@ msgstr "ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ %1"
msgid "could not find stream information"
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ інформацію про поток"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
#, fuzzy
msgid "could not move atmos asset into the DCP (%1)"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити аудіо в DCP-пакет (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити аудіо в DCP-пакет (%1)"
@@ -1996,7 +2062,7 @@ msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати в файл %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "помилка під Ñ‡Ð°Ñ async_connect (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "помилка під Ñ‡Ð°Ñ async_read (%1)"
@@ -2004,65 +2070,75 @@ msgstr "помилка під Ñ‡Ð°Ñ async_read (%1)"
msgid "error during async_write (%1)"
msgstr "помилка під Ñ‡Ð°Ñ async_write (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "кадра(ів) в Ñекунду"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "г"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
#, fuzzy
msgid "it has a different frame rate to the film."
msgstr "чаÑтота кадрів проекту відрізнÑєтьÑÑ Ð²Ñ–Ð´ чаÑтоти кадрів DCP."
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
#, fuzzy
msgid "it is 2K and the film is 4K."
msgstr "Ñ” Interop , а проект наÑтроений Ñк SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
#, fuzzy
msgid "it is 4K and the film is 2K."
msgstr "Ñ” Interop , а проект наÑтроений Ñк SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "Ñ” Interop , а проект наÑтроений Ñк SMPTE."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "Ñ” SMPTE, а проект наÑтроений Ñк Interop."
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
msgstr "перекриває інший аудіо-контент; приберіть інший аудіо-контент."
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
+msgstr "перекриває інший аудіо-контент; приберіть інший аудіо-контент."
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "перекриває інший відео-контент; приберіть інший відео-контент."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2071,16 +2147,16 @@ msgstr ""
"бобін «РозділÑти по відео-контенту»."
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "розмір кадру відео у проекті відрізнÑєтьÑÑ Ð²Ð¸Ð´ розміру відео DCP."
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "м"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "поÑлідовніÑть"
@@ -2089,46 +2165,52 @@ msgid "name"
msgstr "назва"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr ""
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "Ñ"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "Ñтатичний"
-#: src/lib/dcp_content.cc:790
-#, fuzzy
-msgid "they overlap other text content; remove the other content."
-msgstr "перекриває інший відео-контент; приберіть інший відео-контент."
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "невідомо"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "відеокадри"
#, fuzzy
+#~ msgid "Copying video file into DCP"
+#~ msgstr "ÐевідповідніÑть розміру відео в DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ DCP-o-matic"
+
+#, fuzzy
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "перекриває інший відео-контент; приберіть інший відео-контент."
+
+#, fuzzy
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "у вÑÑ–Ñ… бобінах відÑутній звук."
diff --git a/src/lib/po/zh_CN.po b/src/lib/po/zh_CN.po
index 8cb34b9ca..f308a5ec8 100644
--- a/src/lib/po/zh_CN.po
+++ b/src/lib/po/zh_CN.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: LIBDCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-07-11 16:08+0200\n"
-"PO-Revision-Date: 2023-09-15 00:45+0800\n"
+"POT-Creation-Date: 2024-09-27 20:49+0200\n"
+"PO-Revision-Date: 2024-11-19 08:31+0800\n"
"Last-Translator: Dian Li <xslidian@gmail.com>\n"
"Language-Team: Chinese Simplified (Rov8 branch)\n"
"Language: zh_CN\n"
@@ -21,10 +21,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 3.3.2\n"
+"X-Generator: Poedit 3.5\n"
"X-Poedit-SourceCharset: UTF-8\n"
-#: src/lib/video_content.cc:518
+#: src/lib/video_content.cc:520
#, c-format
msgid ""
"\n"
@@ -33,7 +33,7 @@ msgstr ""
"\n"
"æºè§†é¢‘帧率 %.4f\n"
-#: src/lib/video_content.cc:482
+#: src/lib/video_content.cc:484
msgid ""
"\n"
"Cropped to %1x%2"
@@ -41,7 +41,7 @@ msgstr ""
"\n"
"è£å‰ªä¸º %1x%2"
-#: src/lib/video_content.cc:472
+#: src/lib/video_content.cc:474
#, c-format
msgid ""
"\n"
@@ -50,7 +50,7 @@ msgstr ""
"\n"
"显示宽高比 %.2f:1"
-#: src/lib/video_content.cc:506
+#: src/lib/video_content.cc:508
msgid ""
"\n"
"Padded with black to fit container %1 (%2x%3)"
@@ -58,7 +58,7 @@ msgstr ""
"\n"
"填充为黑色,以适应打包宽高比 %1 (%2x%3)"
-#: src/lib/video_content.cc:496
+#: src/lib/video_content.cc:498
msgid ""
"\n"
"Scaled to %1x%2"
@@ -66,18 +66,18 @@ msgstr ""
"\n"
"缩放到 %1x%2"
-#: src/lib/video_content.cc:500 src/lib/video_content.cc:511
+#: src/lib/video_content.cc:502 src/lib/video_content.cc:513
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
#. TRANSLATORS: the %1 in this string will be filled in with a day of the week
#. to say what day a job will finish.
-#: src/lib/job.cc:588
+#: src/lib/job.cc:598
msgid " on %1"
msgstr " 于 %1"
-#: src/lib/config.cc:1276
+#: src/lib/config.cc:1275
msgid ""
"$CPL_NAME\n"
"\n"
@@ -101,39 +101,83 @@ msgstr ""
"长度: $LENGTH\n"
"大å°: $SIZE\n"
-#: src/lib/config.cc:1254
+#: src/lib/config.cc:1253
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$任务åç§°: $JOB_STATUS"
-#: src/lib/cross_common.cc:102
+#: src/lib/cross_common.cc:99
msgid "%1 (%2 GB) [%3]"
msgstr "%1 (%2 GB) [%3]"
-#: src/lib/atmos_mxf_content.cc:96
+#: src/lib/atmos_mxf_content.cc:97
msgid "%1 [Atmos]"
msgstr "%1 [全景声]"
-#: src/lib/dcp_content.cc:334
+#: src/lib/dcp_content.cc:361
msgid "%1 [DCP]"
msgstr "%1 [DCP]"
-#: src/lib/ffmpeg_content.cc:353
+#: src/lib/ffmpeg_content.cc:354
msgid "%1 [audio]"
msgstr "%1 [音频]"
-#: src/lib/ffmpeg_content.cc:349
+#: src/lib/ffmpeg_content.cc:350
msgid "%1 [movie]"
msgstr "%1 [影片]"
-#: src/lib/ffmpeg_content.cc:351 src/lib/video_mxf_content.cc:105
+#: src/lib/ffmpeg_content.cc:352 src/lib/video_mxf_content.cc:106
msgid "%1 [video]"
msgstr "%1 [视频]"
-#: src/lib/transcode_job.cc:162
+#: src/lib/job.cc:181 src/lib/job.cc:196
+msgid ""
+"%1 could not open the file %2 (%3). Perhaps it does not exist or is in an "
+"unexpected format."
+msgstr "%1 无法打开文件%2 (%3)。文件ä¸å­˜åœ¨æˆ–æ ¼å¼æ— æ³•识别。"
+
+#: src/lib/film.cc:1659
+#, fuzzy
+msgid ""
+"%1 had to change your settings for referring to DCPs as OV. Please review "
+"those settings to make sure they are what you want."
+msgstr ""
+"DCP-o-matic必须把您DCP的设置更改为OVã€‚è¯·é‡æ–°æ£€æŸ¥è®¾ç½®ç¡®è®¤è®¾ç½®å†…容是å¦ä¸ºæ‚¨çš„æœŸ"
+"望值。"
+
+#: src/lib/film.cc:1627
+#, fuzzy
+msgid ""
+"%1 had to change your settings so that the film's frame rate is the same as "
+"that of your Atmos content."
+msgstr "DCP-o-matic必须更改您DCP的设置,使影片的帧率与 Atmos 内容一致。"
+
+#: src/lib/film.cc:1672
+msgid ""
+"%1 had to remove one of your custom reel boundaries as it no longer lies "
+"within the film."
+msgstr "%1 必须删除一个自定义å·è½´è¾¹ç•Œï¼Œå› ä¸ºå®ƒä¸å†ä½äºŽå½±ç‰‡å†…"
+
+#: src/lib/film.cc:1670
+msgid ""
+"%1 had to remove some of your custom reel boundaries as they no longer lie "
+"within the film."
+msgstr "%1必须删除一些自定义å·è½´è¾¹ç•Œï¼Œå› ä¸ºå®ƒä¸å†ä½äºŽå½±ç‰‡ä¸­"
+
+#: src/lib/ffmpeg_content.cc:122
+#, fuzzy
+msgid "%1 no longer supports the `%2' filter, so it has been turned off."
+msgstr "䏿”¯æŒçš„æ ¼å¼`%1'。"
+
+#: src/lib/config.cc:434 src/lib/config.cc:1250
+#, fuzzy
+msgid "%1 notification"
+msgstr "电å­é‚®ä»¶æé†’"
+
+#: src/lib/transcode_job.cc:180
msgid "%1; %2/%3 frames"
msgstr "%1; %2/%3 帧"
-#: src/lib/video_content.cc:467
+#: src/lib/video_content.cc:469
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", åƒç´ å®½é«˜æ¯” %.2f:1"
@@ -170,11 +214,11 @@ msgstr "1.85 (é®å¹…)"
msgid "1.90 (Full frame)"
msgstr "1.90 (全幅)"
-#: src/lib/util.cc:661
+#: src/lib/util.cc:668
msgid "10"
msgstr "10"
-#: src/lib/util.cc:667
+#: src/lib/util.cc:674
msgid "16"
msgstr "16"
@@ -186,11 +230,11 @@ msgstr "2.35 (35mm 宽幅)"
msgid "2.39 (Scope)"
msgstr "2.39 (宽幅)"
-#: src/lib/filter.cc:102
+#: src/lib/filter.cc:103
msgid "3D denoiser"
msgstr "3D é™å™ª"
-#: src/lib/hints.cc:210
+#: src/lib/hints.cc:221
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -199,32 +243,33 @@ msgstr ""
"åªæœ‰æžå°‘数的放映设备支æŒ4K 3Dï¼Œé™¤éžæ‚¨ç¡®è®¤ä½ çš„è®¾å¤‡æ”¯æŒæ”¾æ˜ ï¼Œå¦åˆ™å»ºè®®åœ¨â€œDCP→视"
"频â€é€‰é¡¹å¡ä¸­å°†DCP设置为2K。"
-#: src/lib/util.cc:660
+#: src/lib/util.cc:667
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
-#: src/lib/transcode_job.cc:165
+#: src/lib/transcode_job.cc:183
msgid "; %1 fps"
msgstr "; %1 fps"
-#: src/lib/job.cc:593
+#: src/lib/job.cc:603
msgid "; %1 remaining; finishing at %2%3"
msgstr "; 剩余 %1 ; 完æˆäºŽ %2%3"
-#: src/lib/analytics.cc:65
-msgid ""
-"<h2>You have made %1 DCPs with DCP-o-matic!</h2><img width=\"20%%\" "
-"src=\"memory:me.jpg\" align=\"center\"><p>Hello. I'm Carl and I'm the "
-"developer of DCP-o-matic. I work on it in my spare time (with the help of a "
-"fine volunteer team of testers and translators) and I release it as free "
-"software.<p>If you find DCP-o-matic useful, please consider a donation to "
-"the project. Financial support will help me to spend more time developing "
-"DCP-o-matic and making it better!<p><ul><li><a href=\"https://dcpomatic.com/"
-"donate_amount?amount=40\">Go to Paypal to donate €40</a><li><a "
-"href=\"https://dcpomatic.com/donate_amount?amount=20\">Go to Paypal to "
-"donate €20</a><li><a href=\"https://dcpomatic.com/donate_amount?"
-"amount=10\">Go to Paypal to donate €10</a></ul><p>Thank you!"
+#: src/lib/analytics.cc:66
+#, fuzzy
+msgid ""
+"<h2>You have made %1 DCPs with %2!</h2><img width=\"20%%\" src=\"memory:me."
+"jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl and I'm the "
+"developer of %3. I work on it in my spare time (with the help of a fine "
+"volunteer team of testers and translators) and I release it as free software."
+"<p>If you find %4 useful, please consider a donation to the project. "
+"Financial support will help me to spend more time developing %5 and making "
+"it better!<p><ul><li><a href=\"https://dcpomatic.com/donate_amount?"
+"amount=40\">Go to Paypal to donate €40</a><li><a href=\"https://dcpomatic."
+"com/donate_amount?amount=20\">Go to Paypal to donate €20</a><li><a "
+"href=\"https://dcpomatic.com/donate_amount?amount=10\">Go to Paypal to "
+"donate €10</a></ul><p>Thank you!</font>"
msgstr ""
"<h2>您已ç»ç”¨ DCP-o-matic 创建了%1 DCPï¼</h2><img width=\"20%%\" src=\"memory:"
"me.jpg\" align=\"center\"><p>你好。我是å¡å°”,我是DCP-o-matic的开å‘者。我在业"
@@ -236,33 +281,35 @@ msgstr ""
"a><li><a href=\"https://dcpomatic.com/donate_amount?amount=10\">去Paypalææ¬¾"
"10欧元</a></ul><p>谢谢您ï¼"
-#: src/lib/hints.cc:167
+#: src/lib/hints.cc:178
+#, fuzzy
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
-"a good idea to drop the JPEG2000 bandwidth down to about 200Mbit/s; this is "
+"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
"unlikely to have any visible effect on the image."
msgstr ""
"æœ‰äº›æ”¾æ˜ è®¾å¤‡ä¸æ”¯æŒé«˜ç çއDCP,我们推è使用200Mbit/s以内的ç çއæ¥è¿›è¡Œæ‰“包,这ç§"
"细微的调整是肉眼很难分辨的。"
-#: src/lib/text_content.cc:247
+#: src/lib/text_content.cc:251
+#, fuzzy
msgid ""
"A subtitle or closed caption file in this project is marked with the "
-"language '%1', which DCP-o-matic does not recognise. The file's language "
-"has been cleared."
+"language '%1', which %2 does not recognise. The file's language has been "
+"cleared."
msgstr ""
"此项目内有字幕或éšè—å¼å­—幕文件被标注为 DCP-o-matic 无法识别的“%1â€è¯­è¨€ã€‚ 该文"
"件的语言字段已被清空。"
-#: src/lib/ffmpeg_content.cc:645
+#: src/lib/ffmpeg_content.cc:646
msgid "ARIB STD-B67 ('Hybrid log-gamma')"
msgstr "ARIB STD-B67 (“HLG†HDR)"
-#: src/lib/dcp_content_type.cc:62
+#: src/lib/dcp_content_type.cc:63
msgid "Advertisement"
msgstr "广告片"
-#: src/lib/hints.cc:144
+#: src/lib/hints.cc:155
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -272,7 +319,7 @@ msgstr ""
"您添加的媒体画é¢å®½é«˜æ¯”为2.39:1,但是DCP容器设置为1.85:1的模å¼ã€‚这将会使您的画"
"é¢åœ¨æ”¾æ˜ æ—¶å­˜åœ¨ä¸Šä¸‹é»‘边。建议把DCP容器设置为2.39:1的模å¼ã€‚"
-#: src/lib/hints.cc:148
+#: src/lib/hints.cc:159
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -281,7 +328,7 @@ msgstr ""
"您添加的媒体画é¢å®½é«˜æ¯”å°äºŽ1.90:1,但是DCP容器设置为2.39:1的模å¼ã€‚这将会使您的"
"ç”»é¢åœ¨æ”¾æ˜ æ—¶å­˜åœ¨å·¦å³é»‘边。建议把DCP容器设置为与素æç›¸åŒå®½é«˜æ¯”的模å¼ã€‚"
-#: src/lib/job.cc:115
+#: src/lib/job.cc:116
msgid "An error occurred whilst handling the file %1."
msgstr "å¤„ç†æ–‡ä»¶ %1 æ—¶å‘生错误。"
@@ -289,59 +336,59 @@ msgstr "å¤„ç†æ–‡ä»¶ %1 æ—¶å‘生错误。"
msgid "Analysing audio"
msgstr "分æžéŸ³é¢‘中"
-#: src/lib/analyse_subtitles_job.cc:56
+#: src/lib/analyse_subtitles_job.cc:62
msgid "Analysing subtitles"
msgstr "分æžå­—幕中"
-#: src/lib/hints.cc:366
+#: src/lib/hints.cc:386
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr "至少有一个标记出现在项目结æŸåŽï¼Œå°†è¢«å¿½ç•¥ã€‚"
-#: src/lib/hints.cc:502
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "至少有一个éšè—字幕文件过大了 "
-#: src/lib/hints.cc:495
+#: src/lib/hints.cc:516
msgid "At least one of your closed caption files' XML part is larger than "
msgstr "至少有一个éšè—å¼å­—幕文件的XML部分过大了 "
-#: src/lib/hints.cc:510
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "至少有一个字幕文件过大了 "
-#: src/lib/hints.cc:474
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
msgstr "至少有一行字幕超过52个字符, 建议æ¯è¡Œæœ€å¤š52个字符。"
-#: src/lib/hints.cc:476
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
msgstr "至少有一行字幕超过79个字符, 你应该让æ¯è¡Œæœ€å¤š79个字符。"
-#: src/lib/hints.cc:642
+#: src/lib/hints.cc:663
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr "您的字幕中至少有一个超过3行, 建议使用ä¸è¶…过3行。"
-#: src/lib/hints.cc:609
+#: src/lib/hints.cc:630
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
msgstr "您的字幕中至少有一个æŒç»­æ—¶é—´å°‘于15帧, 建议æ¯ä¸ªå­—幕至少15帧长。"
-#: src/lib/hints.cc:614
+#: src/lib/hints.cc:635
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
msgstr ""
"至少有一个字幕在å‰ä¸€ä¸ªå­—幕åŽä¸åˆ°2帧开始, 建议字幕之间的间隔至少为2帧。"
-#: src/lib/hints.cc:685
+#: src/lib/hints.cc:706
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -362,72 +409,72 @@ msgstr "éŸ³é¢‘å°†è¢«é‡æ–°é‡‡æ ·è‡³ %1Hz"
msgid "Audio will not be resampled"
msgstr "音频将ä¸ä¼šè¢«é‡æ–°é‡‡æ ·"
-#: src/lib/ffmpeg_content.cc:639
+#: src/lib/ffmpeg_content.cc:640
msgid "BT1361 extended colour gamut"
msgstr "BT1361扩展色域"
-#: src/lib/ffmpeg_content.cc:607
+#: src/lib/ffmpeg_content.cc:608
msgid "BT2020"
msgstr "BT2020"
-#: src/lib/ffmpeg_content.cc:662
+#: src/lib/ffmpeg_content.cc:663
msgid "BT2020 constant luminance"
msgstr "BT2020 æ’定亮度"
-#: src/lib/ffmpeg_content.cc:641
+#: src/lib/ffmpeg_content.cc:642
msgid "BT2020 for a 10-bit system"
msgstr "BT2020 采样深度为 10-bit"
-#: src/lib/ffmpeg_content.cc:642
+#: src/lib/ffmpeg_content.cc:643
msgid "BT2020 for a 12-bit system"
msgstr "BT2020 采样深度为 12-bit"
-#: src/lib/ffmpeg_content.cc:661
+#: src/lib/ffmpeg_content.cc:662
msgid "BT2020 non-constant luminance"
msgstr "BT2020 éžæ’定亮度"
-#: src/lib/ffmpeg_content.cc:666
+#: src/lib/ffmpeg_content.cc:667
msgid "BT2100"
msgstr "BT2100"
-#: src/lib/ffmpeg_content.cc:603
+#: src/lib/ffmpeg_content.cc:604
msgid "BT470BG"
msgstr "BT470BG"
-#: src/lib/ffmpeg_content.cc:657
+#: src/lib/ffmpeg_content.cc:658
msgid "BT470BG (BT601-6)"
msgstr "BT470BG (BT601-6)"
-#: src/lib/ffmpeg_content.cc:602
+#: src/lib/ffmpeg_content.cc:603
msgid "BT470M"
msgstr "BT470M"
-#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:628
-#: src/lib/ffmpeg_content.cc:653
+#: src/lib/ffmpeg_content.cc:600 src/lib/ffmpeg_content.cc:629
+#: src/lib/ffmpeg_content.cc:654
msgid "BT709"
msgstr "BT709"
-#: src/lib/ffmpeg_content.cc:673
+#: src/lib/ffmpeg_content.cc:674
msgid "Bits per pixel"
msgstr "åƒç´ ä½"
-#: src/lib/filter.cc:98
+#: src/lib/filter.cc:99
msgid "Bob Weaver Deinterlacing Filter"
msgstr "Bob Weaver åéš”è¡Œæ‰«ææ»¤é•œ"
-#: src/lib/util.cc:662
+#: src/lib/util.cc:669
msgid "BsL"
msgstr "å·¦åŽçŽ¯ç»•"
-#: src/lib/util.cc:663
+#: src/lib/util.cc:670
msgid "BsR"
msgstr "å³åŽçŽ¯ç»•"
-#: src/lib/util.cc:654
+#: src/lib/util.cc:661
msgid "C"
msgstr "中置"
-#: src/lib/job.cc:617
+#: src/lib/job.cc:627
msgid "Cancelled"
msgstr "å–æ¶ˆ"
@@ -439,11 +486,11 @@ msgstr "ä¸èƒ½åŒ…嫿–œæ "
msgid "Cannot handle pixel format %1 during %2"
msgstr "在 %2 ä¸èƒ½å¤„ç†å›¾ç‰‡æ ¼å¼ %1"
-#: src/lib/film.cc:1671
+#: src/lib/film.cc:1768
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "ä¸èƒ½ç”ŸæˆKDM,因为项目没有被加密。"
-#: src/lib/util.cc:623
+#: src/lib/util.cc:630
msgid "Centre"
msgstr "中置"
@@ -451,7 +498,7 @@ msgstr "中置"
msgid "Channels"
msgstr "声音通é“"
-#: src/lib/transcode_job.cc:108
+#: src/lib/transcode_job.cc:109
msgid "Check their new settings, then try again."
msgstr "检查其新设置åŽå†è¯•。"
@@ -459,27 +506,32 @@ msgstr "检查其新设置åŽå†è¯•。"
msgid "Checking content"
msgstr "检查媒体内容中"
-#: src/lib/reel_writer.cc:271
+#: src/lib/reel_writer.cc:248
msgid "Checking existing image data"
msgstr "æ£€æŸ¥çŽ°æœ‰çš„å›¾åƒæ•°æ®"
-#: src/lib/ffmpeg_content.cc:665
+#: src/lib/ffmpeg_content.cc:666
msgid "Chroma-derived constant luminance"
msgstr "色度派生的æ’定亮度"
-#: src/lib/ffmpeg_content.cc:664
+#: src/lib/ffmpeg_content.cc:665
msgid "Chroma-derived non-constant luminance"
msgstr "è‰²åº¦æ´¾ç”Ÿçš„éžæ’定亮度"
-#: src/lib/dcp_content_type.cc:63
+#: src/lib/dcp_content_type.cc:64
msgid "Clip"
msgstr "片段"
-#: src/lib/text_type.cc:72
+#: src/lib/text_type.cc:85
msgid "Closed captions"
msgstr "éšè—å¼å­—幕"
-#: src/lib/ffmpeg_content.cc:624
+#: src/lib/text_type.cc:83
+#, fuzzy
+msgid "Closed subtitles"
+msgstr "开放å¼å­—幕"
+
+#: src/lib/ffmpeg_content.cc:625
msgid "Colour primaries"
msgstr "原色"
@@ -493,17 +545,17 @@ msgstr "原色"
#. file is limited, so that not all possible values are valid.
#. TRANSLATORS: this means that the range of pixel values used in this
#. file is full, so that all possible pixel values are valid.
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:563
-#: src/lib/ffmpeg_content.cc:570 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:585 src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:564
+#: src/lib/ffmpeg_content.cc:571 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:586 src/lib/ffmpeg_content.cc:591
msgid "Colour range"
msgstr "色彩范围"
-#: src/lib/ffmpeg_content.cc:649
+#: src/lib/ffmpeg_content.cc:650
msgid "Colour transfer characteristic"
msgstr "色彩传输特性"
-#: src/lib/ffmpeg_content.cc:670
+#: src/lib/ffmpeg_content.cc:671
msgid "Colourspace"
msgstr "色彩空间"
@@ -511,15 +563,15 @@ msgstr "色彩空间"
msgid "Combine DCPs"
msgstr "åˆå¹¶ DCP"
-#: src/lib/content.cc:179
+#: src/lib/content.cc:188
msgid "Computing digest"
msgstr "计算Hash值中"
-#: src/lib/writer.cc:529
+#: src/lib/writer.cc:534
msgid "Computing digests"
msgstr "计算Hash值中"
-#: src/lib/analytics.cc:63
+#: src/lib/analytics.cc:64
msgid "Congratulations!"
msgstr "æ­å–œä½ ï¼"
@@ -535,19 +587,19 @@ msgstr "æºå†…容使·±"
msgid "Content sample rate"
msgstr "æºéŸ³é¢‘采样率"
-#: src/lib/ffmpeg_content.cc:157
+#: src/lib/ffmpeg_content.cc:158
msgid "Content to be joined must all have or not have audio"
msgstr "添加的内容必须都有或都没有音频"
-#: src/lib/ffmpeg_content.cc:160
+#: src/lib/ffmpeg_content.cc:161
msgid "Content to be joined must all have or not have subtitles or captions"
msgstr "添加的内容必须都有或都没有éšè—å¼å­—幕"
-#: src/lib/ffmpeg_content.cc:154
+#: src/lib/ffmpeg_content.cc:155
msgid "Content to be joined must all have or not have video"
msgstr "添加的内容必须都有或都没有视频"
-#: src/lib/text_content.cc:319
+#: src/lib/text_content.cc:323
msgid ""
"Content to be joined must both be main subtitle languages or both additional."
msgstr "添加的内容必须å‡ä¸ºä¸»å­—幕语言或附加字幕语言。"
@@ -556,11 +608,11 @@ msgstr "添加的内容必须å‡ä¸ºä¸»å­—幕语言或附加字幕语言。"
msgid "Content to be joined must have all its video used or not used."
msgstr "添加的内容必须å‡é€‰ä¸­/ä¸é€‰ä¸­è§†é¢‘部分。"
-#: src/lib/text_content.cc:274
+#: src/lib/text_content.cc:278
msgid "Content to be joined must have the same 'burn subtitles' setting."
msgstr "添加的内容必须具有相åŒçš„“刻录字幕â€è®¾ç½®ã€‚"
-#: src/lib/text_content.cc:270
+#: src/lib/text_content.cc:274
msgid "Content to be joined must have the same 'use subtitles' setting."
msgstr "添加的内容必须具有相åŒçš„“使用字幕â€è®¾ç½®ã€‚"
@@ -596,7 +648,7 @@ msgstr "添加的内容必须有相åŒçš„自定义尺寸设置。"
msgid "Content to be joined must have the same fades."
msgstr "添加的内容视频淡入淡出效果必须相åŒã€‚"
-#: src/lib/text_content.cc:302
+#: src/lib/text_content.cc:306
msgid "Content to be joined must have the same outline width."
msgstr "添加的内容字幕宽度尺寸必须相åŒã€‚"
@@ -604,31 +656,31 @@ msgstr "添加的内容字幕宽度尺寸必须相åŒã€‚"
msgid "Content to be joined must have the same picture size."
msgstr "添加的内容视频图åƒå°ºå¯¸å¿…须相åŒã€‚"
-#: src/lib/text_content.cc:278
+#: src/lib/text_content.cc:282
msgid "Content to be joined must have the same subtitle X offset."
msgstr "添加的内容字幕Xè½´å移必须相åŒã€‚"
-#: src/lib/text_content.cc:286
+#: src/lib/text_content.cc:290
msgid "Content to be joined must have the same subtitle X scale."
msgstr "添加的内容字幕X轴缩放大å°å¿…须相åŒã€‚"
-#: src/lib/text_content.cc:282
+#: src/lib/text_content.cc:286
msgid "Content to be joined must have the same subtitle Y offset."
msgstr "添加的内容字幕Yè½´å移必须相åŒã€‚"
-#: src/lib/text_content.cc:290
+#: src/lib/text_content.cc:294
msgid "Content to be joined must have the same subtitle Y scale."
msgstr "添加的内容字幕Y轴缩放大å°å¿…须相åŒã€‚"
-#: src/lib/text_content.cc:298
+#: src/lib/text_content.cc:302
msgid "Content to be joined must have the same subtitle fades."
msgstr "添加的内容字幕淡入淡出效果必须相åŒã€‚"
-#: src/lib/text_content.cc:294
+#: src/lib/text_content.cc:298
msgid "Content to be joined must have the same subtitle line spacing."
msgstr "添加的内容字幕行è·å¿…须相åŒã€‚"
-#: src/lib/content.cc:127 src/lib/content.cc:131
+#: src/lib/content.cc:131 src/lib/content.cc:135
msgid "Content to be joined must have the same video frame rate"
msgstr "添加的内容内容帧率必须相åŒ"
@@ -636,23 +688,23 @@ msgstr "添加的内容内容帧率必须相åŒ"
msgid "Content to be joined must have the same video frame type."
msgstr "添加的内容视频帧率必须相åŒã€‚"
-#: src/lib/text_content.cc:311
+#: src/lib/text_content.cc:315
msgid "Content to be joined must use the same DCP track."
msgstr "添加的内容DCP轨é“必须相åŒã€‚"
-#: src/lib/text_content.cc:307 src/lib/text_content.cc:327
+#: src/lib/text_content.cc:311 src/lib/text_content.cc:331
msgid "Content to be joined must use the same fonts."
msgstr "添加的内容字幕字体必须相åŒã€‚"
-#: src/lib/ffmpeg_content.cc:181
+#: src/lib/ffmpeg_content.cc:182
msgid "Content to be joined must use the same subtitle stream."
msgstr "添加的内容字幕æµå¿…须相åŒã€‚"
-#: src/lib/text_content.cc:315
+#: src/lib/text_content.cc:319
msgid "Content to be joined must use the same text language."
msgstr "添加的内容必须有相åŒçš„æ–‡å­—语言。"
-#: src/lib/video_content.cc:458
+#: src/lib/video_content.cc:460
msgid "Content video is %1x%2"
msgstr "æºè§†é¢‘分辨率是 %1x%2"
@@ -660,14 +712,6 @@ msgstr "æºè§†é¢‘分辨率是 %1x%2"
msgid "Copy DCP to TMS"
msgstr "å¤åˆ¶DCP到TMS"
-#: src/lib/reel_writer.cc:142
-msgid "Copying old video file"
-msgstr "å¤åˆ¶æºè§†é¢‘文件"
-
-#: src/lib/reel_writer.cc:407
-msgid "Copying video file into DCP"
-msgstr "正在将视频文件å¤åˆ¶åˆ° DCP"
-
#: src/lib/scp_uploader.cc:57
msgid "Could not connect to server %1 (%2)"
msgstr "无法连接到æœåС噍 %1 (%2)"
@@ -684,18 +728,19 @@ msgstr "无法解ç JPEG2000文件%1 (%2)"
msgid "Could not decode image (%1)"
msgstr "无法解ç å›¾åƒ(%1)"
-#: src/lib/unzipper.cc:64
+#: src/lib/unzipper.cc:76
#, fuzzy
msgid "Could not find file %1 in ZIP file"
msgstr "无法打开下载的zip文件"
-#: src/lib/encode_server_finder.cc:191
+#: src/lib/encode_server_finder.cc:193
+#, fuzzy
msgid ""
-"Could not listen for remote encode servers. Perhaps another instance of DCP-"
-"o-matic is running."
+"Could not listen for remote encode servers. Perhaps another instance of %1 "
+"is running."
msgstr "无法侦å¬åˆ°è¿œç¨‹ç¼–ç æœåŠ¡å™¨ã€‚å¯èƒ½å¦ä¸€ä¸ªDCP-o-matic进程正在è¿è¡Œã€‚"
-#: src/lib/job.cc:170 src/lib/job.cc:185
+#: src/lib/job.cc:180 src/lib/job.cc:195
msgid "Could not open %1"
msgstr "无法打开%1"
@@ -703,19 +748,19 @@ msgstr "无法打开%1"
msgid "Could not open %1 to send"
msgstr "无法打开%1å¹¶å‘é€"
-#: src/lib/internet.cc:165 src/lib/internet.cc:170
+#: src/lib/internet.cc:167 src/lib/internet.cc:172
msgid "Could not open downloaded ZIP file"
msgstr "无法打开下载的zip文件"
-#: src/lib/internet.cc:177
+#: src/lib/internet.cc:179
msgid "Could not open downloaded ZIP file (%1:%2: %3)"
msgstr "无法打开下载的zip文件 (%1:%2: %3)"
-#: src/lib/config.cc:1140
+#: src/lib/config.cc:1153
msgid "Could not open file for writing"
msgstr "无法执行写入,目标文件无法打开"
-#: src/lib/ffmpeg_file_encoder.cc:265
+#: src/lib/ffmpeg_file_encoder.cc:271
msgid "Could not open output file %1 (%2)"
msgstr "无法打开输出文件 %1 (%2)"
@@ -731,19 +776,19 @@ msgstr "无法开始传输"
msgid "Could not write to remote file (%1)"
msgstr "写入远程文件 (%1)失败ï¼"
-#: src/lib/util.cc:633
+#: src/lib/util.cc:640
msgid "D-BOX primary"
msgstr "一级D-BOX"
-#: src/lib/util.cc:634
+#: src/lib/util.cc:641
msgid "D-BOX secondary"
msgstr "二级D-BOX"
-#: src/lib/util.cc:664
+#: src/lib/util.cc:671
msgid "DBP"
msgstr "DBP"
-#: src/lib/util.cc:665
+#: src/lib/util.cc:672
msgid "DBS"
msgstr "DBS"
@@ -755,7 +800,7 @@ msgstr "DCI Flat(é®å¹…/1.77/1.78/1.85)"
msgid "DCI Scope"
msgstr "DCI Scope(宽银幕/2.35/2.39)"
-#: src/lib/dcp_subtitle_content.cc:136
+#: src/lib/dcp_subtitle_content.cc:140
msgid "DCP XML subtitles"
msgstr "DCP XML字幕"
@@ -772,45 +817,35 @@ msgstr "DCP队列将在速度 %.1f%% 下è¿è¡Œã€‚\n"
msgid "DCP will use every other frame of the content.\n"
msgstr "将使用隔帧打包DCP。\n"
-#: src/lib/job.cc:172 src/lib/job.cc:187
-msgid ""
-"DCP-o-matic could not open the file %1 (%2). Perhaps it does not exist or "
-"is in an unexpected format."
-msgstr "无法打开文件%1 (%2)。文件ä¸å­˜åœ¨æˆ–æ ¼å¼æ— æ³•识别。"
-
-#: src/lib/film.cc:1596
+#: src/lib/film.cc:1685
msgid ""
-"DCP-o-matic had to change your settings for referring to DCPs as OV. Please "
-"review those settings to make sure they are what you want."
+"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
+"can be used with MPEG2 encoding."
msgstr ""
-"DCP-o-matic必须把您DCP的设置更改为OVã€‚è¯·é‡æ–°æ£€æŸ¥è®¾ç½®ç¡®è®¤è®¾ç½®å†…容是å¦ä¸ºæ‚¨çš„æœŸ"
-"望值。"
-#: src/lib/film.cc:1564
+#: src/lib/film.cc:1689
msgid ""
-"DCP-o-matic had to change your settings so that the film's frame rate is the "
-"same as that of your Atmos content."
-msgstr "DCP-o-matic必须更改您DCP的设置,使影片的帧率与 Atmos 内容一致。"
+"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
+"encoding."
+msgstr ""
-#: src/lib/ffmpeg_content.cc:121
+#: src/lib/film.cc:1693
msgid ""
-"DCP-o-matic no longer supports the `%1' filter, so it has been turned off."
-msgstr "䏿”¯æŒçš„æ ¼å¼`%1'。"
-
-#: src/lib/config.cc:429 src/lib/config.cc:1251
-msgid "DCP-o-matic notification"
-msgstr "DCP-o-maticæé†’"
+"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
+"and that is not a standard ratio with JPEG2000 encoding."
+msgstr ""
#: src/lib/datasat_ap2x.cc:28
msgid "Datasat AP20 or AP25"
msgstr "æ•°æ®æ¥è‡ªAP20或AP25"
-#: src/lib/filter.cc:95 src/lib/filter.cc:96 src/lib/filter.cc:97
-#: src/lib/filter.cc:98 src/lib/filter.cc:99
+#: src/lib/filter.cc:96 src/lib/filter.cc:97 src/lib/filter.cc:98
+#: src/lib/filter.cc:99 src/lib/filter.cc:100
msgid "De-interlacing"
msgstr "去除隔行"
-#: src/lib/config.cc:1239
+#: src/lib/config.cc:1238
+#, fuzzy
msgid ""
"Dear Projectionist\n"
"\n"
@@ -822,7 +857,7 @@ msgid ""
"The KDMs are valid from $START_TIME until $END_TIME.\n"
"\n"
"Best regards,\n"
-"DCP-o-matic"
+"%1"
msgstr ""
"亲爱的放映员\n"
"\n"
@@ -836,11 +871,15 @@ msgstr ""
"ç¥å¥½ï¼Œ\n"
"DCP-o-matic"
+#: src/lib/exceptions.cc:178
+msgid "Disk full when writing %1"
+msgstr ""
+
#: src/lib/dolby_cp750.cc:31
msgid "Dolby CP650 or CP750"
msgstr "æœæ¯” CP650 或 CP750"
-#: src/lib/internet.cc:122
+#: src/lib/internet.cc:124
msgid "Download failed (%1 error %2)"
msgstr "下载失败 (%1 error %2)"
@@ -864,19 +903,19 @@ msgstr "通过电å­é‚®ä»¶å‘é€ %1 çš„ KDM"
msgid "Email notification"
msgstr "电å­é‚®ä»¶æé†’"
-#: src/lib/send_problem_report_job.cc:68
+#: src/lib/send_problem_report_job.cc:69
msgid "Email problem report"
msgstr "通过邮件å‘é€æŠ¥å‘Š"
-#: src/lib/send_problem_report_job.cc:71
+#: src/lib/send_problem_report_job.cc:72
msgid "Email problem report for %1"
msgstr "通过邮件å‘é€æŠ¥å‘Šç»™ %1"
-#: src/lib/dcp_encoder.cc:103 src/lib/ffmpeg_encoder.cc:135
+#: src/lib/dcp_film_encoder.cc:120 src/lib/ffmpeg_film_encoder.cc:135
msgid "Encoding"
msgstr "ç¼–ç ä¸­"
-#: src/lib/dcp_content_type.cc:66
+#: src/lib/dcp_content_type.cc:67
msgid "Episode"
msgstr "æ’æ›²"
@@ -884,20 +923,19 @@ msgstr "æ’æ›²"
msgid "Error in subtitle file: saw %1 while expecting %2"
msgstr "字幕文件错误: 执行为 %1 å®žé™…è¦æ±‚为%2"
-#: src/lib/job.cc:615
+#: src/lib/job.cc:625
msgid "Error: %1"
msgstr "错误: (%1)"
-#: src/lib/dcp_content_type.cc:68
+#: src/lib/dcp_content_type.cc:69
msgid "Event"
msgstr "事件"
-#: src/lib/hints.cc:397
-#, fuzzy
+#: src/lib/hints.cc:417
msgid "Examining audio"
-msgstr "定ä½å­—幕中"
+msgstr "正在检查音频"
-#: src/lib/hints.cc:399
+#: src/lib/hints.cc:419
msgid "Examining audio, subtitles and closed captions"
msgstr "检查音频ã€å­—幕和éšè—å¼å­—幕中"
@@ -909,15 +947,15 @@ msgstr "分æžå†…容中"
msgid "Examining subtitles"
msgstr "定ä½å­—幕中"
-#: src/lib/hints.cc:395
+#: src/lib/hints.cc:415
msgid "Examining subtitles and closed captions"
msgstr "检查字幕和éšè—å¼å­—幕中"
-#: src/lib/subtitle_encoder.cc:99
+#: src/lib/subtitle_film_encoder.cc:99
msgid "Extracting"
msgstr "正在æå–"
-#: src/lib/ffmpeg_content.cc:656
+#: src/lib/ffmpeg_content.cc:657
msgid "FCC"
msgstr "FCC"
@@ -925,51 +963,51 @@ msgstr "FCC"
msgid "Failed to authenticate with server (%1)"
msgstr "无法与æœåŠ¡å™¨è¿›è¡Œèº«ä»½éªŒè¯ (%1)"
-#: src/lib/job.cc:139 src/lib/job.cc:149
+#: src/lib/job.cc:140 src/lib/job.cc:154
msgid "Failed to encode the DCP."
msgstr "ç¼–ç  DCP 失败。"
-#: src/lib/email.cc:239
+#: src/lib/email.cc:240
msgid "Failed to send email"
msgstr "电å­é‚®ä»¶å‘é€å¤±è´¥"
-#: src/lib/dcp_content_type.cc:53
+#: src/lib/dcp_content_type.cc:54
msgid "Feature"
msgstr "正片"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filename"
msgstr "文件å"
-#: src/lib/content.cc:475
+#: src/lib/content.cc:487
msgid "Filenames"
msgstr "文件å"
-#: src/lib/transcode_job.cc:108 src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:109 src/lib/transcode_job.cc:115
msgid "Files have changed since they were added to the project."
msgstr "部分文件在添加到项目åŽè¢«ä¿®æ”¹ã€‚"
-#: src/lib/ffmpeg_content.cc:606
+#: src/lib/ffmpeg_content.cc:607
msgid "Film"
msgstr "影片"
-#: src/lib/ffmpeg_examiner.cc:113
+#: src/lib/ffmpeg_examiner.cc:105
msgid "Finding length"
msgstr "定ä½é•¿åº¦"
-#: src/lib/content.cc:485
+#: src/lib/content.cc:497
msgid "Frame rate"
msgstr "帧率"
-#: src/lib/job.cc:559
+#: src/lib/job.cc:569
msgid "Friday"
msgstr "星期五"
-#: src/lib/ffmpeg_content.cc:590
+#: src/lib/ffmpeg_content.cc:591
msgid "Full"
msgstr "Full(全幅/1.90)"
-#: src/lib/ffmpeg_content.cc:570
+#: src/lib/ffmpeg_content.cc:571
msgid "Full (0-%1)"
msgstr "全幅 (0-%1)"
@@ -993,35 +1031,35 @@ msgstr "DCP中视频总时长"
msgid "Full length in video frames at content rate"
msgstr "æºè§†é¢‘æ—¶é•¿"
-#: src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:632
msgid "Gamma 22 (BT470M)"
msgstr "伽玛 2.2 (BT470M)"
-#: src/lib/ffmpeg_content.cc:632
+#: src/lib/ffmpeg_content.cc:633
msgid "Gamma 28 (BT470BG)"
msgstr "伽玛 2.8 (BT470BG)"
-#: src/lib/filter.cc:100
+#: src/lib/filter.cc:101
msgid "Gradient debander"
msgstr "梯度"
-#: src/lib/util.cc:658
+#: src/lib/util.cc:665
msgid "HI"
msgstr "å¬åŠ›éšœç¢"
-#: src/lib/util.cc:627
+#: src/lib/util.cc:634
msgid "Hearing impaired"
msgstr "å¬åŠ›éšœç¢"
-#: src/lib/filter.cc:103
+#: src/lib/filter.cc:104
msgid "High quality 3D denoiser"
msgstr "高å“质的3Dé™å™ª"
-#: src/lib/dcp_content_type.cc:67
+#: src/lib/dcp_content_type.cc:68
msgid "Highlights"
msgstr "高光"
-#: src/lib/filter.cc:92
+#: src/lib/filter.cc:93
msgid "Horizontal flip"
msgstr "水平翻转"
@@ -1029,19 +1067,19 @@ msgstr "水平翻转"
msgid "Hz"
msgstr "Hz(赫兹)"
-#: src/lib/ffmpeg_content.cc:640
+#: src/lib/ffmpeg_content.cc:641
msgid "IEC61966-2-1 (sRGB or sYCC)"
msgstr "IEC61966-2-1 (sRGB或sYCC)"
-#: src/lib/ffmpeg_content.cc:638
+#: src/lib/ffmpeg_content.cc:639
msgid "IEC61966-2-4"
msgstr "IEC61966-2-4"
-#: src/lib/hints.cc:186
+#: src/lib/hints.cc:197
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "如果您选择使用25fps,那就必须把DCP标准选线设置为SMPTE。"
-#: src/lib/hints.cc:249
+#: src/lib/hints.cc:260
#, fuzzy
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
@@ -1051,9 +1089,10 @@ msgstr ""
"一般建议您使用SMPTE DCPSï¼Œé™¤éžæ‚¨æœ‰ç‰¹æ®ŠåŽŸå› ä½¿ç”¨Interop。建议您在“DCPâ€é€‰é¡¹å¡ä¸­"
"将DCP设置为使用SMPTE标准。"
-#: src/lib/release_notes.cc:53
+#: src/lib/release_notes.cc:79
+#, fuzzy
msgid ""
-"In this version there are changes to the way that subtitles are positioned. "
+"In this version there are changes to the way that subtitles are positioned. "
"Positioning should now be more correct, with respect to the standards, but "
"you should check any subtitles in your project to make sure that they are "
"placed where you want them."
@@ -1061,78 +1100,79 @@ msgstr ""
"åœ¨è¿™ä¸ªç‰ˆæœ¬ä¸­ï¼Œå­—å¹•çš„å®šä½æ–¹å¼å‘生了å˜åŒ–。相对于标准,定ä½çŽ°åœ¨åº”è¯¥æ›´åŠ æ­£ç¡®ï¼Œä½†"
"您ä»åº”该检查项目中的任何字幕,以确ä¿å®ƒä»¬æ”¾åœ¨æ‚¨æƒ³è¦çš„ä½ç½®ã€‚"
-#: src/lib/hints.cc:602
+#: src/lib/hints.cc:623
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
msgstr "建议在DCP开始åŽè‡³å°‘4秒放置您的第一个字幕,以确ä¿å®ƒèƒ½è¢«çœ‹åˆ°ã€‚"
-#: src/lib/job.cc:160 src/lib/job.cc:195 src/lib/job.cc:255 src/lib/job.cc:265
-msgid "It is not known what caused this error."
+#: src/lib/job.cc:170 src/lib/job.cc:205 src/lib/job.cc:265 src/lib/job.cc:275
+#, fuzzy
+msgid "It is not known what caused this error. %1"
msgstr "未知原因错误。"
-#: src/lib/ffmpeg_content.cc:620
+#: src/lib/ffmpeg_content.cc:621
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:419 src/lib/config.cc:1236
+#: src/lib/config.cc:424 src/lib/config.cc:1235
msgid "KDM delivery: $CPL_NAME"
msgstr "å‘行KDM: $CPL_NAME"
-#: src/lib/filter.cc:96
+#: src/lib/filter.cc:97
msgid "Kernel deinterlacer"
msgstr "隔行扫æ"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:266 src/lib/util.cc:652
+#: src/lib/ffmpeg_film_encoder.cc:266 src/lib/util.cc:659
msgid "L"
msgstr "左声é“"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:621
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:628
msgid "Left"
msgstr "左声é“"
-#: src/lib/util.cc:629
+#: src/lib/util.cc:636
msgid "Left centre"
msgstr "左中"
-#: src/lib/util.cc:631
+#: src/lib/util.cc:638
msgid "Left rear surround"
msgstr "å·¦åŽçŽ¯ç»•"
-#: src/lib/util.cc:625
+#: src/lib/util.cc:632
msgid "Left surround"
msgstr "左环绕"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "Length"
msgstr "长度"
-#: src/lib/util.cc:655
+#: src/lib/util.cc:662
msgid "Lfe"
msgstr "次低"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:631
msgid "Lfe (sub)"
msgstr "次低(é‡ä½ŽéŸ³ï¼‰"
-#: src/lib/ffmpeg_content.cc:585
+#: src/lib/ffmpeg_content.cc:586
msgid "Limited"
msgstr "é™åˆ¶"
-#: src/lib/ffmpeg_content.cc:563
+#: src/lib/ffmpeg_content.cc:564
msgid "Limited / video (%1-%2)"
msgstr "é™åˆ¶/视频 (%1-%2)"
-#: src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:636
msgid "Linear"
msgstr "线性"
-#: src/lib/ffmpeg_content.cc:636
+#: src/lib/ffmpeg_content.cc:637
msgid "Logarithmic (100:1 range)"
msgstr "对数 (范围 100:1)"
-#: src/lib/ffmpeg_content.cc:637
+#: src/lib/ffmpeg_content.cc:638
msgid "Logarithmic (316:1 range)"
msgstr "对数 (范围 316:1)"
@@ -1140,7 +1180,7 @@ msgstr "对数 (范围 316:1)"
msgid "Lost communication between main and writer processes"
msgstr "主进程和写入进程之间的通信丢失"
-#: src/lib/util.cc:656
+#: src/lib/util.cc:663
msgid "Ls"
msgstr "左环绕"
@@ -1148,24 +1188,24 @@ msgstr "左环绕"
msgid "Mid-side decoder"
msgstr "中置解ç "
-#: src/lib/filter.cc:100 src/lib/filter.cc:101 src/lib/filter.cc:104
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:101 src/lib/filter.cc:102 src/lib/filter.cc:105
+#: src/lib/filter.cc:107
msgid "Misc"
msgstr "å…¶ä»–"
-#: src/lib/dcp_examiner.cc:183
+#: src/lib/dcp_examiner.cc:191
msgid "Mismatched audio channel counts in DCP"
msgstr "DCPä¸­çš„éŸ³é¢‘é€šé“æ•°ä¸åŒ¹é…"
-#: src/lib/dcp_examiner.cc:191
+#: src/lib/dcp_examiner.cc:199
msgid "Mismatched audio sample rates in DCP"
msgstr "DCP中的音频采样率ä¸åŒ¹é…"
-#: src/lib/dcp_examiner.cc:156
+#: src/lib/dcp_examiner.cc:160
msgid "Mismatched frame rates in DCP"
msgstr "DCP中的帧率ä¸åŒ¹é…"
-#: src/lib/dcp_examiner.cc:163
+#: src/lib/dcp_examiner.cc:167
msgid "Mismatched video sizes in DCP"
msgstr "DCP中的视频分辨率ä¸åŒ¹é…"
@@ -1173,19 +1213,19 @@ msgstr "DCP中的视频分辨率ä¸åŒ¹é…"
msgid "Missing required setting %1"
msgstr "缺少必需的设置 %1"
-#: src/lib/job.cc:551
+#: src/lib/job.cc:561
msgid "Monday"
msgstr "星期一"
-#: src/lib/writer.cc:779
+#: src/lib/writer.cc:783
msgid "Mono"
msgstr "å•声é“"
-#: src/lib/filter.cc:95
+#: src/lib/filter.cc:96
msgid "Motion compensating deinterlacer"
msgstr "动æ€éš”行补å¿"
-#: src/lib/dcp_decoder.cc:111
+#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
msgstr "DCP中没有找到CPL文件。"
@@ -1199,74 +1239,87 @@ msgstr "首选项中é…ç½®çš„åœ°å€æ²¡æœ‰ KDM"
msgid "No outgoing mail server configured in the Email tab of preferences"
msgstr "没有é…ç½®å好的邮件æœåŠ¡"
-#: src/lib/image_content.cc:131
+#: src/lib/image_content.cc:132
msgid "No valid image files were found in the folder."
msgstr "未在文件夹中å‘现有效的图片åºåˆ—文件。"
-#: src/lib/filter.cc:102 src/lib/filter.cc:103 src/lib/filter.cc:105
+#: src/lib/filter.cc:103 src/lib/filter.cc:104 src/lib/filter.cc:106
msgid "Noise reduction"
msgstr "é™å™ª"
-#: src/lib/writer.cc:747 src/lib/writer.cc:754 src/lib/writer.cc:777
+#: src/lib/writer.cc:751 src/lib/writer.cc:758 src/lib/writer.cc:781
msgid "None"
msgstr "æ— "
-#: src/lib/job.cc:607
+#: src/lib/job.cc:617
msgid "OK"
msgstr "完æˆ"
-#: src/lib/job.cc:612
+#: src/lib/job.cc:622
msgid "OK (ran for %1 from %2 to %3)"
msgstr "å®Œæˆ (è¿è¡Œç”¨æ—¶ %1,预计从 %2 到 %3)"
-#: src/lib/job.cc:610
+#: src/lib/job.cc:620
msgid "OK (ran for %1)"
msgstr "å®Œæˆ (è¿è¡Œç”¨æ—¶ %1)"
-#: src/lib/content.cc:116
+#: src/lib/content.cc:120
msgid "Only the first piece of content to be joined can have a start trim."
msgstr "åªæœ‰ç¬¬ä¸€æ®µè¢«åŠ å…¥çš„å†…å®¹æ‰å¯ä»¥è¿›è¡Œå¼€å§‹è£å‰ªã€‚"
-#: src/lib/content.cc:120
+#: src/lib/content.cc:124
msgid "Only the last piece of content to be joined can have an end trim."
msgstr "åªæœ‰æœ€åŽä¸€æ®µè¢«åŠ å…¥çš„å†…å®¹æ‰å¯ä»¥è¿›è¡Œç»“æŸè£å‰ªã€‚"
-#: src/lib/text_type.cc:70
+#: src/lib/text_type.cc:81
+#, fuzzy
+msgid "Open captions"
+msgstr "éšè—å¼å­—幕"
+
+#: src/lib/text_type.cc:79
msgid "Open subtitles"
msgstr "开放å¼å­—幕"
-#: src/lib/transcode_job.cc:113
+#: src/lib/transcode_job.cc:116
+#, fuzzy
msgid ""
-"Open the project in DCP-o-matic, check the settings, then save it before "
-"trying again."
+"Open the project in %1, check the settings, then save it before trying again."
msgstr "在DCP-o-matic中打开项目,检查设置,然åŽä¿å­˜åŽé‡è¯•。"
-#: src/lib/filter.cc:91 src/lib/filter.cc:92 src/lib/filter.cc:93
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:92 src/lib/filter.cc:93 src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Orientation"
msgstr "æ–¹å‘"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid "Out of memory"
msgstr "内存ä¸è¶³"
-#: src/lib/filter.cc:105
+#: src/lib/filter.cc:106
msgid "Overcomplete wavelet denoiser"
msgstr "å°æ³¢é™å™ª"
-#: src/lib/colour_conversion.cc:293
+#: src/lib/colour_conversion.cc:292
msgid "P3"
msgstr "P3"
-#: src/lib/dcp_content_type.cc:60
+#: src/lib/util.cc:1186
+#, fuzzy
+msgid ""
+"Please report this problem by using Help -> Report a problem or via email to "
+"%1"
+msgstr ""
+"请æäº¤è¿™ä¸ªé—®é¢˜ï¼Œåœ¨å¸®åŠ©é¤å•中选择:通过Emailå馈问题:carl@dcpomatic.com"
+
+#: src/lib/dcp_content_type.cc:61
msgid "Policy"
msgstr "政策相关"
-#: src/lib/filter.cc:106
+#: src/lib/filter.cc:107
msgid "Premultiply alpha channel"
msgstr ""
-#: src/lib/content.cc:494
+#: src/lib/content.cc:506
msgid "Prepared for video frame rate"
msgstr "准备视频帧率"
@@ -1274,93 +1327,93 @@ msgstr "准备视频帧率"
msgid "Programming error at %1:%2 %3"
msgstr "程åºå†…部错误 %1:%2 %3"
-#: src/lib/dcp_content_type.cc:64
+#: src/lib/dcp_content_type.cc:65
msgid "Promo"
msgstr "宣传片"
-#: src/lib/dcp_content_type.cc:61
+#: src/lib/dcp_content_type.cc:62
msgid "Public Service Announcement"
msgstr "公共æœåŠ¡æˆ–å…¬å‘Š"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_encoder.cc:271 src/lib/util.cc:653
+#: src/lib/ffmpeg_film_encoder.cc:271 src/lib/util.cc:660
msgid "R"
msgstr "å³å£°é“"
-#: src/lib/ffmpeg_content.cc:652
+#: src/lib/ffmpeg_content.cc:653
msgid "RGB / sRGB (IEC61966-2-1)"
msgstr "é¢œè‰²æ¨¡å¼ RGB / sRGB (IEC61966-2-1)"
-#: src/lib/dcp_content_type.cc:58
+#: src/lib/dcp_content_type.cc:59
msgid "Rating"
msgstr "分级"
-#: src/lib/colour_conversion.cc:294
+#: src/lib/colour_conversion.cc:293
msgid "Rec. 1886"
msgstr "Rec. 1886"
-#: src/lib/colour_conversion.cc:295
+#: src/lib/colour_conversion.cc:294
msgid "Rec. 2020"
msgstr "Rec. 2020"
-#: src/lib/colour_conversion.cc:291
+#: src/lib/colour_conversion.cc:290
msgid "Rec. 601"
msgstr "Rec. 601"
-#: src/lib/colour_conversion.cc:292
+#: src/lib/colour_conversion.cc:291
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:622
+#: src/lib/mid_side_decoder.cc:108 src/lib/util.cc:629
msgid "Right"
msgstr "å³å£°é“"
-#: src/lib/util.cc:630
+#: src/lib/util.cc:637
msgid "Right centre"
msgstr "å³ä¸­"
-#: src/lib/util.cc:632
+#: src/lib/util.cc:639
msgid "Right rear surround"
msgstr "å³åŽçŽ¯ç»•"
-#: src/lib/util.cc:626
+#: src/lib/util.cc:633
msgid "Right surround"
msgstr "å³çŽ¯ç»•"
-#: src/lib/filter.cc:94
+#: src/lib/filter.cc:95
msgid "Rotate 90 degrees anti-clockwise"
msgstr "逆时针旋转90°"
-#: src/lib/filter.cc:93
+#: src/lib/filter.cc:94
msgid "Rotate 90 degrees clockwise"
msgstr "顺时针旋转90°"
-#: src/lib/util.cc:657
+#: src/lib/util.cc:664
msgid "Rs"
msgstr "å³çŽ¯ç»•"
-#: src/lib/colour_conversion.cc:296
+#: src/lib/colour_conversion.cc:295
msgid "S-Gamut3/S-Log3"
msgstr "索尼S-Gamut3/S-Log3"
-#: src/lib/ffmpeg_content.cc:604 src/lib/ffmpeg_content.cc:633
+#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
msgid "SMPTE 170M (BT601)"
msgstr "SMPTE 170M (BT601)"
-#: src/lib/ffmpeg_content.cc:658
+#: src/lib/ffmpeg_content.cc:659
msgid "SMPTE 170M (BT601-6)"
msgstr "SMPTE 170M (BT601-6)"
-#: src/lib/ffmpeg_content.cc:663
+#: src/lib/ffmpeg_content.cc:664
msgid "SMPTE 2085, Y'D'zD'x"
msgstr "SMPTE 2085, Y'D'zD'x"
-#: src/lib/ffmpeg_content.cc:605 src/lib/ffmpeg_content.cc:634
-#: src/lib/ffmpeg_content.cc:659
+#: src/lib/ffmpeg_content.cc:606 src/lib/ffmpeg_content.cc:635
+#: src/lib/ffmpeg_content.cc:660
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:667
+#: src/lib/hints.cc:688
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1369,23 +1422,23 @@ msgstr ""
"类型为FTR(FEATURE)çš„SMPTE DCP应具有结æŸå­—幕的第一帧(FFEC)和移动字幕的第一帧"
"(FFMC)的标记。您应该使用“DCPâ€é€‰é¡¹å¡ä¸­çš„â€œæ ‡è®°â€æŒ‰é’®æ·»åŠ è¿™äº›æ ‡è®°ã€‚"
-#: src/lib/ffmpeg_content.cc:643
+#: src/lib/ffmpeg_content.cc:644
msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 10, 12, 14和16 bit"
-#: src/lib/ffmpeg_content.cc:644
+#: src/lib/ffmpeg_content.cc:645
msgid "SMPTE ST 428-1"
msgstr "SMPTE ST 428-1"
-#: src/lib/ffmpeg_content.cc:608
+#: src/lib/ffmpeg_content.cc:609
msgid "SMPTE ST 428-1 (CIE 1931 XYZ)"
msgstr "SMPTE ST 428-1 (CIE 1931 XYZ)"
-#: src/lib/ffmpeg_content.cc:609
+#: src/lib/ffmpeg_content.cc:610
msgid "SMPTE ST 431-2 (2011)"
msgstr "SMPTE ST 431-2 (2011)"
-#: src/lib/ffmpeg_content.cc:610
+#: src/lib/ffmpeg_content.cc:611
msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
@@ -1398,27 +1451,27 @@ msgstr "SSH 错误 [%1]"
msgid "SSH error [%1] (%2)"
msgstr "SSH 错误 [%1] (%2)"
-#: src/lib/job.cc:561
+#: src/lib/job.cc:571
msgid "Saturday"
msgstr "星期六"
-#: src/lib/image_content.cc:117
+#: src/lib/image_content.cc:118
msgid "Scanning image files"
msgstr "正在扫æå›¾åƒ"
-#: src/lib/send_problem_report_job.cc:85
+#: src/lib/send_problem_report_job.cc:86
msgid "Sending email"
msgstr "å‘é€ç”µå­é‚®ä»¶"
-#: src/lib/dcp_content_type.cc:54
+#: src/lib/dcp_content_type.cc:55
msgid "Short"
msgstr "短片"
-#: src/lib/util.cc:666
+#: src/lib/util.cc:673
msgid "Sign"
msgstr "ç­¾å"
-#: src/lib/video_content.cc:533
+#: src/lib/video_content.cc:535
msgid "Size"
msgstr "大å°"
@@ -1426,11 +1479,11 @@ msgstr "大å°"
msgid "Some audio will be resampled to %1Hz"
msgstr "éƒ¨åˆ†éŸ³é¢‘å°†è¢«é‡æ–°é‡‡æ ·åˆ°%1Hz"
-#: src/lib/transcode_job.cc:117
+#: src/lib/transcode_job.cc:121
msgid "Some files have been changed since they were added to the project."
msgstr "有些文件在添加到项目åŽå‘生了更改。"
-#: src/lib/transcode_job.cc:107
+#: src/lib/transcode_job.cc:108
msgid ""
"Some files have been changed since they were added to the project.\n"
"\n"
@@ -1451,13 +1504,13 @@ msgstr ""
"\n"
"è¿™äº›æ–‡ä»¶çŽ°åœ¨å°†è¢«é‡æ–°æ£€æŸ¥ï¼Œå› æ­¤æ‚¨å¯èƒ½éœ€è¦æ£€æŸ¥å®ƒä»¬çš„设置。"
-#: src/lib/hints.cc:583
+#: src/lib/hints.cc:604
msgid ""
"Some of your closed captions span more than %1 lines, so they will be "
"truncated."
msgstr "您的æŸäº›éšè—字幕跨度超过%1行,因此它将被截断,å¯èƒ½æ˜¾ç¤ºä¸å®Œæ•´ã€‚"
-#: src/lib/hints.cc:705
+#: src/lib/hints.cc:726
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1478,11 +1531,11 @@ msgstr "一些内容需è¦KDM密钥"
msgid "Some of your content needs an OV"
msgstr "一些内容需è¦OV"
-#: src/lib/writer.cc:781
+#: src/lib/writer.cc:785
msgid "Stereo"
msgstr "立体声"
-#: src/lib/dcp_content_type.cc:65
+#: src/lib/dcp_content_type.cc:66
msgid "Stereo card"
msgstr "立体声å¡"
@@ -1494,19 +1547,19 @@ msgstr "立体声到5.1,混音器A"
msgid "Stereo to 5.1 up-mixer B"
msgstr "立体声到5.1,混音器B"
-#: src/lib/job.cc:549
+#: src/lib/job.cc:559
msgid "Sunday"
msgstr "星期日"
-#: src/lib/dcp_content_type.cc:59
+#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
msgstr "传情片"
-#: src/lib/filter.cc:104
+#: src/lib/filter.cc:105
msgid "Telecine filter"
msgstr "èƒ¶è½¬ç£æ»¤é•œ"
-#: src/lib/dcp_content_type.cc:56
+#: src/lib/dcp_content_type.cc:57
msgid "Test"
msgstr "测试片"
@@ -1526,33 +1579,33 @@ msgstr "è¯ä¹¦ç­¾å无效"
msgid "The certificate chain for signing is invalid (%1)"
msgstr "è¯ä¹¦ç­¾å无效(%1)"
-#: src/lib/hints.cc:721
+#: src/lib/hints.cc:743
#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
-"contains a small error which will prevent DCPs from being validated "
-"correctly on some systems. It is advisable to re-create the signing "
-"certificate chain by clicking the \"Re-make certificates and key...\" button "
-"in the Keys page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs contains a "
+"small error which will prevent DCPs from being validated correctly on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"DCP-o-matic用于签åDCPå’ŒKDMçš„è¯ä¹¦é“¾åŒ…å«ä¸€ä¸ªå°é”™è¯¯ï¼Œè¿™å°†é˜»æ­¢DCP在æŸäº›ç³»ç»Ÿä¸Šè¢«"
"正确验è¯ã€‚建议您通过å•击“首选项â€çš„“密钥â€é¡µé¢ä¸­çš„â€œé‡æ–°åˆ¶ä½œè¯ä¹¦å’Œå¯†é’¥â€¦â€æŒ‰é’®æ¥é‡"
"新创建签åè¯ä¹¦é“¾ã€‚"
-#: src/lib/hints.cc:727
+#: src/lib/hints.cc:751
#, fuzzy
msgid ""
-"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a "
-"validity period that is too long. This will cause problems playing back "
-"DCPs on some systems. It is advisable to re-create the signing certificate "
-"chain by clicking the \"Re-make certificates and key...\" button in the Keys "
-"page of Preferences."
+"The certificate chain that %1 uses for signing DCPs and KDMs has a validity "
+"period that is too long. This will cause problems playing back DCPs on some "
+"systems. It is advisable to re-create the signing certificate chain by "
+"clicking the \"Re-make certificates and key...\" button in the Keys page of "
+"Preferences."
msgstr ""
"DCP-o-matic用于签署DCPå’ŒKDMçš„è¯ä¹¦é“¾çš„æœ‰æ•ˆæœŸå¤ªé•¿ã€‚这将导致在æŸäº›ç³»ç»Ÿä¸Šæ’­æ”¾DCP"
"时出现问题。建议您通过å•击“首选项â€çš„“密钥â€é¡µé¢ä¸­çš„â€œé‡æ–°åˆ¶ä½œè¯ä¹¦å’Œå¯†é’¥â€¦â€æŒ‰é’®æ¥"
"釿–°åˆ›å»ºç­¾åè¯ä¹¦é“¾ã€‚"
-#: src/lib/video_decoder.cc:81
+#: src/lib/video_decoder.cc:70
msgid ""
"The content file %1 is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1561,29 +1614,46 @@ msgstr ""
"内容文件%1设置为3D,但似乎ä¸åŒ…å«3D图åƒã€‚请将其设置为2D。通过勾选DCP视频选项å¡"
"中的3D选项,您ä»ç„¶å¯ä»¥æ ¹æ®æ­¤å†…容制作3D DCP。"
-#: src/lib/job.cc:121
+#: src/lib/job.cc:122
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgstr "ç£ç›˜ç©ºé—´ä¸è¶³ï¼Œæ¸…ç†ç£ç›˜ç©ºé—´ä»¥ç»§ç»­ã€‚"
-#: src/lib/playlist.cc:244
+#: src/lib/playlist.cc:245
msgid "The file %1 has been moved %2 milliseconds earlier."
msgstr "文件 %1 被å‘å‰ç§»åŠ¨äº† %2 毫秒。"
-#: src/lib/playlist.cc:239
+#: src/lib/playlist.cc:240
msgid "The file %1 has been moved %2 milliseconds later."
msgstr "文件 %1 被å‘åŽç§»åŠ¨äº† %2 毫秒。"
-#: src/lib/playlist.cc:264
+#: src/lib/playlist.cc:265
msgid "The file %1 has been trimmed by %2 milliseconds less."
msgstr "文件 %1 被缩短了 %2 毫秒。"
-#: src/lib/playlist.cc:259
+#: src/lib/playlist.cc:260
msgid "The file %1 has been trimmed by %2 milliseconds more."
msgstr "文件 %1 被延长了 %2 毫秒。"
-#: src/lib/hints.cc:239
+#: src/lib/hints.cc:269
+msgid ""
+"The vast majority of cinemas in Europe, Australasia and North America expect "
+"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
+"really wants an old-style MPEG2 DCP."
+msgstr ""
+
+#: src/lib/release_notes.cc:86
+#, fuzzy
+msgid ""
+"The vertical offset control for some subtitles now works in the opposite "
+"direction to how it was before. You should check any subtitles in your "
+"project to make sure that they are placed where you want them."
+msgstr ""
+"åœ¨è¿™ä¸ªç‰ˆæœ¬ä¸­ï¼Œå­—å¹•çš„å®šä½æ–¹å¼å‘生了å˜åŒ–。相对于标准,定ä½çŽ°åœ¨åº”è¯¥æ›´åŠ æ­£ç¡®ï¼Œä½†"
+"您ä»åº”该检查项目中的任何字幕,以确ä¿å®ƒä»¬æ”¾åœ¨æ‚¨æƒ³è¦çš„ä½ç½®ã€‚"
+
+#: src/lib/hints.cc:250
#, fuzzy
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
@@ -1595,40 +1665,43 @@ msgstr ""
"您的DCPå’ŒæŸäº›å†…容的帧速率ä¸ç¬¦ã€‚å¯èƒ½å¯¼è‡´å£°ç”»ä¸åŒæ­¥ã€‚如果您的放映æœåŠ¡å™¨æ”¯æŒå½“å‰"
"速率,建议您将DCP帧速率设置为更接近当å‰åŽŸè§†é¢‘çš„é€ŸçŽ‡ã€‚"
-#: src/lib/dcp_content.cc:675
+#: src/lib/dcp_content.cc:714
msgid "There is no video in this DCP"
msgstr "DCP中ä¸åŒ…å«è§†é¢‘ç”»é¢"
-#: src/lib/job.cc:217
+#: src/lib/job.cc:227
msgid ""
"There was not enough memory to do this. If you are running a 32-bit "
"operating system try reducing the number of encoding threads in the General "
"tab of Preferences."
msgstr "内存ä¸è¶³ï¼Œå¦‚您是32ä½ç³»ç»Ÿï¼Œè¯·é‡æ–°è®¾ç½®è¿è¡Œçº¿ç¨‹æ•°é‡æ¥è¾¾åˆ°ç¨³å®šè¿è¡Œã€‚"
-#: src/lib/util.cc:1029
-msgid "This KDM was made for DCP-o-matic but not for its leaf certificate."
+#: src/lib/util.cc:1027
+#, fuzzy
+msgid "This KDM was made for %1 but not for its leaf certificate."
msgstr "KDM是为DCP-o-matic生æˆï¼Œä½†ä¸æ˜¯ä¸ºå®ƒçš„å¶å­è¯ä¹¦ç”Ÿæˆã€‚"
-#: src/lib/util.cc:1027
-msgid "This KDM was not made for DCP-o-matic's decryption certificate."
+#: src/lib/util.cc:1025
+#, fuzzy
+msgid "This KDM was not made for %1's decryption certificate."
msgstr "KDM䏿˜¯ä¸ºDCP-o-matic解密è¯ä¹¦è€Œç”Ÿæˆã€‚"
-#: src/lib/job.cc:140
+#: src/lib/job.cc:142
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic and trying to use too many encoding threads. Please reduce "
-"the 'number of threads DCP-o-matic should use' in the General tab of "
-"Preferences and try again."
+"of %1 and trying to use too many encoding threads. Please reduce the "
+"'number of threads %2 should use' in the General tab of Preferences and try "
+"again."
msgstr ""
"出现此错误å¯èƒ½æ˜¯å› ä¸ºæ‚¨æ­£åœ¨è¿è¡Œ32ä½ç‰ˆæœ¬çš„DCP-o-matic,并且试图使用太多编ç çº¿"
"程。请在“首选项â€çš„“常规â€é€‰é¡¹å¡ä¸­å‡å°‘“DCP-o-matic应该使用的线程数â€ï¼Œç„¶åŽé‡è¯•。"
-#: src/lib/job.cc:150
+#: src/lib/job.cc:156
+#, fuzzy
msgid ""
"This error has probably occurred because you are running the 32-bit version "
-"of DCP-o-matic. Please re-install DCP-o-matic with the 64-bit installer and "
-"try again."
+"of %1. Please re-install %2 with the 64-bit installer and try again."
msgstr ""
"出现此错误å¯èƒ½æ˜¯å› ä¸ºæ‚¨æ­£åœ¨è¿è¡Œ32ä½ç‰ˆæœ¬çš„DCP-o-matic。请使用64ä½å®‰è£…程åºé‡æ–°å®‰"
"装DCP-o-matic,然åŽé‡è¯•。"
@@ -1641,44 +1714,46 @@ msgstr ""
"这是一个KDM密钥文件。KDM密钥文件å¯ä»¥é€šè¿‡åœ¨ä½ çš„DCP包上å³é”®ï¼Œç‚¹å‡»â€œæ·»åŠ KDMæ–‡"
"ä»¶â€æ·»åŠ åˆ°DCP中。"
-#: src/lib/film.cc:521
+#: src/lib/film.cc:546
+#, fuzzy
msgid ""
-"This film was created with a newer version of DCP-o-matic, and it cannot be "
-"loaded into this version. Sorry!"
+"This film was created with a newer version of %1, and it cannot be loaded "
+"into this version. Sorry!"
msgstr ""
"这一工程文件是使用新版DCP-o-matic创建的,无法被这一版本的DCP-o-matic加载。抱"
"æ­‰ï¼"
-#: src/lib/film.cc:506
+#: src/lib/film.cc:527
+#, fuzzy
msgid ""
-"This film was created with an older version of DCP-o-matic, and "
-"unfortunately it cannot be loaded into this version. You will need to "
-"create a new Film, re-add your content and set it up again. Sorry!"
+"This film was created with an older version of %1, and unfortunately it "
+"cannot be loaded into this version. You will need to create a new Film, re-"
+"add your content and set it up again. Sorry!"
msgstr ""
"这一工程文件是使用旧版本的DCP-o-maticåˆ›å»ºçš„ï¼Œå¾ˆé—æ†¾æ— æ³•被这一版本的DCP-o-"
"matic加载。您需è¦åˆ›å»ºä¸€ä¸ªæ–°çš„å·¥ç¨‹æ–‡ä»¶ï¼Œé‡æ–°æ·»åР内容并釿–°è®¾ç½®ã€‚抱歉ï¼"
-#: src/lib/job.cc:557
+#: src/lib/job.cc:567
msgid "Thursday"
msgstr "星期四"
-#: src/lib/text_type.cc:68
+#: src/lib/text_type.cc:77
msgid "Timed text"
msgstr "时控文本"
-#: src/lib/dcp_content_type.cc:55
+#: src/lib/dcp_content_type.cc:56
msgid "Trailer"
msgstr "预告片"
-#: src/lib/transcode_job.cc:74
+#: src/lib/transcode_job.cc:75
msgid "Transcoding %1"
msgstr "转ç ä¸­ %1"
-#: src/lib/dcp_content_type.cc:57
+#: src/lib/dcp_content_type.cc:58
msgid "Transitional"
msgstr "过渡片"
-#: src/lib/job.cc:553
+#: src/lib/job.cc:563
msgid "Tuesday"
msgstr "星期二"
@@ -1686,7 +1761,7 @@ msgstr "星期二"
msgid "USL"
msgstr "è§„æ ¼ä¸Šé™ USL"
-#: src/lib/internet.cc:186
+#: src/lib/internet.cc:188
msgid "Unexpected ZIP file contents"
msgstr "æ„外的ZIP文件的内容"
@@ -1694,35 +1769,35 @@ msgstr "æ„外的ZIP文件的内容"
msgid "Unexpected image type received by server"
msgstr "æœåŠ¡å™¨æŽ¥æ”¶åˆ°æ„外的图åƒç±»åž‹"
-#: src/lib/cross_common.cc:99 src/lib/dcp_text_track.cc:53
+#: src/lib/cross_common.cc:96 src/lib/dcp_text_track.cc:53
msgid "Unknown"
msgstr "未知"
-#: src/lib/job.cc:264
+#: src/lib/job.cc:274
msgid "Unknown error"
msgstr "未知错误"
-#: src/lib/ffmpeg_decoder.cc:374
+#: src/lib/ffmpeg_decoder.cc:373
msgid "Unrecognised audio sample format (%1)"
msgstr "æ— æ³•è¯†åˆ«çš„éŸ³é¢‘é‡‡æ ·æ ¼å¼ (%1)"
-#: src/lib/filter.cc:101
+#: src/lib/filter.cc:102
msgid "Unsharp mask and Gaussian blur"
msgstr "USMé”化和高斯模糊"
-#: src/lib/ffmpeg_content.cc:556 src/lib/ffmpeg_content.cc:580
-#: src/lib/ffmpeg_content.cc:598 src/lib/ffmpeg_content.cc:600
-#: src/lib/ffmpeg_content.cc:601 src/lib/ffmpeg_content.cc:627
-#: src/lib/ffmpeg_content.cc:629 src/lib/ffmpeg_content.cc:630
-#: src/lib/ffmpeg_content.cc:654 src/lib/ffmpeg_content.cc:655
+#: src/lib/ffmpeg_content.cc:557 src/lib/ffmpeg_content.cc:581
+#: src/lib/ffmpeg_content.cc:599 src/lib/ffmpeg_content.cc:601
+#: src/lib/ffmpeg_content.cc:602 src/lib/ffmpeg_content.cc:628
+#: src/lib/ffmpeg_content.cc:630 src/lib/ffmpeg_content.cc:631
+#: src/lib/ffmpeg_content.cc:655 src/lib/ffmpeg_content.cc:656
msgid "Unspecified"
msgstr "未指定"
-#: src/lib/colour_conversion.cc:249
+#: src/lib/colour_conversion.cc:248
msgid "Untitled"
msgstr "无标题"
-#: src/lib/util.cc:635 src/lib/util.cc:636
+#: src/lib/util.cc:642 src/lib/util.cc:643
msgid "Unused"
msgstr "未使用"
@@ -1734,7 +1809,7 @@ msgstr "ä¸Šå˜æ¢æ··éŸ³ï¼ˆå·¦ï¼‰"
msgid "Upmix R"
msgstr "ä¸Šå˜æ¢æ··éŸ³ï¼ˆå³ï¼‰"
-#: src/lib/util.cc:659
+#: src/lib/util.cc:666
msgid "VI"
msgstr "视力障ç¢"
@@ -1742,11 +1817,11 @@ msgstr "视力障ç¢"
msgid "Verify DCP"
msgstr "验è¯DCP中"
-#: src/lib/filter.cc:91
+#: src/lib/filter.cc:92
msgid "Vertical flip"
msgstr "垂直翻转"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:635
msgid "Visually impaired"
msgstr "视力障ç¢"
@@ -1754,23 +1829,23 @@ msgstr "视力障ç¢"
msgid "Waiting"
msgstr "请ç¨å€™"
-#: src/lib/filter.cc:99
+#: src/lib/filter.cc:100
msgid "Weave filter"
msgstr "Weave 滤镜"
-#: src/lib/job.cc:555
+#: src/lib/job.cc:565
msgid "Wednesday"
msgstr "星期三"
-#: src/lib/ffmpeg_content.cc:660
+#: src/lib/ffmpeg_content.cc:661
msgid "YCOCG"
msgstr "YCOCG"
-#: src/lib/filter.cc:97
+#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
msgstr "åéš”è¡Œæ‰«ææ»¤é•œ"
-#: src/lib/hints.cc:199
+#: src/lib/hints.cc:210
#, fuzzy
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
@@ -1780,7 +1855,7 @@ msgstr ""
"您设置的帧率为%1 fpsçš„DCPã€‚å¹¶éžæ‰€æœ‰æ”¾æ˜ è®¾å¤‡éƒ½æ”¯æŒæ­¤å¸§çŽ‡ã€‚å»ºè®®æ‚¨å°†DCP帧率更改"
"为%2 fps。"
-#: src/lib/hints.cc:183
+#: src/lib/hints.cc:194
msgid ""
"You are set up for a DCP at a frame rate of %1 fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -1789,13 +1864,23 @@ msgstr ""
"您设置的帧率为%1 fpsçš„DCPã€‚å¹¶éžæ‰€æœ‰æ”¾æ˜ è®¾å¤‡éƒ½æ”¯æŒæ­¤å¸§çŽ‡ã€‚å»ºè®®æ‚¨å°†å¸§çŽ‡æ›´æ”¹ä¸º "
"%2 fps。"
-#: src/lib/hints.cc:193
+#: src/lib/hints.cc:204
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
msgstr "您设置的DCP帧速率为30fpsï¼Œè¿™ä¸æ˜¯æ‰€æœ‰æ”¾æ˜ è®¾å¤‡éƒ½æ”¯æŒ ,请注æ„兼容问题。"
-#: src/lib/hints.cc:304
+#: src/lib/hints.cc:127
+#, fuzzy
+msgid ""
+"You are using %1's stereo-to-5.1 upmixer. This is experimental and may "
+"result in poor-quality audio. If you continue, you should listen to the "
+"resulting DCP in a cinema to make sure that it sounds good."
+msgstr ""
+"你用的是DCP-o-maticåŒå£°é“转5.1环绕声的上混音器。这是实验性的功能,å¯èƒ½å¯¼è‡´éŸ³"
+"频质é‡å˜å·®ã€‚如果你继续,你应该在影院试å¬å®Œæˆçš„DCP声音以确认。"
+
+#: src/lib/hints.cc:324
msgid ""
"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
@@ -1803,16 +1888,7 @@ msgstr ""
"您添加的内容是3D内容,但您的DCP包设置为2D模å¼ï¼Œå¦‚果您想在3D放映系统(如Real-"
"D, MasterImage等)上播放,请设置到3D模å¼ã€‚"
-#: src/lib/hints.cc:120
-msgid ""
-"You are using DCP-o-matic's stereo-to-5.1 upmixer. This is experimental and "
-"may result in poor-quality audio. If you continue, you should listen to the "
-"resulting DCP in a cinema to make sure that it sounds good."
-msgstr ""
-"你用的是DCP-o-maticåŒå£°é“转5.1环绕声的上混音器。这是实验性的功能,å¯èƒ½å¯¼è‡´éŸ³"
-"频质é‡å˜å·®ã€‚如果你继续,你应该在影院试å¬å®Œæˆçš„DCP声音以确认。"
-
-#: src/lib/hints.cc:288
+#: src/lib/hints.cc:308
msgid ""
"You have %1 files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -1820,13 +1896,13 @@ msgstr ""
"æ‚¨å·²ç»æ·»åŠ äº† %1 个VOB文件,如果他们æ¥è‡ªä¸€å¼ DVDï¼Œè¯·ç¡®ä¿æ‚¨å·²ç»å¯¼å…¥äº†æ‰€æœ‰æ–‡ä»¶ï¼Œ"
"å¦åˆ™å¯èƒ½æ— æ³•正常播放。"
-#: src/lib/film.cc:1560
+#: src/lib/film.cc:1623
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
"frame rate. You must remove some Atmos content."
msgstr "您有多个全景声内容片段,而它们的帧率ä¸åŒã€‚您必须删除一些全景声内容。"
-#: src/lib/hints.cc:590
+#: src/lib/hints.cc:611
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -1834,7 +1910,7 @@ msgstr ""
"您有é‡å çš„éšè—å¼å­—幕,这在 Interop DCP中是ä¸å…许的。请您的DCP标准更改为"
"SMPTE。"
-#: src/lib/hints.cc:272
+#: src/lib/hints.cc:292
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -1846,7 +1922,7 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "在创建 DCP 之å‰ï¼Œå¿…é¡»å‘其中添加一些内容"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:769
msgid ""
"Your DCP has %1 audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
@@ -1855,17 +1931,18 @@ msgstr ""
"您的DCP具有 %1 个音频通é“ï¼Œè€Œä¸æ˜¯8或16个通é“。这å¯èƒ½å¯¼è‡´ä¸€äº›å‘行商在检查您的 "
"DCP 时出现 QC æŠ¥é”™ã€‚ä¸ºé˜²æ­¢è¿™ç§æƒ…况,建议设置8或16个DCP音频通é“。"
-#: src/lib/hints.cc:110
+#: src/lib/hints.cc:112
+#, fuzzy
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
-"matter if your content has fewer channels, as DCP-o-matic will fill the "
-"extras with silence."
+"matter if your content has fewer channels, as %1 will fill the extras with "
+"silence."
msgstr ""
"您的DCP的音轨少于6个,æŸäº›æ”¾æ˜ è®¾å¤‡å¯èƒ½ä¸æ”¯æŒã€‚但是如果您的内容没有这么多的音"
"轨,您ä»ç„¶å¯ä»¥è®¾ç½®æˆ6个音轨,因为DCP-o-matic将用空白音轨补é½ã€‚"
-#: src/lib/hints.cc:158
+#: src/lib/hints.cc:169
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -1873,38 +1950,38 @@ msgstr ""
"您的DCP使用了ä¸å¸¸è§çš„画幅比例,å¯èƒ½å¯¼è‡´éƒ¨åˆ†ç”µå½±æ”¾æ˜ æœºæ— æ³•正常播放,建议改æˆ"
"Flat (1.77/1.78/1.85) 或者Scope (2.35/2.39) 比例。"
-#: src/lib/hints.cc:338
+#: src/lib/hints.cc:358
msgid ""
"Your audio level is very high (on %1). You should reduce the gain of your "
"audio content."
msgstr "您的音频增益过大 (在%1),请é™ä½ŽéŸ³é¢‘增益。"
-#: src/lib/playlist.cc:235
+#: src/lib/playlist.cc:236
msgid ""
"Your project contains video content that was not aligned to a frame boundary."
msgstr "您的项目包å«ä¸ä¸Žå¸§è¾¹ç•Œå¯¹é½çš„视频内容。"
-#: src/lib/playlist.cc:255
+#: src/lib/playlist.cc:256
msgid ""
"Your project contains video content whose trim was not aligned to a frame "
"boundary."
msgstr "您的项目包å«çš„视频内容包å«ä¿®å‰ªä¸å¯¹é½çš„帧边界。"
-#: src/lib/image_content.cc:78
+#: src/lib/image_content.cc:79
msgid "[moving images]"
msgstr "[动æ€å›¾åƒ]"
-#: src/lib/image_content.cc:76
+#: src/lib/image_content.cc:77
msgid "[still]"
msgstr "[陿€å›¾åƒ]"
-#: src/lib/dcp_subtitle_content.cc:130 src/lib/string_text_file_content.cc:112
+#: src/lib/dcp_subtitle_content.cc:134 src/lib/string_text_file_content.cc:112
msgid "[subtitles]"
msgstr "[字幕]"
#. TRANSLATORS: _reel%1 here is to be added to an export filename to indicate
#. which reel it is. Preserve the %1; it will be replaced with the reel number.
-#: src/lib/ffmpeg_encoder.cc:152
+#: src/lib/ffmpeg_film_encoder.cc:152
msgid "_reel%1"
msgstr "_å·å·%1"
@@ -1936,11 +2013,11 @@ msgstr "å¤åˆ¶ %1 中"
msgid "could not find stream information"
msgstr "找ä¸åˆ°æµä¿¡æ¯"
-#: src/lib/reel_writer.cc:453
+#: src/lib/reel_writer.cc:407
msgid "could not move atmos asset into the DCP (%1)"
msgstr "无法将 Atmos asset移动到 DCP (%1)"
-#: src/lib/reel_writer.cc:436
+#: src/lib/reel_writer.cc:390
msgid "could not move audio asset into the DCP (%1)"
msgstr "无法将音频asset移动到 DCP (%1)"
@@ -1968,7 +2045,7 @@ msgstr "ä¸èƒ½å†™å…¥æ–‡ä»¶ %1 (%2)"
msgid "error during async_connect (%1)"
msgstr "异步连接错误 (%1)"
-#: src/lib/dcpomatic_socket.cc:142
+#: src/lib/dcpomatic_socket.cc:149
msgid "error during async_read (%1)"
msgstr "异步读å–错误 (%1)"
@@ -1976,62 +2053,72 @@ msgstr "异步读å–错误 (%1)"
msgid "error during async_write (%1)"
msgstr "异步写入错误 (%1)"
-#: src/lib/content.cc:487 src/lib/content.cc:496
+#: src/lib/content.cc:499 src/lib/content.cc:508
msgid "frames per second"
msgstr "æ¯ç§’帧数"
#. TRANSLATORS: h here is an abbreviation for hours
-#: src/lib/util.cc:207
+#: src/lib/util.cc:208
msgid "h"
msgstr "å°æ—¶"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:633
+#: src/lib/dcp_content.cc:671
msgid "it has a different frame rate to the film."
msgstr "它的帧率与影片ä¸ä¸€è‡´ã€‚"
-#: src/lib/dcp_content.cc:726
+#: src/lib/dcp_content.cc:753
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have %1 channels."
msgstr ""
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:780
+#: src/lib/dcp_content.cc:789
msgid ""
"it has a start trim so its subtitles or closed captions must be re-written."
msgstr "当å‰å†…容有修剪,所以字幕或éšè—字幕必须é‡å†™ã€‚"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:685
+#: src/lib/dcp_content.cc:724
msgid "it is 2K and the film is 4K."
msgstr "它是 2K 分辨率,而影片是 4K。"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:682
+#: src/lib/dcp_content.cc:721
msgid "it is 4K and the film is 2K."
msgstr "它是 4K 分辨率,而影片是 2K。"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:621
+#: src/lib/dcp_content.cc:659
msgid "it is Interop and the film is set to SMPTE."
msgstr "它是Interop类型,而实际打包类型是 SMPTE。"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:625
+#: src/lib/dcp_content.cc:663
msgid "it is SMPTE and the film is set to Interop."
msgstr "它是SMPTE类型,而实际打包类型是 Interop。"
-#: src/lib/dcp_content.cc:736
-msgid "it overlaps other audio content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:764
+#, fuzzy
+msgid "it overlaps other audio content."
msgstr "与其他音频内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–内容。"
-#: src/lib/dcp_content.cc:700
-msgid "it overlaps other video content; remove the other content."
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:799
+#, fuzzy
+msgid "it overlaps other text content."
+msgstr "与其他音频内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–内容。"
+
+#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
+#: src/lib/dcp_content.cc:739
+#, fuzzy
+msgid "it overlaps other video content."
msgstr "与其他视频内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–内容。"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:656
+#: src/lib/dcp_content.cc:694
msgid ""
"its reel lengths differ from those in the film; set the reel mode to 'split "
"by video content'."
@@ -2039,16 +2126,16 @@ msgstr ""
"å…¶åˆ†å·æ—¶é•¿ä¸Žå½±ç‰‡ä¸­çš„ä¸ä¸€è‡´ï¼›è¯·è®¾ç½® ã€ åˆ†å·æ¨¡å¼ 】 为〠按视频内容分割 】。"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:690
+#: src/lib/dcp_content.cc:729
msgid "its video frame size differs from the film's."
msgstr "视频帧大å°ä¸Žå½±ç‰‡ä¸ä¸€è‡´ã€‚"
#. TRANSLATORS: m here is an abbreviation for minutes
-#: src/lib/util.cc:216
+#: src/lib/util.cc:217
msgid "m"
msgstr "分"
-#: src/lib/image_content.cc:94
+#: src/lib/image_content.cc:95
msgid "moving"
msgstr "移动"
@@ -2057,44 +2144,52 @@ msgid "name"
msgstr "åå­—"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:771
+#: src/lib/dcp_content.cc:783
msgid ""
"one of its closed caption has a non-zero entry point so it must be re-"
"written."
msgstr "它的一个éšè—字幕有一个éžé›¶çš„æ—¶é—´ç‚¹ï¼Œå› æ­¤å¿…é¡»é‡å†™ã€‚"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
-#: src/lib/dcp_content.cc:763
+#: src/lib/dcp_content.cc:777
msgid ""
"one of its subtitle reels has a non-zero entry point so it must be re-"
"written."
msgstr "它的一个字幕å·è½´æœ‰ä¸€ä¸ªéžé›¶çš„æ—¶é—´ç‚¹ï¼Œå› æ­¤å¿…é¡»é‡å†™ã€‚"
#. TRANSLATORS: s here is an abbreviation for seconds
-#: src/lib/util.cc:226
+#: src/lib/util.cc:227
msgid "s"
msgstr "ç§’"
-#: src/lib/colour_conversion.cc:290
+#: src/lib/colour_conversion.cc:289
msgid "sRGB"
msgstr "sRGB"
-#: src/lib/image_content.cc:92
+#: src/lib/image_content.cc:93
msgid "still"
msgstr "陿­¢å›¾åƒ"
-#: src/lib/dcp_content.cc:790
-msgid "they overlap other text content; remove the other content."
-msgstr "与其他文字内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–内容。"
-
-#: src/lib/ffmpeg_examiner.cc:343 src/lib/video_content.cc:375
+#: src/lib/ffmpeg_examiner.cc:334 src/lib/video_content.cc:375
msgid "unknown"
msgstr "未知"
-#: src/lib/video_content.cc:531
+#: src/lib/video_content.cc:533
msgid "video frames"
msgstr "视频帧"
+#~ msgid "Copying old video file"
+#~ msgstr "å¤åˆ¶æºè§†é¢‘文件"
+
+#~ msgid "Copying video file into DCP"
+#~ msgstr "正在将视频文件å¤åˆ¶åˆ° DCP"
+
+#~ msgid "DCP-o-matic notification"
+#~ msgstr "DCP-o-maticæé†’"
+
+#~ msgid "they overlap other text content; remove the other content."
+#~ msgstr "与其他文字内容é‡å ï¼›è¯·åˆ é™¤å…¶ä»–内容。"
+
#~ msgid "it does not have closed captions in all its reels."
#~ msgstr "它的所有分å·éƒ½æ²¡æœ‰éšè—å¼å­—幕。"
@@ -2105,12 +2200,6 @@ msgstr "视频帧"
#~ msgstr "它的所有分å·éƒ½æ²¡æœ‰å£°éŸ³ã€‚"
#~ msgid ""
-#~ "Please report this problem by using Help -> Report a problem or via email "
-#~ "to carl@dcpomatic.com"
-#~ msgstr ""
-#~ "请æäº¤è¿™ä¸ªé—®é¢˜ï¼Œåœ¨å¸®åŠ©é¤å•中选择:通过Emailå馈问题:carl@dcpomatic.com"
-
-#~ msgid ""
#~ "Your default container is not valid and has been changed to Flat (1.85:1)"
#~ msgstr "默认设置的容器ä¸å¯ç”¨ï¼Œå·²è¢«æ›¿æ¢ä¸ºFlat (1.85:1)"
diff --git a/src/lib/raw_image_proxy.cc b/src/lib/raw_image_proxy.cc
index c606ddd99..1ad78827c 100644
--- a/src/lib/raw_image_proxy.cc
+++ b/src/lib/raw_image_proxy.cc
@@ -73,12 +73,12 @@ RawImageProxy::image (Image::Alignment alignment, optional<dcp::Size>) const
void
-RawImageProxy::add_metadata (xmlpp::Node* node) const
+RawImageProxy::add_metadata(xmlpp::Element* element) const
{
- node->add_child("Type")->add_child_text(N_("Raw"));
- node->add_child("Width")->add_child_text(raw_convert<string>(_image->size().width));
- node->add_child("Height")->add_child_text(raw_convert<string>(_image->size().height));
- node->add_child("PixelFormat")->add_child_text(raw_convert<string>(static_cast<int>(_image->pixel_format())));
+ cxml::add_text_child(element, "Type", N_("Raw"));
+ cxml::add_text_child(element, "Width", raw_convert<string>(_image->size().width));
+ cxml::add_text_child(element, "Height", raw_convert<string>(_image->size().height));
+ cxml::add_text_child(element, "PixelFormat", raw_convert<string>(static_cast<int>(_image->pixel_format())));
}
diff --git a/src/lib/raw_image_proxy.h b/src/lib/raw_image_proxy.h
index d5ae2457d..852f7c076 100644
--- a/src/lib/raw_image_proxy.h
+++ b/src/lib/raw_image_proxy.h
@@ -37,7 +37,7 @@ public:
boost::optional<dcp::Size> size = boost::optional<dcp::Size> ()
) const override;
- void add_metadata (xmlpp::Node *) const override;
+ void add_metadata(xmlpp::Element*) const override;
void write_to_socket (std::shared_ptr<Socket>) const override;
bool same (std::shared_ptr<const ImageProxy>) const override;
size_t memory_used () const override;
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index 1b33cae85..5210466b2 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -28,35 +28,35 @@
#include "digester.h"
#include "film.h"
#include "film_util.h"
+#include "frame_info.h"
#include "image.h"
#include "image_png.h"
#include "job.h"
#include "log.h"
#include "reel_writer.h"
+#include "remembered_asset.h"
#include <dcp/atmos_asset.h>
#include <dcp/atmos_asset_writer.h>
#include <dcp/certificate_chain.h>
#include <dcp/cpl.h>
#include <dcp/dcp.h>
#include <dcp/filesystem.h>
-#include <dcp/interop_subtitle_asset.h>
-#include <dcp/mono_picture_asset.h>
+#include <dcp/interop_text_asset.h>
+#include <dcp/mono_j2k_picture_asset.h>
#include <dcp/raw_convert.h>
#include <dcp/reel.h>
#include <dcp/reel_atmos_asset.h>
-#include <dcp/reel_interop_closed_caption_asset.h>
-#include <dcp/reel_interop_subtitle_asset.h>
+#include <dcp/reel_interop_text_asset.h>
#include <dcp/reel_markers_asset.h>
#include <dcp/reel_mono_picture_asset.h>
-#include <dcp/reel_smpte_closed_caption_asset.h>
-#include <dcp/reel_smpte_subtitle_asset.h>
+#include <dcp/reel_smpte_text_asset.h>
#include <dcp/reel_sound_asset.h>
#include <dcp/reel_stereo_picture_asset.h>
-#include <dcp/smpte_subtitle_asset.h>
+#include <dcp/smpte_text_asset.h>
#include <dcp/sound_asset.h>
#include <dcp/sound_asset_writer.h>
-#include <dcp/stereo_picture_asset.h>
-#include <dcp/subtitle_image.h>
+#include <dcp/stereo_j2k_picture_asset.h>
+#include <dcp/text_image.h>
#include "i18n.h"
@@ -81,9 +81,6 @@ using dcp::raw_convert;
using namespace dcpomatic;
-int const ReelWriter::_info_size = 48;
-
-
static dcp::MXFMetadata
mxf_metadata ()
{
@@ -108,9 +105,10 @@ mxf_metadata ()
* subtitle / closed caption files.
*/
ReelWriter::ReelWriter (
- weak_ptr<const Film> weak_film, DCPTimePeriod period, shared_ptr<Job> job, int reel_index, int reel_count, bool text_only
+ weak_ptr<const Film> weak_film, DCPTimePeriod period, shared_ptr<Job> job, int reel_index, int reel_count, bool text_only, boost::filesystem::path output_dir
)
- : WeakConstFilm (weak_film)
+ : WeakConstFilm(weak_film)
+ , _output_dir(std::move(output_dir))
, _period (period)
, _reel_index (reel_index)
, _reel_count (reel_count)
@@ -119,59 +117,87 @@ ReelWriter::ReelWriter (
, _text_only (text_only)
, _font_metrics(film()->frame_size().height)
{
- /* Create or find our picture asset in a subdirectory, named
- according to those film's parameters which affect the video
- output. We will hard-link it into the DCP later.
- */
+ _default_font = dcp::ArrayData(default_font_file());
+
+ if (text_only) {
+ return;
+ }
auto const standard = film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE;
- boost::filesystem::path const asset =
- film()->internal_video_asset_dir() / film()->internal_video_asset_filename(_period);
+ auto remembered_assets = film()->read_remembered_assets();
+ DCPOMATIC_ASSERT(film()->directory());
- _first_nonexistent_frame = check_existing_picture_asset (asset);
+ auto existing_asset_filename = find_asset(remembered_assets, *film()->directory(), period, film()->video_identifier());
+ if (existing_asset_filename) {
+ _first_nonexistent_frame = check_existing_picture_asset(*existing_asset_filename);
+ }
if (_first_nonexistent_frame < period.duration().frames_round(film()->video_frame_rate())) {
- /* We do not have a complete picture asset. If there is an
- existing asset, break any hard links to it as we are about
- to change its contents (if only by changing the IDs); see
- #1126.
- */
- if (dcp::filesystem::exists(asset) && dcp::filesystem::hard_link_count(asset) > 1) {
- if (job) {
- job->sub (_("Copying old video file"));
- copy_in_bits (asset, asset.string() + ".tmp", bind(&Job::set_progress, job.get(), _1, false));
- } else {
- dcp::filesystem::copy_file(asset, asset.string() + ".tmp");
+ /* No existing asset, or an incomplete one */
+
+ auto const rate = dcp::Fraction(film()->video_frame_rate(), 1);
+
+ auto setup = [this](shared_ptr<dcp::PictureAsset> asset) {
+ asset->set_size(film()->frame_size());
+ asset->set_metadata(mxf_metadata());
+
+ if (film()->encrypted()) {
+ asset->set_key(film()->key());
+ asset->set_context_id(film()->context_id());
}
- dcp::filesystem::remove(asset);
- dcp::filesystem::rename(asset.string() + ".tmp", asset);
- }
+ };
+ shared_ptr<dcp::PictureAsset> picture_asset;
- if (film()->three_d()) {
- _picture_asset.reset (new dcp::StereoPictureAsset(dcp::Fraction(film()->video_frame_rate(), 1), standard));
+ if (film()->video_encoding() == VideoEncoding::JPEG2000) {
+ if (film()->three_d()) {
+ _j2k_picture_asset = std::make_shared<dcp::StereoJ2KPictureAsset>(rate, standard);
+ } else {
+ _j2k_picture_asset = std::make_shared<dcp::MonoJ2KPictureAsset>(rate, standard);
+ }
+ setup(_j2k_picture_asset);
+ picture_asset = _j2k_picture_asset;
} else {
- _picture_asset.reset (new dcp::MonoPictureAsset(dcp::Fraction(film()->video_frame_rate(), 1), standard));
+ _mpeg2_picture_asset = std::make_shared<dcp::MonoMPEG2PictureAsset>(rate);
+ setup(_mpeg2_picture_asset);
+ picture_asset = _mpeg2_picture_asset;
}
- _picture_asset->set_size (film()->frame_size());
- _picture_asset->set_metadata (mxf_metadata());
-
- if (film()->encrypted()) {
- _picture_asset->set_key (film()->key());
- _picture_asset->set_context_id (film()->context_id());
+ auto new_asset_filename = _output_dir / video_asset_filename(picture_asset, _reel_index, _reel_count, _content_summary);
+ if (_first_nonexistent_frame > 0) {
+ LOG_GENERAL("Re-using partial asset %1: has frames up to %2", *existing_asset_filename, _first_nonexistent_frame);
+ dcp::filesystem::rename(*existing_asset_filename, new_asset_filename);
}
+ remembered_assets.push_back(RememberedAsset(new_asset_filename.filename(), period, film()->video_identifier()));
+ film()->write_remembered_assets(remembered_assets);
+ picture_asset->set_file(new_asset_filename);
- _picture_asset->set_file (asset);
- _picture_asset_writer = _picture_asset->start_write(asset, _first_nonexistent_frame > 0 ? dcp::PictureAsset::Behaviour::OVERWRITE_EXISTING : dcp::PictureAsset::Behaviour::MAKE_NEW);
- } else if (!text_only) {
+ dcp::Behaviour const behaviour = _first_nonexistent_frame > 0 ? dcp::Behaviour::OVERWRITE_EXISTING : dcp::Behaviour::MAKE_NEW;
+ if (_j2k_picture_asset) {
+ _j2k_picture_asset_writer = _j2k_picture_asset->start_write(new_asset_filename, behaviour);
+ } else {
+ _mpeg2_picture_asset_writer = _mpeg2_picture_asset->start_write(new_asset_filename, behaviour);
+ }
+ } else {
+ LOG_GENERAL("Re-using complete asset %1", *existing_asset_filename);
/* We already have a complete picture asset that we can just re-use */
/* XXX: what about if the encryption key changes? */
- if (film()->three_d()) {
- _picture_asset = make_shared<dcp::StereoPictureAsset>(asset);
+ auto new_asset_filename = _output_dir / existing_asset_filename->filename();
+ if (new_asset_filename != *existing_asset_filename) {
+ dcp::filesystem::copy(*existing_asset_filename, new_asset_filename);
+ remembered_assets.push_back(RememberedAsset(new_asset_filename, period, film()->video_identifier()));
+ }
+ film()->write_remembered_assets(remembered_assets);
+
+ if (film()->video_encoding() == VideoEncoding::JPEG2000) {
+ if (film()->three_d()) {
+ _j2k_picture_asset = make_shared<dcp::StereoJ2KPictureAsset>(new_asset_filename);
+ } else {
+ _j2k_picture_asset = make_shared<dcp::MonoJ2KPictureAsset>(new_asset_filename);
+ }
} else {
- _picture_asset = make_shared<dcp::MonoPictureAsset>(asset);
+ _mpeg2_picture_asset = make_shared<dcp::MonoMPEG2PictureAsset>(new_asset_filename);
}
}
@@ -210,55 +236,6 @@ ReelWriter::ReelWriter (
film()->limit_to_smpte_bv20() ? dcp::SoundAsset::MCASubDescriptors::DISABLED : dcp::SoundAsset::MCASubDescriptors::ENABLED
);
}
-
- _default_font = dcp::ArrayData(default_font_file());
-}
-
-
-/** @param frame reel-relative frame */
-void
-ReelWriter::write_frame_info (Frame frame, Eyes eyes, dcp::FrameInfo info) const
-{
- auto handle = film()->info_file_handle(_period, false);
- handle->get().seek(frame_info_position(frame, eyes), SEEK_SET);
- handle->get().checked_write(&info.offset, sizeof(info.offset));
- handle->get().checked_write(&info.size, sizeof(info.size));
- handle->get().checked_write(info.hash.c_str(), info.hash.size());
-}
-
-
-dcp::FrameInfo
-ReelWriter::read_frame_info (shared_ptr<InfoFileHandle> info, Frame frame, Eyes eyes) const
-{
- dcp::FrameInfo frame_info;
- info->get().seek(frame_info_position(frame, eyes), SEEK_SET);
- info->get().checked_read(&frame_info.offset, sizeof(frame_info.offset));
- info->get().checked_read(&frame_info.size, sizeof(frame_info.size));
-
- char hash_buffer[33];
- info->get().checked_read(hash_buffer, 32);
- hash_buffer[32] = '\0';
- frame_info.hash = hash_buffer;
-
- return frame_info;
-}
-
-
-long
-ReelWriter::frame_info_position (Frame frame, Eyes eyes) const
-{
- switch (eyes) {
- case Eyes::BOTH:
- return frame * _info_size;
- case Eyes::LEFT:
- return frame * _info_size * 2;
- case Eyes::RIGHT:
- return frame * _info_size * 2 + _info_size;
- default:
- DCPOMATIC_ASSERT (false);
- }
-
- DCPOMATIC_ASSERT (false);
}
@@ -290,8 +267,8 @@ ReelWriter::check_existing_picture_asset (boost::filesystem::path asset)
}
/* Offset of the last dcp::FrameInfo in the info file */
- int const n = (dcp::filesystem::file_size(info_file->get().path()) / _info_size) - 1;
- LOG_GENERAL ("The last FI is %1; info file is %2, info size %3", n, dcp::filesystem::file_size(info_file->get().path()), _info_size);
+ int const n = (dcp::filesystem::file_size(info_file->get().path()) / J2KFrameInfo::size_on_disk()) - 1;
+ LOG_GENERAL("The last FI is %1; info file is %2, info size %3", n, dcp::filesystem::file_size(info_file->get().path()), J2KFrameInfo::size_on_disk())
Frame first_nonexistent_frame;
if (film()->three_d()) {
@@ -321,13 +298,13 @@ ReelWriter::check_existing_picture_asset (boost::filesystem::path asset)
void
ReelWriter::write (shared_ptr<const Data> encoded, Frame frame, Eyes eyes)
{
- if (!_picture_asset_writer) {
+ if (!_j2k_picture_asset_writer) {
/* We're not writing any data */
return;
}
- auto fin = _picture_asset_writer->write (encoded->data(), encoded->size());
- write_frame_info (frame, eyes, fin);
+ auto fin = J2KFrameInfo(_j2k_picture_asset_writer->write(encoded->data(), encoded->size()));
+ fin.write(film()->info_file_handle(_period, false), frame, eyes);
_last_written[eyes] = encoded;
}
@@ -349,37 +326,50 @@ ReelWriter::write (shared_ptr<const dcp::AtmosFrame> atmos, AtmosMetadata metada
void
-ReelWriter::fake_write (int size)
+ReelWriter::write(shared_ptr<dcp::MonoMPEG2PictureFrame> image)
{
- if (!_picture_asset_writer) {
+ _mpeg2_picture_asset_writer->write(image->data(), image->size());
+}
+
+
+void
+ReelWriter::fake_write(dcp::J2KFrameInfo const& info)
+{
+ if (!_j2k_picture_asset_writer) {
/* We're not writing any data */
return;
}
- _picture_asset_writer->fake_write (size);
+ _j2k_picture_asset_writer->fake_write(info);
}
void
ReelWriter::repeat_write (Frame frame, Eyes eyes)
{
- if (!_picture_asset_writer) {
+ if (!_j2k_picture_asset_writer) {
/* We're not writing any data */
return;
}
- auto fin = _picture_asset_writer->write(_last_written[eyes]->data(), _last_written[eyes]->size());
- write_frame_info (frame, eyes, fin);
+ auto fin = J2KFrameInfo(_j2k_picture_asset_writer->write(_last_written[eyes]->data(), _last_written[eyes]->size()));
+ fin.write(film()->info_file_handle(_period, false), frame, eyes);
}
void
ReelWriter::finish (boost::filesystem::path output_dcp)
{
- if (_picture_asset_writer && !_picture_asset_writer->finalize ()) {
- /* Nothing was written to the picture asset */
- LOG_GENERAL ("Nothing was written to reel %1 of %2", _reel_index, _reel_count);
- _picture_asset.reset ();
+ if (_j2k_picture_asset_writer && !_j2k_picture_asset_writer->finalize()) {
+ /* Nothing was written to the J2K picture asset */
+ LOG_GENERAL("Nothing was written to J2K asset for reel %1 of %2", _reel_index, _reel_count);
+ _j2k_picture_asset.reset();
+ }
+
+ if (_mpeg2_picture_asset_writer && !_mpeg2_picture_asset_writer->finalize()) {
+ /* Nothing was written to the MPEG2 picture asset */
+ LOG_GENERAL("Nothing was written to MPEG2 asset for reel %1 of %2", _reel_index, _reel_count);
+ _mpeg2_picture_asset.reset();
}
if (_sound_asset_writer && !_sound_asset_writer->finalize ()) {
@@ -387,42 +377,6 @@ ReelWriter::finish (boost::filesystem::path output_dcp)
_sound_asset.reset ();
}
- /* Hard-link any video asset file into the DCP */
- if (_picture_asset) {
- DCPOMATIC_ASSERT (_picture_asset->file());
- boost::filesystem::path video_from = _picture_asset->file().get();
- boost::filesystem::path video_to = output_dcp;
- video_to /= video_asset_filename (_picture_asset, _reel_index, _reel_count, _content_summary);
- /* There may be an existing "to" file if we are recreating a DCP in the same place without
- changing any video.
- */
- boost::system::error_code ec;
- dcp::filesystem::remove(video_to, ec);
-
- dcp::filesystem::create_hard_link(video_from, video_to, ec);
- if (ec) {
- LOG_WARNING("Hard-link failed (%1); copying instead", error_details(ec));
- auto job = _job.lock ();
- if (job) {
- job->sub (_("Copying video file into DCP"));
- try {
- copy_in_bits (video_from, video_to, bind(&Job::set_progress, job.get(), _1, false));
- } catch (exception& e) {
- LOG_ERROR ("Failed to copy video file from %1 to %2 (%3)", video_from.string(), video_to.string(), e.what());
- throw FileError (e.what(), video_from);
- }
- } else {
- dcp::filesystem::copy_file(video_from, video_to, ec);
- if (ec) {
- LOG_ERROR("Failed to copy video file from %1 to %2 (%3)", video_from.string(), video_to.string(), error_details(ec));
- throw FileError (ec.message(), video_from);
- }
- }
- }
-
- _picture_asset->set_file (video_to);
- }
-
/* Move the audio asset into the DCP */
if (_sound_asset) {
boost::filesystem::path audio_to = output_dcp;
@@ -460,12 +414,13 @@ ReelWriter::finish (boost::filesystem::path output_dcp)
/** Try to make a ReelAsset for a subtitles or closed captions in a given period in the DCP.
- * A SubtitleAsset can be provided, or we will use one from @ref refs if not.
+ * A TextAsset can be provided, or we will use one from @ref refs if not.
*/
template <class Interop, class SMPTE, class Result>
shared_ptr<Result>
maybe_add_text (
- shared_ptr<dcp::SubtitleAsset> asset,
+ shared_ptr<dcp::TextAsset> asset,
+ dcp::TextType type,
int64_t picture_duration,
shared_ptr<dcp::Reel> reel,
int reel_index,
@@ -483,17 +438,18 @@ maybe_add_text (
shared_ptr<Result> reel_asset;
if (asset) {
- if (auto interop = dynamic_pointer_cast<dcp::InteropSubtitleAsset>(asset)) {
+ if (auto interop = dynamic_pointer_cast<dcp::InteropTextAsset>(asset)) {
auto directory = output_dcp / interop->id ();
dcp::filesystem::create_directories(directory);
interop->write (directory / subtitle_asset_filename(asset, reel_index, reel_count, content_summary, ".xml"));
reel_asset = make_shared<Interop> (
+ type,
interop,
dcp::Fraction(film->video_frame_rate(), 1),
picture_duration,
0
);
- } else if (auto smpte = dynamic_pointer_cast<dcp::SMPTESubtitleAsset>(asset)) {
+ } else if (auto smpte = dynamic_pointer_cast<dcp::SMPTETextAsset>(asset)) {
/* All our assets should be the same length; use the picture asset length here
as a reference to set the subtitle one. We'll use the duration rather than
the intrinsic duration; we don't care if the picture asset has been trimmed, we're
@@ -504,6 +460,7 @@ maybe_add_text (
output_dcp / subtitle_asset_filename(asset, reel_index, reel_count, content_summary, ".mxf")
);
reel_asset = make_shared<SMPTE> (
+ type,
smpte,
dcp::Fraction(film->video_frame_rate(), 1),
picture_duration,
@@ -544,17 +501,17 @@ ReelWriter::create_reel_picture (shared_ptr<dcp::Reel> reel, list<ReferencedReel
{
shared_ptr<dcp::ReelPictureAsset> reel_asset;
- if (_picture_asset) {
+ if (_j2k_picture_asset) {
/* We have made a picture asset of our own. Put it into the reel */
- auto mono = dynamic_pointer_cast<dcp::MonoPictureAsset> (_picture_asset);
- if (mono) {
+ if (auto mono = dynamic_pointer_cast<dcp::MonoJ2KPictureAsset>(_j2k_picture_asset)) {
reel_asset = make_shared<dcp::ReelMonoPictureAsset>(mono, 0);
}
- auto stereo = dynamic_pointer_cast<dcp::StereoPictureAsset> (_picture_asset);
- if (stereo) {
+ if (auto stereo = dynamic_pointer_cast<dcp::StereoJ2KPictureAsset>(_j2k_picture_asset)) {
reel_asset = make_shared<dcp::ReelStereoPictureAsset>(stereo, 0);
}
+ } else if (_mpeg2_picture_asset) {
+ reel_asset = make_shared<dcp::ReelMonoPictureAsset>(_mpeg2_picture_asset, 0);
} else {
LOG_GENERAL ("no picture asset of our own; look through %1", refs.size());
/* We don't have a picture asset of our own; hopefully we have one to reference */
@@ -646,14 +603,15 @@ ReelWriter::create_reel_text (
set<DCPTextTrack> ensure_closed_captions
) const
{
- auto subtitle = maybe_add_text<dcp::ReelInteropSubtitleAsset, dcp::ReelSMPTESubtitleAsset, dcp::ReelSubtitleAsset> (
- _subtitle_asset, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only
+ auto subtitle = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset> (
+ _subtitle_asset, dcp::TextType::OPEN_SUBTITLE, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only
);
if (!subtitle && ensure_subtitles) {
/* We had no subtitle asset, but we've been asked to make sure there is one */
- subtitle = maybe_add_text<dcp::ReelInteropSubtitleAsset, dcp::ReelSMPTESubtitleAsset, dcp::ReelSubtitleAsset> (
+ subtitle = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>(
empty_text_asset(TextType::OPEN_SUBTITLE, optional<DCPTextTrack>(), true),
+ dcp::TextType::OPEN_SUBTITLE,
duration,
reel,
_reel_index,
@@ -675,8 +633,8 @@ ReelWriter::create_reel_text (
}
for (auto const& i: _closed_caption_assets) {
- auto a = maybe_add_text<dcp::ReelInteropClosedCaptionAsset, dcp::ReelSMPTEClosedCaptionAsset, dcp::ReelClosedCaptionAsset> (
- i.second, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only
+ auto a = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>(
+ i.second, dcp::TextType::CLOSED_CAPTION, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only
);
DCPOMATIC_ASSERT (a);
a->set_annotation_text (i.first.name);
@@ -689,8 +647,9 @@ ReelWriter::create_reel_text (
/* Make empty tracks for anything we've been asked to ensure but that we haven't added */
for (auto i: ensure_closed_captions) {
- auto a = maybe_add_text<dcp::ReelInteropClosedCaptionAsset, dcp::ReelSMPTEClosedCaptionAsset, dcp::ReelClosedCaptionAsset> (
+ auto a = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>(
empty_text_asset(TextType::CLOSED_CAPTION, i, true),
+ dcp::TextType::CLOSED_CAPTION,
duration,
reel,
_reel_index,
@@ -783,8 +742,11 @@ try
{
vector<shared_ptr<const dcp::Asset>> assets;
- if (_picture_asset) {
- assets.push_back(_picture_asset);
+ if (_j2k_picture_asset) {
+ assets.push_back(_j2k_picture_asset);
+ }
+ if (_mpeg2_picture_asset) {
+ assets.push_back(_mpeg2_picture_asset);
}
if (_sound_asset) {
assets.push_back(_sound_asset);
@@ -832,15 +794,15 @@ ReelWriter::write (shared_ptr<const AudioBuffers> audio)
}
-shared_ptr<dcp::SubtitleAsset>
+shared_ptr<dcp::TextAsset>
ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool with_dummy) const
{
- shared_ptr<dcp::SubtitleAsset> asset;
+ shared_ptr<dcp::TextAsset> asset;
optional<string> font;
auto lang = film()->subtitle_languages();
if (film()->interop()) {
- auto s = make_shared<dcp::InteropSubtitleAsset>();
+ auto s = make_shared<dcp::InteropTextAsset>();
s->set_movie_title (film()->name());
if (type == TextType::OPEN_SUBTITLE) {
s->set_language (lang.first ? lang.first->to_string() : "Unknown");
@@ -850,7 +812,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool
s->set_reel_number (raw_convert<string> (_reel_index + 1));
asset = s;
} else {
- auto s = make_shared<dcp::SMPTESubtitleAsset>();
+ auto s = make_shared<dcp::SMPTETextAsset>();
s->set_content_title_text (film()->name());
s->set_metadata (mxf_metadata());
if (type == TextType::OPEN_SUBTITLE && lang.first) {
@@ -870,7 +832,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool
if (with_dummy) {
asset->add(
- std::make_shared<dcp::SubtitleString>(
+ std::make_shared<dcp::TextString>(
font,
false,
false,
@@ -938,7 +900,7 @@ ReelWriter::convert_vertical_position(StringText const& subtitle, dcp::SubtitleS
void
ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period, FontIdMap const& fonts, shared_ptr<dcpomatic::Font> chosen_interop_font)
{
- shared_ptr<dcp::SubtitleAsset> asset;
+ shared_ptr<dcp::TextAsset> asset;
switch (type) {
case TextType::OPEN_SUBTITLE:
@@ -975,7 +937,7 @@ ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track,
i.set_in (dcp::Time(period.from.seconds() - _period.from.seconds(), tcr));
i.set_out (dcp::Time(period.to.seconds() - _period.from.seconds(), tcr));
i.set_v_position(convert_vertical_position(i, film()->interop() ? dcp::SubtitleStandard::INTEROP : dcp::SubtitleStandard::SMPTE_2014));
- auto sub = make_shared<dcp::SubtitleString>(i);
+ auto sub = make_shared<dcp::TextString>(i);
/* i.font is a shared_ptr<Font> which uniquely identifies the font we want,
* though if we are Interop we can only have one font, so we'll use the chosen
* one instead.
@@ -992,7 +954,7 @@ ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track,
for (auto i: subs.bitmap) {
asset->add (
- make_shared<dcp::SubtitleImage>(
+ make_shared<dcp::TextImage>(
image_as_png(i.image),
dcp::Time(period.from.seconds() - _period.from.seconds(), tcr),
dcp::Time(period.to.seconds() - _period.from.seconds(), tcr),
@@ -1012,7 +974,7 @@ ReelWriter::existing_picture_frame_ok (dcp::File& asset_file, shared_ptr<InfoFil
/* Read the data from the info file; for 3D we just check the left
frames until we find a good one.
*/
- auto const info = read_frame_info (info_file, frame, film()->three_d() ? Eyes::LEFT : Eyes::BOTH);
+ auto const info = J2KFrameInfo(info_file, frame, film()->three_d() ? Eyes::LEFT : Eyes::BOTH);
bool ok = true;
diff --git a/src/lib/reel_writer.h b/src/lib/reel_writer.h
index c9052c832..ac6531148 100644
--- a/src/lib/reel_writer.h
+++ b/src/lib/reel_writer.h
@@ -27,10 +27,14 @@
#include "player_text.h"
#include "referenced_reel_asset.h"
#include "render_text.h"
+#include "text_type.h"
#include "weak_film.h"
#include <dcp/atmos_asset_writer.h>
#include <dcp/file.h>
-#include <dcp/picture_asset_writer.h>
+#include <dcp/ffmpeg_image.h>
+#include <dcp/j2k_picture_asset_writer.h>
+#include <dcp/mono_mpeg2_picture_frame.h>
+#include <dcp/mpeg2_picture_asset_writer.h>
class AudioBuffers;
@@ -41,18 +45,19 @@ struct write_frame_info_test;
namespace dcp {
class AtmosAsset;
- class MonoPictureAsset;
- class MonoPictureAssetWriter;
- class PictureAsset;
- class PictureAssetWriter;
+ class MonoJ2KPictureAsset;
+ class MonoJ2KPictureAssetWriter;
+ class J2KPictureAsset;
+ class J2KPictureAssetWriter;
+ class MPEG2PictureAsset;
class Reel;
class ReelAsset;
class ReelPictureAsset;
class SoundAsset;
class SoundAssetWriter;
- class StereoPictureAsset;
- class StereoPictureAssetWriter;
- class SubtitleAsset;
+ class StereoJ2KPictureAsset;
+ class StereoJ2KPictureAssetWriter;
+ class TextAsset;
}
@@ -65,15 +70,17 @@ public:
std::shared_ptr<Job> job,
int reel_index,
int reel_count,
- bool text_only
+ bool text_only,
+ boost::filesystem::path output_dir
);
void write (std::shared_ptr<const dcp::Data> encoded, Frame frame, Eyes eyes);
- void fake_write (int size);
+ void fake_write(dcp::J2KFrameInfo const& info);
void repeat_write (Frame frame, Eyes eyes);
void write (std::shared_ptr<const AudioBuffers> audio);
void write(PlayerText text, TextType type, boost::optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period, FontIdMap const& fonts, std::shared_ptr<dcpomatic::Font> chosen_interop_font);
void write (std::shared_ptr<const dcp::AtmosFrame> atmos, AtmosMetadata metadata);
+ void write(std::shared_ptr<dcp::MonoMPEG2PictureFrame> image);
void finish (boost::filesystem::path output_dcp);
std::shared_ptr<dcp::Reel> create_reel (
@@ -94,17 +101,13 @@ public:
return _first_nonexistent_frame;
}
- dcp::FrameInfo read_frame_info (std::shared_ptr<InfoFileHandle> info, Frame frame, Eyes eyes) const;
-
private:
friend struct ::write_frame_info_test;
- void write_frame_info (Frame frame, Eyes eyes, dcp::FrameInfo info) const;
- long frame_info_position (Frame frame, Eyes eyes) const;
Frame check_existing_picture_asset (boost::filesystem::path asset);
bool existing_picture_frame_ok (dcp::File& asset_file, std::shared_ptr<InfoFileHandle> info_file, Frame frame) const;
- std::shared_ptr<dcp::SubtitleAsset> empty_text_asset (TextType type, boost::optional<DCPTextTrack> track, bool with_dummy) const;
+ std::shared_ptr<dcp::TextAsset> empty_text_asset (TextType type, boost::optional<DCPTextTrack> track, bool with_dummy) const;
std::shared_ptr<dcp::ReelPictureAsset> create_reel_picture (std::shared_ptr<dcp::Reel> reel, std::list<ReferencedReelAsset> const & refs) const;
void create_reel_sound (std::shared_ptr<dcp::Reel> reel, std::list<ReferencedReelAsset> const & refs) const;
@@ -119,9 +122,10 @@ private:
void create_reel_markers (std::shared_ptr<dcp::Reel> reel) const;
float convert_vertical_position(StringText const& subtitle, dcp::SubtitleStandard to) const;
+ boost::filesystem::path _output_dir;
dcpomatic::DCPTimePeriod _period;
/** the first picture frame index that does not already exist in our MXF */
- int _first_nonexistent_frame;
+ int _first_nonexistent_frame = 0;
/** the data of the last written frame, if there is one */
EnumIndexedVector<std::shared_ptr<const dcp::Data>, Eyes> _last_written;
/** index of this reel within the DCP (starting from 0) */
@@ -134,17 +138,17 @@ private:
dcp::ArrayData _default_font;
- std::shared_ptr<dcp::PictureAsset> _picture_asset;
+ std::shared_ptr<dcp::J2KPictureAsset> _j2k_picture_asset;
+ std::shared_ptr<dcp::MPEG2PictureAsset> _mpeg2_picture_asset;
/** picture asset writer, or 0 if we are not writing any picture because we already have one */
- std::shared_ptr<dcp::PictureAssetWriter> _picture_asset_writer;
+ std::shared_ptr<dcp::J2KPictureAssetWriter> _j2k_picture_asset_writer;
+ std::shared_ptr<dcp::MPEG2PictureAssetWriter> _mpeg2_picture_asset_writer;
std::shared_ptr<dcp::SoundAsset> _sound_asset;
std::shared_ptr<dcp::SoundAssetWriter> _sound_asset_writer;
- std::shared_ptr<dcp::SubtitleAsset> _subtitle_asset;
- std::map<DCPTextTrack, std::shared_ptr<dcp::SubtitleAsset>> _closed_caption_assets;
+ std::shared_ptr<dcp::TextAsset> _subtitle_asset;
+ std::map<DCPTextTrack, std::shared_ptr<dcp::TextAsset>> _closed_caption_assets;
std::shared_ptr<dcp::AtmosAsset> _atmos_asset;
std::shared_ptr<dcp::AtmosAssetWriter> _atmos_asset_writer;
mutable FontMetrics _font_metrics;
-
- static int const _info_size;
};
diff --git a/src/lib/referenced_reel_asset.cc b/src/lib/referenced_reel_asset.cc
index 3175d772d..5ef3b9ae7 100644
--- a/src/lib/referenced_reel_asset.cc
+++ b/src/lib/referenced_reel_asset.cc
@@ -27,10 +27,9 @@
#include "referenced_reel_asset.h"
#include <dcp/reel.h>
#include <dcp/reel_asset.h>
-#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_picture_asset.h>
#include <dcp/reel_sound_asset.h>
-#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <cmath>
diff --git a/src/lib/release_notes.cc b/src/lib/release_notes.cc
index d69738427..64556bb26 100644
--- a/src/lib/release_notes.cc
+++ b/src/lib/release_notes.cc
@@ -21,15 +21,46 @@
#include "config.h"
#include "release_notes.h"
+#include "variant.h"
#include "version.h"
+#include <dcp/raw_convert.h>
+#include <boost/algorithm/string.hpp>
#include "i18n.h"
using std::string;
+using std::vector;
using boost::optional;
+bool
+before(optional<string> last, string current)
+{
+ if (!last) {
+ return true;
+ }
+
+ vector<string> last_parts;
+ boost::split(last_parts, *last, boost::is_any_of("."));
+ vector<string> current_parts;
+ boost::split(current_parts, current, boost::is_any_of("."));
+
+ if (last_parts.size() != 3 || current_parts.size() != 3) {
+ /* One or other is a git version; don't bother reporting anything */
+ return false;
+ }
+
+ for (int i = 0; i < 3; ++i) {
+ if (dcp::raw_convert<int>(last_parts[i]) < dcp::raw_convert<int>(current_parts[i])) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
optional<string>
find_release_notes(bool dark, optional<string> current)
{
@@ -43,19 +74,34 @@ find_release_notes(bool dark, optional<string> current)
Config::instance()->set_last_release_notes_version(*current);
+ vector<string> notes;
+ if (!last) {
+ notes.push_back(_("In this version there are changes to the way that subtitles are positioned. "
+ "Positioning should now be more correct, with respect to the standards, but you "
+ "should check any subtitles in your project to make sure that they are placed "
+ "where you want them."));
+ }
+
+ if (before(last, "2.17.19")) {
+ notes.push_back(_("The vertical offset control for some subtitles now works in the opposite direction "
+ "to how it was before. You should check any subtitles in your project to make sure "
+ "that they are placed where you want them."));
+ }
+
+ if (notes.empty()) {
+ return {};
+ }
+
string const colour = dark ? "white" : "black";
auto const span = String::compose("<span style=\"color: %1\">", colour);
- const string header = String::compose("<h1>%1DCP-o-matic %2 release notes</span></h1>", span, *current);
+ auto output = String::compose("<h1>%1%2 %3 release notes</span></h1><ul>", span, variant::dcpomatic(), *current);
- if (!last) {
- return header + span +
- _("In this version there are changes to the way that subtitles are positioned. "
- "Positioning should now be more correct, with respect to the standards, but you "
- "should check any subtitles in your project to make sure that they are placed "
- "where you want them.")
- + "</span>";
+ for (auto const& note: notes) {
+ output += string("<li>") + span + note + "</span>";
}
- return {};
+ output += "</ul>";
+
+ return output;
}
diff --git a/src/lib/remembered_asset.cc b/src/lib/remembered_asset.cc
new file mode 100644
index 000000000..20b65970c
--- /dev/null
+++ b/src/lib/remembered_asset.cc
@@ -0,0 +1,97 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcpomatic_assert.h"
+#include "remembered_asset.h"
+#include <dcp/filesystem.h>
+#include <dcp/raw_convert.h>
+#include <libcxml/cxml.h>
+LIBDCP_DISABLE_WARNINGS
+#include <libxml++/libxml++.h>
+LIBDCP_ENABLE_WARNINGS
+
+
+using std::string;
+using std::vector;
+
+
+RememberedAsset::RememberedAsset(cxml::ConstNodePtr node)
+{
+ _filename = node->string_child("Filename");
+ auto period_node = node->node_child("Period");
+ DCPOMATIC_ASSERT(period_node);
+
+ _period = {
+ dcpomatic::DCPTime(period_node->number_child<int64_t>("From")),
+ dcpomatic::DCPTime(period_node->number_child<int64_t>("To"))
+ };
+
+ _identifier = node->string_child("Identifier");
+}
+
+
+void
+RememberedAsset::as_xml(xmlpp::Element* parent) const
+{
+ cxml::add_text_child(parent, "Filename", _filename.string());
+ auto period_node = cxml::add_child(parent, "Period");
+ cxml::add_text_child(period_node, "From", dcp::raw_convert<string>(_period.from.get()));
+ cxml::add_text_child(period_node, "To", dcp::raw_convert<string>(_period.to.get()));
+ cxml::add_text_child(parent, "Identifier", _identifier);
+}
+
+
+boost::optional<boost::filesystem::path>
+find_asset(vector<RememberedAsset> const& assets, boost::filesystem::path directory, dcpomatic::DCPTimePeriod period, string identifier)
+{
+ for (auto path: dcp::filesystem::recursive_directory_iterator(directory)) {
+ auto iter = std::find_if(assets.begin(), assets.end(), [period, identifier, path](RememberedAsset const& asset) {
+ return asset.filename() == path.path().filename() && asset.period() == period && asset.identifier() == identifier;
+ });
+ if (iter != assets.end()) {
+ return path.path();
+ }
+ }
+
+ return {};
+}
+
+
+void
+clean_up_asset_directory(boost::filesystem::path directory)
+{
+ /* We could do something more advanced here (e.g. keep the last N assets) but for now
+ * let's just clean the whole thing out.
+ */
+ boost::system::error_code ec;
+ dcp::filesystem::remove_all(directory, ec);
+}
+
+
+void
+preserve_assets(boost::filesystem::path search, boost::filesystem::path assets_path)
+{
+ for (auto const& path: boost::filesystem::directory_iterator(search)) {
+ if (path.path().extension() == ".mxf") {
+ dcp::filesystem::rename(path.path(), assets_path / path.path().filename());
+ }
+ }
+}
diff --git a/src/lib/remembered_asset.h b/src/lib/remembered_asset.h
new file mode 100644
index 000000000..ec9344e24
--- /dev/null
+++ b/src/lib/remembered_asset.h
@@ -0,0 +1,79 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_REMEMBERED_ASSET_H
+#define DCPOMATIC_REMEMBERED_ASSET_H
+
+
+#include "dcpomatic_time.h"
+#include <libcxml/cxml.h>
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
+#include <libxml++/libxml++.h>
+LIBDCP_ENABLE_WARNINGS
+#include <boost/filesystem.hpp>
+
+
+class RememberedAsset
+{
+public:
+ explicit RememberedAsset(cxml::ConstNodePtr node);
+
+ RememberedAsset(boost::filesystem::path filename, dcpomatic::DCPTimePeriod period, std::string identifier)
+ : _filename(filename)
+ , _period(period)
+ , _identifier(std::move(identifier))
+ {}
+
+ void as_xml(xmlpp::Element* parent) const;
+
+ boost::filesystem::path filename() const {
+ return _filename;
+ }
+
+ dcpomatic::DCPTimePeriod period() const {
+ return _period;
+ }
+
+ std::string identifier() const {
+ return _identifier;
+ }
+
+private:
+ boost::filesystem::path _filename;
+ dcpomatic::DCPTimePeriod _period;
+ std::string _identifier;
+};
+
+
+boost::optional<boost::filesystem::path> find_asset(
+ std::vector<RememberedAsset> const& assets, boost::filesystem::path directory, dcpomatic::DCPTimePeriod period, std::string identifier
+ );
+
+
+void clean_up_asset_directory(boost::filesystem::path directory);
+
+
+void preserve_assets(boost::filesystem::path search, boost::filesystem::path assets_path);
+
+
+#endif
+
diff --git a/src/lib/remote_j2k_encoder_thread.cc b/src/lib/remote_j2k_encoder_thread.cc
new file mode 100644
index 000000000..49d80953d
--- /dev/null
+++ b/src/lib/remote_j2k_encoder_thread.cc
@@ -0,0 +1,84 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcp_video.h"
+#include "dcpomatic_log.h"
+#include "j2k_encoder.h"
+#include "remote_j2k_encoder_thread.h"
+#include "util.h"
+
+#include "i18n.h"
+
+
+using std::make_shared;
+using std::shared_ptr;
+
+
+RemoteJ2KEncoderThread::RemoteJ2KEncoderThread(J2KEncoder& encoder, EncodeServerDescription server)
+ : J2KSyncEncoderThread(encoder)
+ , _server(server)
+{
+
+}
+
+
+void
+RemoteJ2KEncoderThread::log_thread_start() const
+{
+ start_of_thread("RemoteJ2KEncoder");
+ LOG_TIMING("start-encoder-thread thread=%1 server=%2", thread_id(), _server.host_name());
+}
+
+
+shared_ptr<dcp::ArrayData>
+RemoteJ2KEncoderThread::encode(DCPVideo const& frame)
+{
+ shared_ptr<dcp::ArrayData> encoded;
+
+ try {
+ encoded = make_shared<dcp::ArrayData>(frame.encode_remotely(_server));
+ if (_remote_backoff > 0) {
+ LOG_GENERAL("%1 was lost, but now she is found; removing backoff", _server.host_name());
+ _remote_backoff = 0;
+ }
+ } catch (std::exception& e) {
+ LOG_ERROR(
+ N_("Remote encode of %1 on %2 failed (%3); thread sleeping for %4s"),
+ frame.index(), _server.host_name(), e.what(), _remote_backoff
+ );
+ } catch (...) {
+ LOG_ERROR(
+ N_("Remote encode of %1 on %2 failed; thread sleeping for %4s"),
+ frame.index(), _server.host_name(), _remote_backoff
+ );
+ }
+
+ if (!encoded) {
+ if (_remote_backoff < 60) {
+ /* back off more */
+ _remote_backoff += 10;
+ }
+ boost::this_thread::sleep(boost::posix_time::seconds(_remote_backoff));
+ }
+
+ return encoded;
+}
+
diff --git a/src/lib/remote_j2k_encoder_thread.h b/src/lib/remote_j2k_encoder_thread.h
new file mode 100644
index 000000000..f3fe7f94a
--- /dev/null
+++ b/src/lib/remote_j2k_encoder_thread.h
@@ -0,0 +1,21 @@
+#include "encode_server_description.h"
+#include "j2k_sync_encoder_thread.h"
+
+
+class RemoteJ2KEncoderThread : public J2KSyncEncoderThread
+{
+public:
+ RemoteJ2KEncoderThread(J2KEncoder& encoder, EncodeServerDescription server);
+
+ void log_thread_start() const override;
+ std::shared_ptr<dcp::ArrayData> encode(DCPVideo const& frame) override;
+
+ EncodeServerDescription server() const {
+ return _server;
+ }
+
+private:
+ EncodeServerDescription _server;
+ /** Number of seconds that we currently wait between attempts to connect to the server */
+ int _remote_backoff = 0;
+};
diff --git a/src/lib/render_text.cc b/src/lib/render_text.cc
index 870f3045d..3c3d4eed7 100644
--- a/src/lib/render_text.cc
+++ b/src/lib/render_text.cc
@@ -31,6 +31,7 @@
#include <cairomm/cairomm.h>
LIBDCP_DISABLE_WARNINGS
#include <pangomm.h>
+#include <pangommconfig.h>
LIBDCP_ENABLE_WARNINGS
#include <pango/pangocairo.h>
#include <boost/algorithm/string.hpp>
@@ -51,6 +52,15 @@ using boost::optional;
using namespace dcpomatic;
+#if CAIROMM_MAJOR_VERSION == 1 && CAIROMM_MINOR_VERSION <= 14
+#define DCPOMATIC_OLD_CAIROMM_API
+#endif
+
+#if PANGOMM_MAJOR_VERSION == 2 && PANGOMM_MINOR_VERSION <= 46
+#define DCPOMATIC_OLD_PANGOMM_API
+#endif
+
+
/** Create a Pango layout using a dummy context which we can use to calculate the size
* of the text we will render. Then we can transfer the layout over to the real context
* for the actual render.
@@ -62,11 +72,25 @@ create_layout(string font_name, string markup)
DCPOMATIC_ASSERT (c_font_map);
auto font_map = Glib::wrap (c_font_map);
auto c_context = pango_font_map_create_context (c_font_map);
+
+ cairo_font_options_t *options = cairo_font_options_create();
+ /* CAIRO_ANTIALIAS_BEST is totally broken here: see e.g.
+ * https://gitlab.freedesktop.org/cairo/cairo/-/issues/152
+ */
+ cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_GOOD);
+ cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_FULL);
+ pango_cairo_context_set_font_options(c_context, options);
+ cairo_font_options_destroy(options);
+
DCPOMATIC_ASSERT (c_context);
auto context = Glib::wrap (c_context);
auto layout = Pango::Layout::create(context);
- layout->set_alignment (Pango::ALIGN_LEFT);
+#ifdef DCPOMATIC_OLD_PANGOMM_API
+ layout->set_alignment(Pango::ALIGN_LEFT);
+#else
+ layout->set_alignment(Pango::Alignment::LEFT);
+#endif
Pango::FontDescription font (font_name);
layout->set_font_description (font);
layout->set_markup (markup);
@@ -124,7 +148,7 @@ marked_up(vector<StringText> subtitles, int target_height, float fade_factor, st
int dummy;
layout->get_pixel_size(space_width, dummy);
auto spacing = ((i.space_before() * i.size_in_pixels(target_height) - space_width) / 2) * pixels_to_1024ths_point;
- out += make_span(i, " ", "letter_spacing=\"" + dcp::raw_convert<string>(spacing) + "\"");
+ out += make_span(i, " ", "letter_spacing=\"" + dcp::raw_convert<string>(std::round(spacing)) + "\"");
}
out += make_span(i, i.text(), {});
@@ -163,11 +187,22 @@ create_surface (shared_ptr<Image> image)
DCPOMATIC_ASSERT (image->pixel_format() == AV_PIX_FMT_BGRA);
return Cairo::ImageSurface::create (
image->data()[0],
+#ifdef DCPOMATIC_OLD_CAIROMM_API
Cairo::FORMAT_ARGB32,
+#else
+ Cairo::ImageSurface::Format::ARGB32,
+#endif
image->size().width,
image->size().height,
/* Cairo ARGB32 means first byte blue, second byte green, third byte red, fourth byte alpha */
- Cairo::ImageSurface::format_stride_for_width (Cairo::FORMAT_ARGB32, image->size().width)
+ Cairo::ImageSurface::format_stride_for_width(
+#ifdef DCPOMATIC_OLD_CAIROMM_API
+ Cairo::FORMAT_ARGB32,
+#else
+ Cairo::ImageSurface::Format::ARGB32,
+#endif
+ image->size().width
+ )
);
}
@@ -394,24 +429,19 @@ render_line(vector<StringText> subtitles, dcp::Size target, DCPTime time, int fr
/* Border effect */
set_source_rgba (context, first.effect_colour(), fade_factor);
context->set_line_width (border_width);
+#ifdef DCPOMATIC_OLD_CAIROMM_API
context->set_line_join (Cairo::LINE_JOIN_ROUND);
+#else
+ context->set_line_join (Cairo::Context::LineJoin::ROUND);
+#endif
context->move_to (x_offset, y_offset);
layout.pango->add_to_cairo_context (context);
context->stroke ();
}
/* The actual subtitle */
-
- set_source_rgba (context, first.colour(), fade_factor);
-
- context->move_to (x_offset, y_offset);
- layout.pango->add_to_cairo_context (context);
- context->fill ();
-
- context->set_line_width (0.5);
context->move_to (x_offset, y_offset);
- layout.pango->add_to_cairo_context (context);
- context->stroke ();
+ layout.pango->show_in_cairo_context(context);
int const x = x_position(first.h_align(), first.h_position(), target.width, layout.size.width);
int const y = y_position(first.valign_standard, first.v_align(), first.v_position(), target.height, layout.baseline_to_bottom(border_width), layout.size.height);
diff --git a/src/lib/rgba.cc b/src/lib/rgba.cc
index 2e6a4fab6..2e0408d8a 100644
--- a/src/lib/rgba.cc
+++ b/src/lib/rgba.cc
@@ -41,12 +41,12 @@ RGBA::RGBA (cxml::ConstNodePtr node)
void
-RGBA::as_xml (xmlpp::Node* parent) const
+RGBA::as_xml(xmlpp::Element* parent) const
{
- parent->add_child("R")->add_child_text(lexical_cast<string>(int(r)));
- parent->add_child("G")->add_child_text(lexical_cast<string>(int(g)));
- parent->add_child("B")->add_child_text(lexical_cast<string>(int(b)));
- parent->add_child("A")->add_child_text(lexical_cast<string>(int(a)));
+ cxml::add_text_child(parent, "R", lexical_cast<string>(int(r)));
+ cxml::add_text_child(parent, "G", lexical_cast<string>(int(g)));
+ cxml::add_text_child(parent, "B", lexical_cast<string>(int(b)));
+ cxml::add_text_child(parent, "A", lexical_cast<string>(int(a)));
}
diff --git a/src/lib/rgba.h b/src/lib/rgba.h
index 96fed710e..a582a4ca1 100644
--- a/src/lib/rgba.h
+++ b/src/lib/rgba.h
@@ -44,7 +44,7 @@ public:
explicit RGBA (cxml::ConstNodePtr node);
- void as_xml (xmlpp::Node* parent) const;
+ void as_xml(xmlpp::Element* parent) const;
uint8_t r = 0;
uint8_t g = 0;
diff --git a/src/lib/screen.cc b/src/lib/screen.cc
index febf9085c..b77eb6b52 100644
--- a/src/lib/screen.cc
+++ b/src/lib/screen.cc
@@ -20,6 +20,7 @@
#include "cinema.h"
+#include "cinema_list.h"
#include "config.h"
#include "film.h"
#include "kdm_util.h"
@@ -39,29 +40,6 @@ using boost::optional;
using namespace dcpomatic;
-Screen::Screen (cxml::ConstNodePtr node)
- : KDMRecipient (node)
-{
- for (auto i: node->node_children ("TrustedDevice")) {
- if (boost::algorithm::starts_with(i->content(), "-----BEGIN CERTIFICATE-----")) {
- trusted_devices.push_back (TrustedDevice(dcp::Certificate(i->content())));
- } else {
- trusted_devices.push_back (TrustedDevice(i->content()));
- }
- }
-}
-
-
-void
-Screen::as_xml (xmlpp::Element* parent) const
-{
- KDMRecipient::as_xml (parent);
- for (auto i: trusted_devices) {
- parent->add_child("TrustedDevice")->add_child_text(i.as_string());
- }
-}
-
-
vector<string>
Screen::trusted_device_thumbprints () const
{
@@ -76,46 +54,40 @@ Screen::trusted_device_thumbprints () const
KDMWithMetadataPtr
kdm_for_screen (
std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm,
- shared_ptr<const dcpomatic::Screen> screen,
- boost::posix_time::ptime valid_from,
- boost::posix_time::ptime valid_to,
+ CinemaID cinema_id,
+ Cinema const& cinema,
+ Screen const& screen,
+ dcp::LocalTime valid_from,
+ dcp::LocalTime valid_to,
dcp::Formulation formulation,
bool disable_forensic_marking_picture,
optional<int> disable_forensic_marking_audio,
vector<KDMCertificatePeriod>& period_checks
)
{
- if (!screen->recipient) {
+ if (!screen.recipient) {
return {};
}
- auto cinema = screen->cinema;
- dcp::LocalTime const begin(valid_from, dcp::UTCOffset(cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0));
- dcp::LocalTime const end (valid_to, dcp::UTCOffset(cinema ? cinema->utc_offset_hour() : 0, cinema ? cinema->utc_offset_minute() : 0));
-
- period_checks.push_back(check_kdm_and_certificate_validity_periods(cinema ? cinema->name : "", screen->name, screen->recipient.get(), begin, end));
+ period_checks.push_back(check_kdm_and_certificate_validity_periods(cinema.name, screen.name, screen.recipient.get(), valid_from, valid_to));
auto signer = Config::instance()->signer_chain();
if (!signer->valid()) {
throw InvalidSignerError();
}
- auto kdm = make_kdm(begin, end).encrypt(
- signer, screen->recipient.get(), screen->trusted_device_thumbprints(), formulation, disable_forensic_marking_picture, disable_forensic_marking_audio
+ auto kdm = make_kdm(valid_from, valid_to).encrypt(
+ signer, screen.recipient.get(), screen.trusted_device_thumbprints(), formulation, disable_forensic_marking_picture, disable_forensic_marking_audio
);
dcp::NameFormat::Map name_values;
- if (cinema) {
- name_values['c'] = cinema->name;
- } else {
- name_values['c'] = "";
- }
- name_values['s'] = screen->name;
+ name_values['c'] = cinema.name;
+ name_values['s'] = screen.name;
name_values['f'] = kdm.content_title_text();
- name_values['b'] = begin.date() + " " + begin.time_of_day(true, false);
- name_values['e'] = end.date() + " " + end.time_of_day(true, false);
+ name_values['b'] = valid_from.date() + " " + valid_from.time_of_day(true, false);
+ name_values['e'] = valid_to.date() + " " + valid_to.time_of_day(true, false);
name_values['i'] = kdm.cpl_id();
- return make_shared<KDMWithMetadata>(name_values, cinema.get(), cinema ? cinema->emails : vector<string>(), kdm);
+ return make_shared<KDMWithMetadata>(name_values, cinema_id, cinema.emails, kdm);
}
diff --git a/src/lib/screen.h b/src/lib/screen.h
index 7f01cdf27..89ebc3ab4 100644
--- a/src/lib/screen.h
+++ b/src/lib/screen.h
@@ -23,12 +23,14 @@
#define DCPOMATIC_SCREEN_H
-#include "kdm_with_metadata.h"
+#include "cinema_list.h"
#include "kdm_recipient.h"
#include "kdm_util.h"
+#include "kdm_with_metadata.h"
#include "trusted_device.h"
#include <dcp/certificate.h>
#include <dcp/decrypted_kdm.h>
+#include <dcp/utc_offset.h>
#include <libcxml/cxml.h>
#include <boost/optional.hpp>
#include <string>
@@ -62,12 +64,7 @@ public:
, trusted_devices (trusted_devices_)
{}
- explicit Screen (cxml::ConstNodePtr);
-
- void as_xml (xmlpp::Element *) const override;
std::vector<std::string> trusted_device_thumbprints () const;
-
- std::shared_ptr<Cinema> cinema;
std::vector<TrustedDevice> trusted_devices;
};
@@ -77,9 +74,11 @@ public:
KDMWithMetadataPtr
kdm_for_screen (
std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm,
- std::shared_ptr<const dcpomatic::Screen> screen,
- boost::posix_time::ptime valid_from,
- boost::posix_time::ptime valid_to,
+ CinemaID cinema_id,
+ Cinema const& cinema,
+ dcpomatic::Screen const& screen,
+ dcp::LocalTime valid_from,
+ dcp::LocalTime valid_to,
dcp::Formulation formulation,
bool disable_forensic_marking_picture,
boost::optional<int> disable_forensic_marking_audio,
diff --git a/src/lib/send_problem_report_job.cc b/src/lib/send_problem_report_job.cc
index 9569aca3b..ed78112e9 100644
--- a/src/lib/send_problem_report_job.cc
+++ b/src/lib/send_problem_report_job.cc
@@ -19,15 +19,16 @@
*/
-#include "send_problem_report_job.h"
#include "compose.hpp"
-#include "film.h"
#include "cross.h"
+#include "email.h"
+#include "environment_info.h"
+#include "film.h"
#include "film.h"
#include "log.h"
+#include "send_problem_report_job.h"
+#include "variant.h"
#include "version.h"
-#include "email.h"
-#include "environment_info.h"
#include <libxml++/libxml++.h>
#include "i18n.h"
@@ -108,7 +109,7 @@ SendProblemReportJob::run ()
body += "---<8----\n";
}
- Email email(_from, {"carl@dcpomatic.com"}, "DCP-o-matic problem report", body);
+ Email email(_from, {"carl@dcpomatic.com"}, variant::insert_dcpomatic("%1 problem report"), body);
email.send("main.carlh.net", 2525, EmailProtocol::STARTTLS);
set_progress (1);
diff --git a/src/lib/server.cc b/src/lib/server.cc
index c1be5735e..359234044 100644
--- a/src/lib/server.cc
+++ b/src/lib/server.cc
@@ -41,13 +41,7 @@ Server::Server (int port, int timeout)
Server::~Server ()
{
- {
- boost::mutex::scoped_lock lm (_mutex);
- _terminate = true;
- }
-
- _acceptor.close ();
- stop ();
+ stop();
}
@@ -81,6 +75,8 @@ Server::handle_accept (shared_ptr<Socket> socket, boost::system::error_code cons
return;
}
+ _socket = socket;
+
handle (socket);
start_accept ();
}
@@ -89,5 +85,14 @@ Server::handle_accept (shared_ptr<Socket> socket, boost::system::error_code cons
void
Server::stop ()
{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ _terminate = true;
+ }
+
+ _acceptor.close ();
+ if (auto s = _socket.lock()) {
+ s->close();
+ }
_io_service.stop ();
}
diff --git a/src/lib/server.h b/src/lib/server.h
index 0b1950aa7..7e42f6cbd 100644
--- a/src/lib/server.h
+++ b/src/lib/server.h
@@ -57,6 +57,7 @@ private:
boost::asio::io_service _io_service;
boost::asio::ip::tcp::acceptor _acceptor;
int _timeout;
+ std::weak_ptr<Socket> _socket;
};
diff --git a/src/lib/shuffler.cc b/src/lib/shuffler.cc
index 5a4faf4d1..a4ea0f5dc 100644
--- a/src/lib/shuffler.cc
+++ b/src/lib/shuffler.cc
@@ -40,8 +40,8 @@ int const Shuffler::_max_size = 64;
struct Comparator
{
bool operator()(Shuffler::Store const & a, Shuffler::Store const & b) {
- if (a.second.frame != b.second.frame) {
- return a.second.frame < b.second.frame;
+ if (a.second.time != b.second.time) {
+ return a.second.time < b.second.time;
}
return a.second.eyes < b.second.eyes;
}
@@ -51,7 +51,7 @@ struct Comparator
void
Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video)
{
- LOG_DEBUG_THREE_D ("Shuffler::video frame=%1 eyes=%2 part=%3", video.frame, static_cast<int>(video.eyes), static_cast<int>(video.part));
+ LOG_DEBUG_THREE_D("Shuffler::video time=%1 eyes=%2 part=%3", to_string(video.time), static_cast<int>(video.eyes), static_cast<int>(video.part));
if (video.eyes != Eyes::LEFT && video.eyes != Eyes::RIGHT) {
/* Pass through anything that we don't care about */
@@ -79,13 +79,13 @@ Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video)
!_store.empty() &&
_last &&
(
- (_store.front().second.frame == _last->frame && _store.front().second.eyes == Eyes::RIGHT && _last->eyes == Eyes::LEFT) ||
- (_store.front().second.frame >= (_last->frame + 1) && _store.front().second.eyes == Eyes::LEFT && _last->eyes == Eyes::RIGHT)
+ (_store.front().second.time == _last->time && _store.front().second.eyes == Eyes::RIGHT && _last->eyes == Eyes::LEFT) ||
+ (_store.front().second.time > _last->time && _store.front().second.eyes == Eyes::LEFT && _last->eyes == Eyes::RIGHT)
);
if (!store_front_in_sequence) {
- string const store = _store.empty() ? "store empty" : String::compose("store front frame=%1 eyes=%2", _store.front().second.frame, static_cast<int>(_store.front().second.eyes));
- string const last = _last ? String::compose("last frame=%1 eyes=%2", _last->frame, static_cast<int>(_last->eyes)) : "no last";
+ string const store = _store.empty() ? "store empty" : String::compose("store front time=%1 eyes=%2", to_string(_store.front().second.time), static_cast<int>(_store.front().second.eyes));
+ string const last = _last ? String::compose("last time=%1 eyes=%2", to_string(_last->time), static_cast<int>(_last->eyes)) : "no last";
LOG_DEBUG_THREE_D("Shuffler not in sequence: %1 %2", store, last);
}
@@ -98,10 +98,10 @@ Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video)
}
if (_store.size() > _max_size) {
- LOG_WARNING ("Shuffler is full after receiving frame %1; 3D sync may be incorrect.", video.frame);
+ LOG_WARNING("Shuffler is full after receiving frame at %1; 3D sync may be incorrect.", to_string(video.time));
}
- LOG_DEBUG_THREE_D("Shuffler emits frame=%1 eyes=%2 store=%3", _store.front().second.frame, static_cast<int>(_store.front().second.eyes), _store.size());
+ LOG_DEBUG_THREE_D("Shuffler emits time=%1 eyes=%2 store=%3", to_string(_store.front().second.time), static_cast<int>(_store.front().second.eyes), _store.size());
Video (_store.front().first, _store.front().second);
_last = _store.front().second;
_store.pop_front ();
diff --git a/src/lib/spl.cc b/src/lib/spl.cc
index f49f11a7d..e87465cdc 100644
--- a/src/lib/spl.cc
+++ b/src/lib/spl.cc
@@ -62,10 +62,10 @@ SPL::write (boost::filesystem::path path) const
{
xmlpp::Document doc;
auto root = doc.create_root_node ("SPL");
- root->add_child("Id")->add_child_text (_id);
- root->add_child("Name")->add_child_text (_name);
+ cxml::add_text_child(root, "Id", _id);
+ cxml::add_text_child(root, "Name", _name);
for (auto i: _spl) {
- i.as_xml (root->add_child("Entry"));
+ i.as_xml(cxml::add_child(root, "Entry"));
}
doc.write_to_file_formatted (path.string());
}
diff --git a/src/lib/spl_entry.cc b/src/lib/spl_entry.cc
index f0b377a56..a77b0b7d5 100644
--- a/src/lib/spl_entry.cc
+++ b/src/lib/spl_entry.cc
@@ -53,5 +53,5 @@ SPLEntry::SPLEntry (shared_ptr<Content> c)
void
SPLEntry::as_xml (xmlpp::Element* e)
{
- e->add_child("Digest")->add_child_text(digest);
+ cxml::add_text_child(e, "Digest", digest);
}
diff --git a/src/lib/sqlite_statement.cc b/src/lib/sqlite_statement.cc
new file mode 100644
index 000000000..b3ec1fb81
--- /dev/null
+++ b/src/lib/sqlite_statement.cc
@@ -0,0 +1,111 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "exceptions.h"
+#include "sqlite_statement.h"
+
+
+using std::function;
+using std::string;
+
+
+SQLiteStatement::SQLiteStatement(sqlite3* db, string const& statement)
+ : _db(db)
+{
+#ifdef DCPOMATIC_HAVE_SQLITE3_PREPARE_V3
+ auto rc = sqlite3_prepare_v3(_db, statement.c_str(), -1, 0, &_stmt, nullptr);
+#else
+ auto rc = sqlite3_prepare_v2(_db, statement.c_str(), -1, &_stmt, nullptr);
+#endif
+ if (rc != SQLITE_OK) {
+ throw SQLError(_db, rc, statement);
+ }
+}
+
+
+SQLiteStatement::~SQLiteStatement()
+{
+ sqlite3_finalize(_stmt);
+}
+
+
+void
+SQLiteStatement::bind_text(int index, string const& value)
+{
+ auto rc = sqlite3_bind_text(_stmt, index, value.c_str(), -1, SQLITE_TRANSIENT);
+ if (rc != SQLITE_OK) {
+ throw SQLError(_db, rc);
+ }
+}
+
+
+void
+SQLiteStatement::bind_int64(int index, int64_t value)
+{
+ auto rc = sqlite3_bind_int64(_stmt, index, value);
+ if (rc != SQLITE_OK) {
+ throw SQLError(_db, rc);
+ }
+}
+
+
+void
+SQLiteStatement::execute(function<void(SQLiteStatement&)> row, function<void()> busy)
+{
+ while (true) {
+ auto const rc = sqlite3_step(_stmt);
+ switch (rc) {
+ case SQLITE_BUSY:
+ busy();
+ break;
+ case SQLITE_DONE:
+ return;
+ case SQLITE_ROW:
+ row(*this);
+ break;
+ case SQLITE_ERROR:
+ case SQLITE_MISUSE:
+ throw SQLError(_db, sqlite3_errmsg(_db));
+ }
+ }
+}
+
+
+int
+SQLiteStatement::data_count()
+{
+ return sqlite3_data_count(_stmt);
+}
+
+
+int64_t
+SQLiteStatement::column_int64(int index)
+{
+ return sqlite3_column_int64(_stmt, index);
+}
+
+
+string
+SQLiteStatement::column_text(int index)
+{
+ return reinterpret_cast<const char*>(sqlite3_column_text(_stmt, index));
+}
+
diff --git a/src/lib/sqlite_statement.h b/src/lib/sqlite_statement.h
new file mode 100644
index 000000000..3c2246efb
--- /dev/null
+++ b/src/lib/sqlite_statement.h
@@ -0,0 +1,50 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include <sqlite3.h>
+#include <functional>
+#include <string>
+
+
+class SQLiteStatement
+{
+public:
+ SQLiteStatement(sqlite3* db, std::string const& statement);
+ ~SQLiteStatement();
+
+ SQLiteStatement(SQLiteStatement const&) = delete;
+ SQLiteStatement& operator=(SQLiteStatement const&) = delete;
+
+ void bind_text(int index, std::string const& value);
+ void bind_int64(int index, int64_t value);
+
+ int64_t column_int64(int index);
+ std::string column_text(int index);
+
+ void execute(std::function<void(SQLiteStatement&)> row = std::function<void(SQLiteStatement& statement)>(), std::function<void()> busy = std::function<void()>());
+
+ int data_count();
+
+private:
+ sqlite3* _db;
+ sqlite3_stmt* _stmt;
+};
+
diff --git a/src/lib/sqlite_table.cc b/src/lib/sqlite_table.cc
new file mode 100644
index 000000000..f00fa6b74
--- /dev/null
+++ b/src/lib/sqlite_table.cc
@@ -0,0 +1,79 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcpomatic_assert.h"
+#include "compose.hpp"
+#include "sqlite_table.h"
+#include "util.h"
+
+
+using std::string;
+using std::vector;
+
+
+void
+SQLiteTable::add_column(string const& name, string const& type)
+{
+ _columns.push_back(name);
+ _types.push_back(type);
+}
+
+
+string
+SQLiteTable::create() const
+{
+ DCPOMATIC_ASSERT(!_columns.empty());
+ DCPOMATIC_ASSERT(_columns.size() == _types.size());
+ vector<string> columns(_columns.size());
+ for (size_t i = 0; i < _columns.size(); ++i) {
+ columns[i] = _columns[i] + " " + _types[i];
+ }
+ return String::compose("CREATE TABLE IF NOT EXISTS %1 (id INTEGER PRIMARY KEY, %2)", _name, join_strings(columns, ", "));
+}
+
+
+string
+SQLiteTable::insert() const
+{
+ DCPOMATIC_ASSERT(!_columns.empty());
+ vector<string> placeholders(_columns.size(), "?");
+ return String::compose("INSERT INTO %1 (%2) VALUES (%3)", _name, join_strings(_columns, ", "), join_strings(placeholders, ", "));
+}
+
+
+string
+SQLiteTable::update(string const& condition) const
+{
+ DCPOMATIC_ASSERT(!_columns.empty());
+ vector<string> placeholders(_columns.size());
+ for (size_t i = 0; i < _columns.size(); ++i) {
+ placeholders[i] = _columns[i] + "=?";
+ }
+
+ return String::compose("UPDATE %1 SET %2 %3", _name, join_strings(placeholders, ", "), condition);
+}
+
+
+string
+SQLiteTable::select(string const& condition) const
+{
+ return String::compose("SELECT id,%1 FROM %2 %3", join_strings(_columns, ","), _name, condition);
+}
diff --git a/src/lib/sqlite_table.h b/src/lib/sqlite_table.h
new file mode 100644
index 000000000..43c9491ed
--- /dev/null
+++ b/src/lib/sqlite_table.h
@@ -0,0 +1,54 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_SQLITE_TABLE_H
+#define DCPOMATIC_SQLITE_TABLE_H
+
+#include <string>
+#include <vector>
+
+
+class SQLiteTable
+{
+public:
+ SQLiteTable(std::string name)
+ : _name(std::move(name))
+ {}
+
+ SQLiteTable(SQLiteTable const&) = default;
+ SQLiteTable(SQLiteTable&&) = default;
+
+ void add_column(std::string const& name, std::string const& type);
+
+ std::string create() const;
+ std::string insert() const;
+ std::string update(std::string const& condition) const;
+ std::string select(std::string const& condition) const;
+
+private:
+ std::string _name;
+ std::vector<std::string> _columns;
+ std::vector<std::string> _types;
+};
+
+
+#endif
+
diff --git a/src/lib/sqlite_transaction.cc b/src/lib/sqlite_transaction.cc
new file mode 100644
index 000000000..239d85020
--- /dev/null
+++ b/src/lib/sqlite_transaction.cc
@@ -0,0 +1,50 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "sqlite_statement.h"
+#include "sqlite_transaction.h"
+
+
+SQLiteTransaction::SQLiteTransaction(sqlite3* db)
+ : _db(db)
+{
+ SQLiteStatement statement(_db, "BEGIN TRANSACTION");
+ statement.execute();
+}
+
+
+SQLiteTransaction::~SQLiteTransaction()
+{
+ if (_rollback) {
+ SQLiteStatement rollback(_db, "ROLLBACK");
+ rollback.execute();
+ }
+}
+
+
+void
+SQLiteTransaction::commit()
+{
+ SQLiteStatement commit(_db, "COMMIT");
+ commit.execute();
+ _rollback = false;
+}
+
diff --git a/src/lib/sqlite_transaction.h b/src/lib/sqlite_transaction.h
new file mode 100644
index 000000000..0f6319243
--- /dev/null
+++ b/src/lib/sqlite_transaction.h
@@ -0,0 +1,40 @@
+/*
+ Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include <sqlite3.h>
+
+
+class SQLiteTransaction
+{
+public:
+ SQLiteTransaction(sqlite3* db);
+ ~SQLiteTransaction();
+
+ SQLiteTransaction(SQLiteTransaction const&) = delete;
+ SQLiteTransaction& operator=(SQLiteTransaction const&) = delete;
+
+ void commit();
+
+private:
+ sqlite3* _db;
+ bool _rollback = true;
+};
+
diff --git a/src/lib/state.cc b/src/lib/state.cc
index a8230385d..7a3232ee9 100644
--- a/src/lib/state.cc
+++ b/src/lib/state.cc
@@ -35,7 +35,7 @@ boost::optional<boost::filesystem::path> State::override_path;
/* List of config versions to look for in descending order of preference;
* i.e. look at the first one, and if that doesn't exist, try the second, etc.
*/
-static std::vector<std::string> config_versions = { "2.16" };
+static std::vector<std::string> config_versions = { "2.18", "2.16" };
static
diff --git a/src/lib/string_text.h b/src/lib/string_text.h
index 787231b8c..d39a889cf 100644
--- a/src/lib/string_text.h
+++ b/src/lib/string_text.h
@@ -25,7 +25,7 @@
#include "font.h"
#include <dcp/subtitle_standard.h>
-#include <dcp/subtitle_string.h>
+#include <dcp/text_string.h>
/** A wrapper for SubtitleString which allows us to:
@@ -36,13 +36,13 @@
* - include details of how v_align should be interpreted
*
* - specify the font by referring to a Font object from the content we came from, rather than
- * having to use a DCP ID like in dcp::SubtitleString.
+ * having to use a DCP ID like in dcp::TextString.
*/
-class StringText : public dcp::SubtitleString
+class StringText : public dcp::TextString
{
public:
- StringText(dcp::SubtitleString dcp_, int outline_width_, std::shared_ptr<dcpomatic::Font> font_, dcp::SubtitleStandard valign_standard_)
- : dcp::SubtitleString (dcp_)
+ StringText(dcp::TextString dcp_, int outline_width_, std::shared_ptr<dcpomatic::Font> font_, dcp::SubtitleStandard valign_standard_)
+ : dcp::TextString(dcp_)
, outline_width (outline_width_)
, font (font_)
, valign_standard (valign_standard_)
diff --git a/src/lib/string_text_file_content.cc b/src/lib/string_text_file_content.cc
index d8c195be7..4f7fbb241 100644
--- a/src/lib/string_text_file_content.cc
+++ b/src/lib/string_text_file_content.cc
@@ -52,8 +52,8 @@ StringTextFileContent::StringTextFileContent (boost::filesystem::path path)
}
-StringTextFileContent::StringTextFileContent (cxml::ConstNodePtr node, int version, list<string>& notes)
- : Content (node)
+StringTextFileContent::StringTextFileContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version, list<string>& notes)
+ : Content (node, film_directory)
, _length (node->number_child<ContentTime::Type>("Length"))
{
text = TextContent::from_xml (this, node, version, notes);
@@ -122,16 +122,16 @@ StringTextFileContent::technical_summary () const
void
-StringTextFileContent::as_xml (xmlpp::Node* node, bool with_paths) const
+StringTextFileContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
- node->add_child("Type")->add_child_text("TextSubtitle");
- Content::as_xml (node, with_paths);
+ cxml::add_text_child(element, "Type", "TextSubtitle");
+ Content::as_xml(element, with_paths, path_behaviour, film_directory);
if (only_text()) {
- only_text()->as_xml(node);
+ only_text()->as_xml(element);
}
- node->add_child("Length")->add_child_text(raw_convert<string>(_length.get ()));
+ cxml::add_text_child(element, "Length", raw_convert<string>(_length.get()));
}
diff --git a/src/lib/string_text_file_content.h b/src/lib/string_text_file_content.h
index 30f543381..abfd72906 100644
--- a/src/lib/string_text_file_content.h
+++ b/src/lib/string_text_file_content.h
@@ -32,7 +32,7 @@ class StringTextFileContent : public Content
{
public:
StringTextFileContent (boost::filesystem::path);
- StringTextFileContent (cxml::ConstNodePtr, int, std::list<std::string>&);
+ StringTextFileContent (cxml::ConstNodePtr, boost::optional<boost::filesystem::path> film_directory, int, std::list<std::string>&);
std::shared_ptr<StringTextFileContent> shared_from_this () {
return std::dynamic_pointer_cast<StringTextFileContent> (Content::shared_from_this ());
@@ -45,7 +45,14 @@ public:
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override;
std::string summary () const override;
std::string technical_summary () const override;
- void as_xml (xmlpp::Node *, bool with_paths) const override;
+
+ void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const override;
+
dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override;
dcpomatic::DCPTime approximate_length () const override;
std::string identifier () const override;
diff --git a/src/lib/string_text_file_decoder.cc b/src/lib/string_text_file_decoder.cc
index 2ec0ec1cb..585d68888 100644
--- a/src/lib/string_text_file_decoder.cc
+++ b/src/lib/string_text_file_decoder.cc
@@ -19,11 +19,11 @@
*/
-#include "string_text_file_decoder.h"
#include "string_text_file_content.h"
+#include "string_text_file_decoder.h"
#include "text_content.h"
#include "text_decoder.h"
-#include <dcp/subtitle_string.h>
+#include <dcp/text_string.h>
#include <iostream>
diff --git a/src/lib/subtitle_analysis.cc b/src/lib/subtitle_analysis.cc
index ff1969a3a..2968416c6 100644
--- a/src/lib/subtitle_analysis.cc
+++ b/src/lib/subtitle_analysis.cc
@@ -70,18 +70,18 @@ SubtitleAnalysis::write (boost::filesystem::path path) const
auto doc = make_shared<xmlpp::Document>();
xmlpp::Element* root = doc->create_root_node ("SubtitleAnalysis");
- root->add_child("Version")->add_child_text (raw_convert<string>(_current_state_version));
+ cxml::add_text_child(root, "Version", raw_convert<string>(_current_state_version));
if (_bounding_box) {
- auto bounding_box = root->add_child("BoundingBox");
- bounding_box->add_child("X")->add_child_text(raw_convert<string>(_bounding_box->x));
- bounding_box->add_child("Y")->add_child_text(raw_convert<string>(_bounding_box->y));
- bounding_box->add_child("Width")->add_child_text(raw_convert<string>(_bounding_box->width));
- bounding_box->add_child("Height")->add_child_text(raw_convert<string>(_bounding_box->height));
+ auto bounding_box = cxml::add_child(root, "BoundingBox");
+ cxml::add_text_child(bounding_box, "X", raw_convert<string>(_bounding_box->x));
+ cxml::add_text_child(bounding_box, "Y", raw_convert<string>(_bounding_box->y));
+ cxml::add_text_child(bounding_box, "Width", raw_convert<string>(_bounding_box->width));
+ cxml::add_text_child(bounding_box, "Height", raw_convert<string>(_bounding_box->height));
}
- root->add_child("AnalysisXOffset")->add_child_text(raw_convert<string>(_analysis_x_offset));
- root->add_child("AnalysisYOffset")->add_child_text(raw_convert<string>(_analysis_y_offset));
+ cxml::add_text_child(root, "AnalysisXOffset", raw_convert<string>(_analysis_x_offset));
+ cxml::add_text_child(root, "AnalysisYOffset", raw_convert<string>(_analysis_y_offset));
doc->write_to_file_formatted (path.string());
}
diff --git a/src/lib/subtitle_encoder.cc b/src/lib/subtitle_film_encoder.cc
index 8b1d9a15b..8356433a8 100644
--- a/src/lib/subtitle_encoder.cc
+++ b/src/lib/subtitle_film_encoder.cc
@@ -23,11 +23,11 @@
#include "film.h"
#include "job.h"
#include "player.h"
-#include "subtitle_encoder.h"
+#include "subtitle_film_encoder.h"
#include <dcp/filesystem.h>
-#include <dcp/interop_subtitle_asset.h>
+#include <dcp/interop_text_asset.h>
#include <dcp/raw_convert.h>
-#include <dcp/smpte_subtitle_asset.h>
+#include <dcp/smpte_text_asset.h>
#include <boost/filesystem.hpp>
#include <boost/bind/bind.hpp>
@@ -51,8 +51,8 @@ using dcp::raw_convert;
* @param initial_name Hint that may be used to create filenames, if @ref output is a directory.
* @param include_font true to refer to and export any font file (for Interop; ignored for SMPTE).
*/
-SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> job, boost::filesystem::path output, string initial_name, bool split_reels, bool include_font)
- : Encoder (film, job)
+SubtitleFilmEncoder::SubtitleFilmEncoder(shared_ptr<const Film> film, shared_ptr<Job> job, boost::filesystem::path output, string initial_name, bool split_reels, bool include_font)
+ : FilmEncoder(film, job)
, _split_reels (split_reels)
, _include_font (include_font)
, _reel_index (0)
@@ -61,7 +61,7 @@ SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> j
_player.set_play_referenced();
_player.set_ignore_video();
_player.set_ignore_audio();
- _player.Text.connect(boost::bind(&SubtitleEncoder::text, this, _1, _2, _3, _4));
+ _player.Text.connect(boost::bind(&SubtitleFilmEncoder::text, this, _1, _2, _3, _4));
string const extension = film->interop() ? ".xml" : ".mxf";
@@ -79,7 +79,7 @@ SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> j
}
}
- _assets.push_back(make_pair(shared_ptr<dcp::SubtitleAsset>(), dcp::filesystem::change_extension(filename, extension)));
+ _assets.push_back(make_pair(shared_ptr<dcp::TextAsset>(), dcp::filesystem::change_extension(filename, extension)));
}
for (auto i: film->reels()) {
@@ -91,7 +91,7 @@ SubtitleEncoder::SubtitleEncoder (shared_ptr<const Film> film, shared_ptr<Job> j
void
-SubtitleEncoder::go ()
+SubtitleFilmEncoder::go()
{
{
shared_ptr<Job> job = _job.lock ();
@@ -108,12 +108,12 @@ SubtitleEncoder::go ()
if (!i.first) {
/* No subtitles arrived for this asset; make an empty one so we write something to the output */
if (_film->interop()) {
- auto s = make_shared<dcp::InteropSubtitleAsset>();
+ auto s = make_shared<dcp::InteropTextAsset>();
s->set_movie_title (_film->name());
s->set_reel_number (raw_convert<string>(reel + 1));
i.first = s;
} else {
- auto s = make_shared<dcp::SMPTESubtitleAsset>();
+ auto s = make_shared<dcp::SMPTETextAsset>();
s->set_content_title_text (_film->name());
s->set_reel_number (reel + 1);
i.first = s;
@@ -133,17 +133,17 @@ SubtitleEncoder::go ()
void
-SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period)
+SubtitleFilmEncoder::text(PlayerText subs, TextType type, optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period)
{
if (type != TextType::OPEN_SUBTITLE) {
return;
}
if (!_assets[_reel_index].first) {
- shared_ptr<dcp::SubtitleAsset> asset;
+ shared_ptr<dcp::TextAsset> asset;
auto lang = _film->subtitle_languages ();
if (_film->interop ()) {
- auto s = make_shared<dcp::InteropSubtitleAsset>();
+ auto s = make_shared<dcp::InteropTextAsset>();
s->set_movie_title (_film->name());
if (lang.first) {
s->set_language (lang.first->to_string());
@@ -151,7 +151,7 @@ SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> tr
s->set_reel_number (raw_convert<string>(_reel_index + 1));
_assets[_reel_index].first = s;
} else {
- auto s = make_shared<dcp::SMPTESubtitleAsset>();
+ auto s = make_shared<dcp::SMPTETextAsset>();
s->set_content_title_text (_film->name());
if (lang.first) {
s->set_language (*lang.first);
@@ -176,7 +176,7 @@ SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> tr
if (_film->interop() && !_include_font) {
i.unset_font ();
}
- _assets[_reel_index].first->add (make_shared<dcp::SubtitleString>(i));
+ _assets[_reel_index].first->add(make_shared<dcp::TextString>(i));
}
if (_split_reels && (_reel_index < int(_reels.size()) - 1) && period.from > _reels[_reel_index].from) {
@@ -193,7 +193,7 @@ SubtitleEncoder::text (PlayerText subs, TextType type, optional<DCPTextTrack> tr
Frame
-SubtitleEncoder::frames_done () const
+SubtitleFilmEncoder::frames_done() const
{
if (!_last) {
return 0;
diff --git a/src/lib/subtitle_encoder.h b/src/lib/subtitle_film_encoder.h
index 0815b1fff..6482916cb 100644
--- a/src/lib/subtitle_encoder.h
+++ b/src/lib/subtitle_film_encoder.h
@@ -21,25 +21,25 @@
#include "dcp_text_track.h"
#include "dcpomatic_time.h"
-#include "encoder.h"
+#include "film_encoder.h"
#include "player_text.h"
namespace dcp {
- class SubtitleAsset;
+ class TextAsset;
}
class Film;
-/** @class SubtitleEncoder.
+/** @class SubtitleFilmEncoder.
* @brief An `encoder' which extracts a film's subtitles to DCP XML format.
*/
-class SubtitleEncoder : public Encoder
+class SubtitleFilmEncoder : public FilmEncoder
{
public:
- SubtitleEncoder (std::shared_ptr<const Film> film, std::shared_ptr<Job> job, boost::filesystem::path output, std::string initial_name, bool split_reels, bool include_font);
+ SubtitleFilmEncoder(std::shared_ptr<const Film> film, std::shared_ptr<Job> job, boost::filesystem::path output, std::string initial_name, bool split_reels, bool include_font);
void go () override;
@@ -53,7 +53,7 @@ public:
private:
void text (PlayerText subs, TextType type, boost::optional<DCPTextTrack> track, dcpomatic::DCPTimePeriod period);
- std::vector<std::pair<std::shared_ptr<dcp::SubtitleAsset>, boost::filesystem::path>> _assets;
+ std::vector<std::pair<std::shared_ptr<dcp::TextAsset>, boost::filesystem::path>> _assets;
std::vector<dcpomatic::DCPTimePeriod> _reels;
bool _split_reels;
bool _include_font;
diff --git a/src/lib/text_content.cc b/src/lib/text_content.cc
index 92a35b822..03336f15d 100644
--- a/src/lib/text_content.cc
+++ b/src/lib/text_content.cc
@@ -19,11 +19,12 @@
*/
-#include "text_content.h"
-#include "util.h"
+#include "content.h"
#include "exceptions.h"
#include "font.h"
-#include "content.h"
+#include "text_content.h"
+#include "util.h"
+#include "variant.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
@@ -32,13 +33,13 @@
#include "i18n.h"
-using std::string;
-using std::vector;
using std::cout;
+using std::dynamic_pointer_cast;
using std::list;
-using std::shared_ptr;
using std::make_shared;
-using std::dynamic_pointer_cast;
+using std::shared_ptr;
+using std::string;
+using std::vector;
using boost::optional;
using dcp::raw_convert;
using namespace dcpomatic;
@@ -235,17 +236,20 @@ TextContent::TextContent (Content* parent, cxml::ConstNodePtr node, int version,
if (lang) {
try {
_language = dcp::LanguageTag(lang->content());
- auto add = lang->optional_bool_attribute("Additional");
- _language_is_additional = add && *add;
+ auto additional = lang->optional_bool_attribute("Additional");
+ if (!additional) {
+ additional = lang->optional_bool_attribute("additional");
+ }
+ _language_is_additional = additional.get_value_or(false);
} catch (dcp::LanguageTagError&) {
/* The language tag can be empty or invalid if it was loaded from a
* 2.14.x metadata file; we'll just ignore it in that case.
*/
if (version <= 37) {
if (!lang->content().empty()) {
- notes.push_back (String::compose(
+ notes.push_back(String::compose(
_("A subtitle or closed caption file in this project is marked with the language '%1', "
- "which DCP-o-matic does not recognise. The file's language has been cleared."), lang->content()));
+ "which %2 does not recognise. The file's language has been cleared."), lang->content(), variant::dcpomatic()));
}
} else {
throw;
@@ -353,63 +357,63 @@ TextContent::TextContent (Content* parent, vector<shared_ptr<Content>> c)
/** _mutex must not be held on entry */
void
-TextContent::as_xml (xmlpp::Node* root) const
+TextContent::as_xml(xmlpp::Element* root) const
{
boost::mutex::scoped_lock lm (_mutex);
- auto text = root->add_child ("Text");
+ auto text = cxml::add_child(root, "Text");
- text->add_child("Use")->add_child_text (_use ? "1" : "0");
- text->add_child("Burn")->add_child_text (_burn ? "1" : "0");
- text->add_child("XOffset")->add_child_text (raw_convert<string> (_x_offset));
- text->add_child("YOffset")->add_child_text (raw_convert<string> (_y_offset));
- text->add_child("XScale")->add_child_text (raw_convert<string> (_x_scale));
- text->add_child("YScale")->add_child_text (raw_convert<string> (_y_scale));
+ cxml::add_text_child(text, "Use", _use ? "1" : "0");
+ cxml::add_text_child(text, "Burn", _burn ? "1" : "0");
+ cxml::add_text_child(text, "XOffset", raw_convert<string>(_x_offset));
+ cxml::add_text_child(text, "YOffset", raw_convert<string>(_y_offset));
+ cxml::add_text_child(text, "XScale", raw_convert<string>(_x_scale));
+ cxml::add_text_child(text, "YScale", raw_convert<string>(_y_scale));
if (_colour) {
- text->add_child("Red")->add_child_text (raw_convert<string> (_colour->r));
- text->add_child("Green")->add_child_text (raw_convert<string> (_colour->g));
- text->add_child("Blue")->add_child_text (raw_convert<string> (_colour->b));
+ cxml::add_text_child(text, "Red", raw_convert<string>(_colour->r));
+ cxml::add_text_child(text, "Green", raw_convert<string>(_colour->g));
+ cxml::add_text_child(text, "Blue", raw_convert<string>(_colour->b));
}
if (_effect) {
switch (*_effect) {
case dcp::Effect::NONE:
- text->add_child("Effect")->add_child_text("none");
+ cxml::add_text_child(text, "Effect", "none");
break;
case dcp::Effect::BORDER:
- text->add_child("Effect")->add_child_text("outline");
+ cxml::add_text_child(text, "Effect", "outline");
break;
case dcp::Effect::SHADOW:
- text->add_child("Effect")->add_child_text("shadow");
+ cxml::add_text_child(text, "Effect", "shadow");
break;
}
}
if (_effect_colour) {
- text->add_child("EffectRed")->add_child_text (raw_convert<string> (_effect_colour->r));
- text->add_child("EffectGreen")->add_child_text (raw_convert<string> (_effect_colour->g));
- text->add_child("EffectBlue")->add_child_text (raw_convert<string> (_effect_colour->b));
+ cxml::add_text_child(text, "EffectRed", raw_convert<string>(_effect_colour->r));
+ cxml::add_text_child(text, "EffectGreen", raw_convert<string>(_effect_colour->g));
+ cxml::add_text_child(text, "EffectBlue", raw_convert<string>(_effect_colour->b));
}
- text->add_child("LineSpacing")->add_child_text (raw_convert<string> (_line_spacing));
+ cxml::add_text_child(text, "LineSpacing", raw_convert<string>(_line_spacing));
if (_fade_in) {
- text->add_child("FadeIn")->add_child_text (raw_convert<string> (_fade_in->get()));
+ cxml::add_text_child(text, "FadeIn", raw_convert<string>(_fade_in->get()));
}
if (_fade_out) {
- text->add_child("FadeOut")->add_child_text (raw_convert<string> (_fade_out->get()));
+ cxml::add_text_child(text, "FadeOut", raw_convert<string>(_fade_out->get()));
}
- text->add_child("OutlineWidth")->add_child_text (raw_convert<string> (_outline_width));
+ cxml::add_text_child(text, "OutlineWidth", raw_convert<string>(_outline_width));
for (auto i: _fonts) {
- i->as_xml (text->add_child("Font"));
+ i->as_xml(cxml::add_child(text, "Font"));
}
- text->add_child("Type")->add_child_text (text_type_to_string(_type));
- text->add_child("OriginalType")->add_child_text (text_type_to_string(_original_type));
+ cxml::add_text_child(text, "Type", text_type_to_string(_type));
+ cxml::add_text_child(text, "OriginalType", text_type_to_string(_original_type));
if (_dcp_track) {
- _dcp_track->as_xml(text->add_child("DCPTrack"));
+ _dcp_track->as_xml(cxml::add_child(text, "DCPTrack"));
}
if (_language) {
- auto lang = text->add_child("Language");
+ auto lang = cxml::add_child(text, "Language");
lang->add_child_text (_language->to_string());
- lang->set_attribute ("Additional", _language_is_additional ? "1" : "0");
+ lang->set_attribute("additional", _language_is_additional ? "1" : "0");
}
}
diff --git a/src/lib/text_content.h b/src/lib/text_content.h
index 4d4bdc507..58014917b 100644
--- a/src/lib/text_content.h
+++ b/src/lib/text_content.h
@@ -72,7 +72,7 @@ public:
TextContent (Content* parent, std::vector<std::shared_ptr<Content>>);
TextContent (Content* parent, cxml::ConstNodePtr, int version, std::list<std::string>& notes);
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
std::string identifier () const;
void take_settings_from (std::shared_ptr<const TextContent> c);
@@ -224,6 +224,10 @@ private:
double _x_scale;
/** y scale factor to apply to subtitles */
double _y_scale;
+ /** Fonts used by this content. They are added during content examination, then
+ * saved/loaded from metadata.xml. This is so the user can change the font in
+ * used by a piece of content.
+ */
std::list<std::shared_ptr<dcpomatic::Font>> _fonts;
boost::optional<dcp::Colour> _colour;
boost::optional<dcp::Effect> _effect;
diff --git a/src/lib/text_decoder.cc b/src/lib/text_decoder.cc
index 75fa33605..36909c2ee 100644
--- a/src/lib/text_decoder.cc
+++ b/src/lib/text_decoder.cc
@@ -20,6 +20,7 @@
#include "compose.hpp"
+#include "dcpomatic_log.h"
#include "log.h"
#include "text_content.h"
#include "text_decoder.h"
@@ -127,7 +128,7 @@ TextDecoder::remove_invalid_characters_for_xml(string text)
void
-TextDecoder::emit_plain_start(ContentTime from, vector<dcp::SubtitleString> subtitles, dcp::SubtitleStandard valign_standard)
+TextDecoder::emit_plain_start(ContentTime from, vector<dcp::TextString> subtitles, dcp::SubtitleStandard valign_standard)
{
vector<StringText> string_texts;
@@ -273,7 +274,7 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & sub_subti
return dcp::Colour(lrintf(c.r * 255), lrintf(c.g * 255), lrintf(c.b * 255));
};
- auto dcp_subtitle = dcp::SubtitleString(
+ auto dcp_subtitle = dcp::TextString(
optional<string>(),
block.italic,
block.bold,
@@ -306,6 +307,10 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & sub_subti
);
auto font = content()->get_font(block.font.get_value_or(""));
+ if (!font) {
+ LOG_WARNING("Could not find font '%1' in content; falling back to default", block.font.get_value_or(""));
+ font = std::make_shared<dcpomatic::Font>(block.font.get_value_or(""), default_font_file());
+ }
DCPOMATIC_ASSERT(font);
auto string_text = StringText(
@@ -332,7 +337,7 @@ TextDecoder::emit_stop (ContentTime to)
void
-TextDecoder::emit_plain(ContentTimePeriod period, vector<dcp::SubtitleString> subtitles, dcp::SubtitleStandard valign_standard)
+TextDecoder::emit_plain(ContentTimePeriod period, vector<dcp::TextString> subtitles, dcp::SubtitleStandard valign_standard)
{
emit_plain_start (period.from, subtitles, valign_standard);
emit_stop (period.to);
diff --git a/src/lib/text_decoder.h b/src/lib/text_decoder.h
index 1a7632fd8..26248ef06 100644
--- a/src/lib/text_decoder.h
+++ b/src/lib/text_decoder.h
@@ -30,7 +30,7 @@
#include "content_text.h"
#include "types.h"
#include <dcp/subtitle_standard.h>
-#include <dcp/subtitle_string.h>
+#include <dcp/text_string.h>
#include <boost/signals2.hpp>
@@ -52,9 +52,9 @@ public:
void emit_bitmap_start (ContentBitmapText const& bitmap);
void emit_bitmap (dcpomatic::ContentTimePeriod period, std::shared_ptr<const Image> image, dcpomatic::Rect<double> rect);
- void emit_plain_start(dcpomatic::ContentTime from, std::vector<dcp::SubtitleString> s, dcp::SubtitleStandard valign_standard);
+ void emit_plain_start(dcpomatic::ContentTime from, std::vector<dcp::TextString> s, dcp::SubtitleStandard valign_standard);
void emit_plain_start (dcpomatic::ContentTime from, sub::Subtitle const & subtitle);
- void emit_plain(dcpomatic::ContentTimePeriod period, std::vector<dcp::SubtitleString> s, dcp::SubtitleStandard valign_standard);
+ void emit_plain(dcpomatic::ContentTimePeriod period, std::vector<dcp::TextString> s, dcp::SubtitleStandard valign_standard);
void emit_plain (dcpomatic::ContentTimePeriod period, sub::Subtitle const & subtitle);
void emit_stop (dcpomatic::ContentTime to);
diff --git a/src/lib/text_type.cc b/src/lib/text_type.cc
index b1dcfc99c..33e74bdca 100644
--- a/src/lib/text_type.cc
+++ b/src/lib/text_type.cc
@@ -24,6 +24,7 @@
#include "exceptions.h"
#include "text_type.h"
#include "types.h"
+#include <dcp/text_type.h>
#include "i18n.h"
@@ -38,6 +39,10 @@ string_to_text_type(string s)
return TextType::UNKNOWN;
} else if (s == "open-subtitle") {
return TextType::OPEN_SUBTITLE;
+ } else if (s == "open-caption") {
+ return TextType::OPEN_CAPTION;
+ } else if (s == "closed-subtitle") {
+ return TextType::CLOSED_SUBTITLE;
} else if (s == "closed-caption") {
return TextType::CLOSED_CAPTION;
} else {
@@ -53,6 +58,10 @@ text_type_to_string(TextType t)
return "unknown";
case TextType::OPEN_SUBTITLE:
return "open-subtitle";
+ case TextType::OPEN_CAPTION:
+ return "open-caption";
+ case TextType::CLOSED_SUBTITLE:
+ return "closed-subtitle";
case TextType::CLOSED_CAPTION:
return "closed-caption";
default:
@@ -68,6 +77,10 @@ text_type_to_name(TextType t)
return _("Timed text");
case TextType::OPEN_SUBTITLE:
return _("Open subtitles");
+ case TextType::OPEN_CAPTION:
+ return _("Open captions");
+ case TextType::CLOSED_SUBTITLE:
+ return _("Closed subtitles");
case TextType::CLOSED_CAPTION:
return _("Closed captions");
default:
@@ -76,3 +89,15 @@ text_type_to_name(TextType t)
}
+bool
+is_open(TextType type)
+{
+ return type == TextType::OPEN_SUBTITLE || type == TextType::OPEN_CAPTION;
+}
+
+
+bool
+is_open(dcp::TextType type)
+{
+ return type == dcp::TextType::OPEN_SUBTITLE || type == dcp::TextType::OPEN_CAPTION;
+}
diff --git a/src/lib/text_type.h b/src/lib/text_type.h
index d21e03a60..1f2a5aeec 100644
--- a/src/lib/text_type.h
+++ b/src/lib/text_type.h
@@ -24,6 +24,7 @@
#include <string>
+#include <dcp/text_type.h>
/** Type of captions.
@@ -34,8 +35,6 @@
* - open: on-screen
* - closed: only visible by some audience members
*
- * At the moment DoM supports open subtitles and closed captions.
- *
* There is some use of the word `subtitle' in the code which may mean
* caption in some contexts.
*/
@@ -43,6 +42,8 @@ enum class TextType
{
UNKNOWN,
OPEN_SUBTITLE,
+ OPEN_CAPTION,
+ CLOSED_SUBTITLE,
CLOSED_CAPTION,
COUNT
};
@@ -50,6 +51,8 @@ enum class TextType
extern std::string text_type_to_string(TextType t);
extern std::string text_type_to_name(TextType t);
extern TextType string_to_text_type(std::string s);
+bool is_open(TextType type);
+bool is_open(dcp::TextType type);
#endif
diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc
index 12b9a2aa3..f1373fb4a 100644
--- a/src/lib/transcode_job.cc
+++ b/src/lib/transcode_job.cc
@@ -28,15 +28,16 @@
#include "compose.hpp"
#include "content.h"
#include "config.h"
-#include "dcp_encoder.h"
+#include "dcp_film_encoder.h"
#include "dcpomatic_log.h"
-#include "encoder.h"
#include "examine_content_job.h"
#include "film.h"
+#include "film_encoder.h"
#include "job_manager.h"
#include "log.h"
#include "transcode_job.h"
#include "upload_job.h"
+#include "variant.h"
#include <iomanip>
#include <iostream>
@@ -83,7 +84,7 @@ TranscodeJob::json_name () const
void
-TranscodeJob::set_encoder (shared_ptr<Encoder> e)
+TranscodeJob::set_encoder(shared_ptr<FilmEncoder> e)
{
_encoder = e;
}
@@ -110,7 +111,10 @@ TranscodeJob::run ()
return;
case ChangedBehaviour::STOP:
set_progress (1);
- set_error (_("Files have changed since they were added to the project."), _("Open the project in DCP-o-matic, check the settings, then save it before trying again."));
+ set_error(
+ _("Files have changed since they were added to the project."),
+ variant::insert_dcpomatic(_("Open the project in %1, check the settings, then save it before trying again."))
+ );
set_state (FINISHED_ERROR);
return;
default:
@@ -129,7 +133,7 @@ TranscodeJob::run ()
LOG_GENERAL(N_("Transcode job completed successfully: %1 fps"), dcp::locale_convert<string>(frames_per_second(), 2, true));
- if (dynamic_pointer_cast<DCPEncoder>(_encoder)) {
+ if (variant::count_created_dcps() && dynamic_pointer_cast<DCPFilmEncoder>(_encoder)) {
try {
Analytics::instance()->successful_dcp_encode();
} catch (FileError& e) {
@@ -148,6 +152,20 @@ TranscodeJob::run ()
}
+void
+TranscodeJob::pause()
+{
+ _encoder->pause();
+}
+
+
+void TranscodeJob::resume()
+{
+ _encoder->resume();
+ Job::resume();
+}
+
+
string
TranscodeJob::status () const
{
diff --git a/src/lib/transcode_job.h b/src/lib/transcode_job.h
index b05b20a16..720d7f99b 100644
--- a/src/lib/transcode_job.h
+++ b/src/lib/transcode_job.h
@@ -35,7 +35,9 @@
#undef IGNORE
-class Encoder;
+class FilmEncoder;
+
+struct frames_not_lost_when_threads_disappear;
/** @class TranscodeJob
@@ -56,20 +58,24 @@ public:
std::string name () const override;
std::string json_name () const override;
void run () override;
+ void pause() override;
+ void resume() override;
std::string status () const override;
bool enable_notify () const override {
return true;
}
- void set_encoder (std::shared_ptr<Encoder> t);
+ void set_encoder(std::shared_ptr<FilmEncoder> encoder);
private:
+ friend struct ::frames_not_lost_when_threads_disappear;
+
virtual void post_transcode () {}
float frames_per_second() const;
int remaining_time () const override;
- std::shared_ptr<Encoder> _encoder;
+ std::shared_ptr<FilmEncoder> _encoder;
ChangedBehaviour _changed;
};
diff --git a/src/lib/types.h b/src/lib/types.h
index 36059401e..b4fcea959 100644
--- a/src/lib/types.h
+++ b/src/lib/types.h
@@ -43,8 +43,9 @@ class FFmpegContent;
*
* 64 - first version used
* 65 - v2.16.0 - checksums added to communication
+ * 66 - v2.17.x - J2KBandwidth -> VideoBitRate in metadata
*/
-#define SERVER_LINK_VERSION (64+1)
+#define SERVER_LINK_VERSION (64+2)
/** A film of F seconds at f FPS will be Ff frames;
Consider some delta FPS d, so if we run the same
@@ -107,7 +108,8 @@ enum class ReelType
{
SINGLE,
BY_VIDEO_CONTENT,
- BY_LENGTH
+ BY_LENGTH,
+ CUSTOM
};
diff --git a/src/lib/unzipper.cc b/src/lib/unzipper.cc
index f0170e7e0..8d468f24f 100644
--- a/src/lib/unzipper.cc
+++ b/src/lib/unzipper.cc
@@ -56,8 +56,20 @@ Unzipper::~Unzipper()
}
+bool
+Unzipper::contains(string const& filename) const
+{
+ auto file = zip_fopen(_zip, filename.c_str(), 0);
+ bool exists = file != nullptr;
+ if (file) {
+ zip_fclose(file);
+ }
+ return exists;
+}
+
+
string
-Unzipper::get(string const& filename)
+Unzipper::get(string const& filename) const
{
auto file = zip_fopen(_zip, filename.c_str(), 0);
if (!file) {
diff --git a/src/lib/unzipper.h b/src/lib/unzipper.h
index 7cab6e5f4..76b2fe45a 100644
--- a/src/lib/unzipper.h
+++ b/src/lib/unzipper.h
@@ -33,7 +33,8 @@ public:
Unzipper(Unzipper const&) = delete;
Unzipper& operator=(Unzipper const&) = delete;
- std::string get(std::string const& filename);
+ std::string get(std::string const& filename) const;
+ bool contains(std::string const& filename) const;
private:
struct zip* _zip;
diff --git a/src/lib/util.cc b/src/lib/util.cc
index b71ce8581..022289a58 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -49,17 +49,19 @@
#include "string_text.h"
#include "text_decoder.h"
#include "util.h"
+#include "variant.h"
#include "video_content.h"
#include <dcp/atmos_asset.h>
#include <dcp/decrypted_kdm.h>
#include <dcp/file.h>
#include <dcp/filesystem.h>
#include <dcp/locale_convert.h>
+#include <dcp/mpeg2_picture_asset.h>
#include <dcp/picture_asset.h>
#include <dcp/raw_convert.h>
#include <dcp/scope_guard.h>
#include <dcp/sound_asset.h>
-#include <dcp/subtitle_asset.h>
+#include <dcp/text_asset.h>
#include <dcp/util.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
@@ -87,10 +89,11 @@ LIBDCP_ENABLE_WARNINGS
#include <dbghelp.h>
#endif
#include <signal.h>
+#include <climits>
#include <iomanip>
#include <iostream>
#include <fstream>
-#include <climits>
+#include <numeric>
#include <stdexcept>
#ifdef DCPOMATIC_POSIX
#include <execinfo.h>
@@ -102,6 +105,7 @@ LIBDCP_ENABLE_WARNINGS
using std::bad_alloc;
using std::cout;
+using std::dynamic_pointer_cast;
using std::endl;
using std::istream;
using std::list;
@@ -118,9 +122,6 @@ using std::vector;
using std::wstring;
using boost::thread;
using boost::optional;
-using boost::lexical_cast;
-using boost::bad_lexical_cast;
-using boost::scoped_array;
using dcp::Size;
using dcp::raw_convert;
using dcp::locale_convert;
@@ -243,6 +244,7 @@ addr2line (void const * const addr)
{
char addr2line_cmd[512] = { 0 };
sprintf (addr2line_cmd, "addr2line -f -p -e %.256s %p > %s", program_name.c_str(), addr, backtrace_file.string().c_str());
+ std::cout << addr2line_cmd << "\n";
return system(addr2line_cmd);
}
@@ -428,6 +430,11 @@ dcpomatic_setup ()
SetUnhandledExceptionFilter(exception_handler);
#endif
+#ifdef DCPOMATIC_GROK
+ /* This makes grok support work with CUDA 12.2 */
+ setenv("CUDA_MODULE_LOADING", "EAGER", 1);
+#endif
+
#ifdef DCPOMATIC_HAVE_AVREGISTER
LIBDCP_DISABLE_WARNINGS
av_register_all ();
@@ -468,7 +475,7 @@ LIBDCP_ENABLE_WARNINGS
#if defined(DCPOMATIC_WINDOWS) || defined(DCPOMATIC_OSX)
/* Render something to fontconfig to create its cache */
vector<StringText> subs;
- dcp::SubtitleString ss(
+ dcp::TextString ss(
optional<string>(), false, false, false, dcp::Colour(), 42, 1, dcp::Time(), dcp::Time(), 0, dcp::HAlign::CENTER, 0, dcp::VAlign::CENTER, 0, dcp::Direction::LTR,
"Hello dolly", dcp::Effect::NONE, dcp::Colour(), dcp::Time(), dcp::Time(), 0, std::vector<dcp::Ruby>()
);
@@ -509,7 +516,7 @@ mo_path ()
boost::filesystem::path
mo_path ()
{
- return "DCP-o-matic 2.app/Contents/Resources";
+ return variant::dcpomatic_app() + "/Contents/Resources";
}
#endif
@@ -741,9 +748,10 @@ asset_filename (shared_ptr<dcp::Asset> asset, string type, int reel_index, int r
string
-video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary)
+video_asset_filename(shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary)
{
- return asset_filename(asset, "j2c", reel_index, reel_count, summary, ".mxf");
+ string type = dynamic_pointer_cast<dcp::MPEG2PictureAsset>(asset) ? "mpeg2" : "j2c";
+ return asset_filename(asset, type, reel_index, reel_count, summary, ".mxf");
}
@@ -755,7 +763,7 @@ audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int ree
string
-subtitle_asset_filename (shared_ptr<dcp::SubtitleAsset> asset, int reel_index, int reel_count, optional<string> summary, string extension)
+subtitle_asset_filename (shared_ptr<dcp::TextAsset> asset, int reel_index, int reel_count, optional<string> summary, string extension)
{
return asset_filename(asset, "sub", reel_index, reel_count, summary, extension);
}
@@ -792,7 +800,7 @@ careful_string_filter (string s)
for (int i = 0; i < transliterated.length(); ++i) {
auto replacement = replacements.find(transliterated[i]);
if (replacement != replacements.end()) {
- transliterated_more += replacement->second;
+ transliterated_more += static_cast<UChar32>(replacement->second);
} else {
transliterated_more += transliterated[i];
}
@@ -879,16 +887,6 @@ remap (shared_ptr<const AudioBuffers> input, int output_channels, AudioMapping m
return mapped;
}
-Eyes
-increment_eyes (Eyes e)
-{
- if (e == Eyes::LEFT) {
- return Eyes::RIGHT;
- }
-
- return Eyes::LEFT;
-}
-
size_t
utf8_strlen (string s)
@@ -912,7 +910,7 @@ utf8_strlen (string s)
/** @param size Size of picture that the subtitle will be overlaid onto */
void
-emit_subtitle_image (ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size size, shared_ptr<TextDecoder> decoder)
+emit_subtitle_image(ContentTimePeriod period, dcp::TextImage sub, dcp::Size size, shared_ptr<TextDecoder> decoder)
{
/* XXX: this is rather inefficient; decoding the image just to get its size */
FFmpegImageProxy proxy (sub.png_image());
@@ -1024,9 +1022,9 @@ decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm)
}
}
if (!on_chain) {
- throw KDMError (_("This KDM was not made for DCP-o-matic's decryption certificate."), e.what());
+ throw KDMError(variant::insert_dcpomatic(_("This KDM was not made for %1's decryption certificate.")), e.what());
} else if (kdm_subject_name != dc->leaf().subject()) {
- throw KDMError (_("This KDM was made for DCP-o-matic but not for its leaf certificate."), e.what());
+ throw KDMError(variant::insert_dcpomatic(_("This KDM was made for %1 but not for its leaf certificate.")), e.what());
} else {
throw;
}
@@ -1130,6 +1128,34 @@ word_wrap(string input, int columns)
}
+#ifdef DCPOMATIC_GROK
+void
+setup_grok_library_path()
+{
+ static std::string old_path;
+ if (old_path.empty()) {
+ auto const old = getenv("LD_LIRARY_PATH");
+ if (old) {
+ old_path = old;
+ }
+ }
+ auto const grok = Config::instance()->grok();
+ if (!grok || grok->binary_location.empty()) {
+ setenv("LD_LIRARY_PATH", old_path.c_str(), 1);
+ return;
+ }
+
+ std::string new_path = old_path;
+ if (!new_path.empty()) {
+ new_path += ":";
+ }
+ new_path += grok->binary_location.string();
+
+ setenv("LD_LIBRARY_PATH", new_path.c_str(), 1);
+}
+#endif
+
+
string
screen_names_to_string(vector<string> names)
{
@@ -1157,3 +1183,23 @@ screen_names_to_string(vector<string> names)
return result.substr(0, result.length() - 2);
}
+
+string
+report_problem()
+{
+ return String::compose(_("Please report this problem by using Help -> Report a problem or via email to %1"), variant::report_problem_email());
+}
+
+
+string
+join_strings(vector<string> const& in, string const& separator)
+{
+ if (in.empty()) {
+ return {};
+ }
+
+ return std::accumulate(std::next(in.begin()), in.end(), in.front(), [separator](string a, string b) {
+ return a + separator + b;
+ });
+}
+
diff --git a/src/lib/util.h b/src/lib/util.h
index fd6fd6164..d6ed0bccc 100644
--- a/src/lib/util.h
+++ b/src/lib/util.h
@@ -32,10 +32,11 @@
#include "dcpomatic_time.h"
#include "pixel_quanta.h"
#include "types.h"
+#include <libcxml/cxml.h>
#include <dcp/atmos_asset.h>
#include <dcp/decrypted_kdm.h>
#include <dcp/util.h>
-#include <dcp/subtitle_image.h>
+#include <dcp/text_image.h>
#include <boost/optional.hpp>
#include <boost/filesystem.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
@@ -49,7 +50,7 @@
namespace dcp {
class PictureAsset;
class SoundAsset;
- class SubtitleAsset;
+ class TextAsset;
}
extern std::string program_name;
@@ -81,13 +82,13 @@ extern dcp::Size fit_ratio_within (float ratio, dcp::Size);
extern void set_backtrace_file (boost::filesystem::path);
extern std::string video_asset_filename (std::shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary);
extern std::string audio_asset_filename (std::shared_ptr<dcp::SoundAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary);
-extern std::string subtitle_asset_filename (std::shared_ptr<dcp::SubtitleAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary, std::string extension);
+extern std::string subtitle_asset_filename (std::shared_ptr<dcp::TextAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary, std::string extension);
extern std::string atmos_asset_filename (std::shared_ptr<dcp::AtmosAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary);
extern std::string careful_string_filter (std::string);
extern std::pair<int, int> audio_channel_types (std::list<int> mapped, int channels);
extern std::shared_ptr<AudioBuffers> remap (std::shared_ptr<const AudioBuffers> input, int output_channels, AudioMapping map);
extern size_t utf8_strlen (std::string s);
-extern void emit_subtitle_image (dcpomatic::ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size size, std::shared_ptr<TextDecoder> decoder);
+extern void emit_subtitle_image (dcpomatic::ContentTimePeriod period, dcp::TextImage sub, dcp::Size size, std::shared_ptr<TextDecoder> decoder);
extern void copy_in_bits (boost::filesystem::path from, boost::filesystem::path to, std::function<void (float)>);
extern dcp::Size scale_for_display (dcp::Size s, dcp::Size display_container, dcp::Size film_container, PixelQuanta quanta);
extern dcp::DecryptedKDM decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm);
@@ -97,6 +98,24 @@ extern std::string error_details(boost::system::error_code ec);
extern bool contains_assetmap(boost::filesystem::path dir);
extern std::string word_wrap(std::string input, int columns);
extern void capture_ffmpeg_logs();
+#ifdef DCPOMATIC_GROK
+extern void setup_grok_library_path();
+#endif
+extern std::string join_strings(std::vector<std::string> const& in, std::string const& separator = " ");
+
+
+template <class T>
+T
+number_attribute(cxml::ConstNodePtr node, std::string name1, std::string name2)
+{
+ auto value = node->optional_number_attribute<T>(name1);
+ if (!value) {
+ value = node->number_attribute<T>(name2);
+ }
+ return *value;
+}
+
extern std::string screen_names_to_string(std::vector<std::string> names);
+extern std::string report_problem();
#endif
diff --git a/src/lib/variant.cc b/src/lib/variant.cc
new file mode 100644
index 000000000..a9dc56307
--- /dev/null
+++ b/src/lib/variant.cc
@@ -0,0 +1,179 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "variant.h"
+
+
+static char const* _dcpomatic = "DCP-o-matic";
+static char const* _dcpomatic_player = "DCP-o-matic Player";
+static char const* _dcpomatic_kdm_creator = "DCP-o-matic KDM Creator";
+static char const* _dcpomatic_verifier = "DCP-o-matic Verifier";
+static char const* _dcpomatic_app = "DCP-o-matic 2.app";
+static char const* _dcpomatic_player_app = "DCP-o-matic 2 Player.app";
+static char const* _dcpomatic_disk_writer = "DCP-o-matic Disk Writer";
+static char const* _dcpomatic_editor = "DCP-o-matic Editor";
+static char const* _dcpomatic_encode_server = "DCP-o-matic Encode Server";
+static char const* _dcpomatic_batch_converter_app = "DCP-o-matic 2 Batch Converter.app";
+static char const* _dcpomatic_playlist_editor = "DCP-o-matic Playlist Editor";
+static char const* _dcpomatic_combiner = "DCP-o-matic Combiner";
+static char const* _dcpomatic_batch_converter = "DCP-o-matic Batch Converter";
+
+static char const* _report_problem_email = "carl@dcpomatic.com";
+
+static bool const _show_tagline = true;
+static bool const _show_dcpomatic_website = true;
+static bool const _show_credits = true;
+static bool const _show_report_a_problem = true;
+static bool const _count_created_dcps = true;
+
+
+std::string
+variant::dcpomatic()
+{
+ return _dcpomatic;
+}
+
+std::string
+variant::dcpomatic_batch_converter()
+{
+ return _dcpomatic_batch_converter;
+}
+
+std::string
+variant::dcpomatic_combiner()
+{
+ return _dcpomatic_combiner;
+}
+
+std::string
+variant::dcpomatic_disk_writer()
+{
+ return _dcpomatic_disk_writer;
+}
+
+std::string
+variant::dcpomatic_editor()
+{
+ return _dcpomatic_editor;
+}
+
+std::string
+variant::dcpomatic_encode_server()
+{
+ return _dcpomatic_encode_server;
+}
+
+std::string
+variant::dcpomatic_kdm_creator()
+{
+ return _dcpomatic_kdm_creator;
+}
+
+std::string
+variant::dcpomatic_player()
+{
+ return _dcpomatic_player;
+}
+
+std::string
+variant::dcpomatic_playlist_editor()
+{
+ return _dcpomatic_playlist_editor;
+}
+
+std::string
+variant::dcpomatic_verifier()
+{
+ return _dcpomatic_verifier;
+}
+
+std::string
+variant::insert_dcpomatic(std::string const& s)
+{
+ return String::compose(s, _dcpomatic);
+}
+
+std::string
+variant::insert_dcpomatic_encode_server(std::string const& s)
+{
+ return String::compose(s, _dcpomatic_encode_server);
+}
+
+std::string
+variant::insert_dcpomatic_kdm_creator(std::string const& s)
+{
+ return String::compose(s, _dcpomatic_kdm_creator);
+}
+
+std::string
+variant::dcpomatic_app()
+{
+ return _dcpomatic_app;
+}
+
+std::string
+variant::dcpomatic_batch_converter_app()
+{
+ return _dcpomatic_batch_converter_app;
+}
+
+std::string
+variant::dcpomatic_player_app()
+{
+ return _dcpomatic_player_app;
+}
+
+bool
+variant::show_tagline()
+{
+ return _show_tagline;
+}
+
+bool
+variant::show_dcpomatic_website()
+{
+ return _show_dcpomatic_website;
+}
+
+bool
+variant::show_credits()
+{
+ return _show_credits;
+}
+
+bool
+variant::show_report_a_problem()
+{
+ return _show_report_a_problem;
+}
+
+bool
+variant::count_created_dcps()
+{
+ return _count_created_dcps;
+}
+
+std::string
+variant::report_problem_email()
+{
+ return _report_problem_email;
+}
+
diff --git a/src/lib/variant.h b/src/lib/variant.h
new file mode 100644
index 000000000..9a42f3eca
--- /dev/null
+++ b/src/lib/variant.h
@@ -0,0 +1,56 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "compose.hpp"
+
+
+namespace variant
+{
+
+std::string dcpomatic();
+std::string dcpomatic_batch_converter();
+std::string dcpomatic_combiner();
+std::string dcpomatic_disk_writer();
+std::string dcpomatic_editor();
+std::string dcpomatic_encode_server();
+std::string dcpomatic_kdm_creator();
+std::string dcpomatic_player();
+std::string dcpomatic_playlist_editor();
+std::string dcpomatic_verifier();
+
+std::string insert_dcpomatic(std::string const& s);
+std::string insert_dcpomatic_encode_server(std::string const& s);
+std::string insert_dcpomatic_kdm_creator(std::string const& s);
+
+std::string dcpomatic_app();
+std::string dcpomatic_batch_converter_app();
+std::string dcpomatic_player_app();
+
+std::string report_problem_email();
+
+bool show_tagline();
+bool show_dcpomatic_website();
+bool show_credits();
+bool show_report_a_problem();
+bool count_created_dcps();
+
+}
+
diff --git a/src/lib/verify_dcp_job.cc b/src/lib/verify_dcp_job.cc
index 6635d408c..a7688717d 100644
--- a/src/lib/verify_dcp_job.cc
+++ b/src/lib/verify_dcp_job.cc
@@ -86,7 +86,7 @@ VerifyDCPJob::run ()
}
}
- _notes = dcp::verify(
+ _result = dcp::verify(
_directories,
decrypted_kdms,
bind(&VerifyDCPJob::update_stage, this, _1, _2),
@@ -96,7 +96,7 @@ VerifyDCPJob::run ()
);
bool failed = false;
- for (auto i: _notes) {
+ for (auto i: _result.notes) {
if (i.type() == dcp::VerificationNote::Type::ERROR) {
failed = true;
}
diff --git a/src/lib/verify_dcp_job.h b/src/lib/verify_dcp_job.h
index e6497bd83..d7ac21d41 100644
--- a/src/lib/verify_dcp_job.h
+++ b/src/lib/verify_dcp_job.h
@@ -36,8 +36,8 @@ public:
std::string json_name () const override;
void run () override;
- std::vector<dcp::VerificationNote> const& notes() const {
- return _notes;
+ dcp::VerificationResult const& result() const {
+ return _result;
}
private:
@@ -45,5 +45,5 @@ private:
std::vector<boost::filesystem::path> _directories;
std::vector<boost::filesystem::path> _kdms;
- std::vector<dcp::VerificationNote> _notes;
+ dcp::VerificationResult _result;
};
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc
index 6c027ff11..058bb4ea2 100644
--- a/src/lib/video_content.cc
+++ b/src/lib/video_content.cc
@@ -175,8 +175,10 @@ VideoContent::VideoContent (Content* parent, cxml::ConstNodePtr node, int versio
_yuv = node->optional_bool_child("YUV").get_value_or (true);
- if (version >= 32) {
- /* These should be VideoFadeIn and VideoFadeOut but we'll leave them like this until 2.18.x */
+ if (version >= 39) {
+ _fade_in = node->number_child<Frame>("VideoFadeIn");
+ _fade_out = node->number_child<Frame>("VideoFadeOut");
+ } else if (version >= 32) {
_fade_in = node->number_child<Frame> ("FadeIn");
_fade_out = node->number_child<Frame> ("FadeOut");
} else {
@@ -273,37 +275,37 @@ VideoContent::VideoContent (Content* parent, vector<shared_ptr<Content> > c)
void
-VideoContent::as_xml (xmlpp::Node* node) const
+VideoContent::as_xml(xmlpp::Element* element) const
{
boost::mutex::scoped_lock lm (_mutex);
- node->add_child("Use")->add_child_text (_use ? "1" : "0");
- node->add_child("VideoLength")->add_child_text (raw_convert<string> (_length));
+ cxml::add_text_child(element, "Use", _use ? "1" : "0");
+ cxml::add_text_child(element, "VideoLength", raw_convert<string>(_length));
if (_size) {
- node->add_child("VideoWidth")->add_child_text(raw_convert<string>(_size->width));
- node->add_child("VideoHeight")->add_child_text(raw_convert<string>(_size->height));
+ cxml::add_text_child(element, "VideoWidth", raw_convert<string>(_size->width));
+ cxml::add_text_child(element, "VideoHeight", raw_convert<string>(_size->height));
}
- node->add_child("VideoFrameType")->add_child_text (video_frame_type_to_string (_frame_type));
+ cxml::add_text_child(element, "VideoFrameType", video_frame_type_to_string(_frame_type));
if (_sample_aspect_ratio) {
- node->add_child("SampleAspectRatio")->add_child_text (raw_convert<string> (_sample_aspect_ratio.get ()));
+ cxml::add_text_child(element, "SampleAspectRatio", raw_convert<string> (_sample_aspect_ratio.get ()));
}
- _crop.as_xml (node);
+ _crop.as_xml(element);
if (_custom_ratio) {
- node->add_child("CustomRatio")->add_child_text(raw_convert<string>(*_custom_ratio));
+ cxml::add_text_child(element, "CustomRatio", raw_convert<string>(*_custom_ratio));
}
if (_custom_size) {
- node->add_child("CustomWidth")->add_child_text(raw_convert<string>(_custom_size->width));
- node->add_child("CustomHeight")->add_child_text(raw_convert<string>(_custom_size->height));
+ cxml::add_text_child(element, "CustomWidth", raw_convert<string>(_custom_size->width));
+ cxml::add_text_child(element, "CustomHeight", raw_convert<string>(_custom_size->height));
}
if (_colour_conversion) {
- _colour_conversion.get().as_xml (node->add_child("ColourConversion"));
+ _colour_conversion.get().as_xml(cxml::add_child(element, "ColourConversion"));
}
- node->add_child("YUV")->add_child_text (_yuv ? "1" : "0");
- node->add_child("FadeIn")->add_child_text (raw_convert<string> (_fade_in));
- node->add_child("FadeOut")->add_child_text (raw_convert<string> (_fade_out));
- node->add_child("Range")->add_child_text(_range == VideoRange::FULL ? "full" : "video");
- _pixel_quanta.as_xml(node->add_child("PixelQuanta"));
+ cxml::add_text_child(element, "YUV", _yuv ? "1" : "0");
+ cxml::add_text_child(element, "VideoFadeIn", raw_convert<string>(_fade_in));
+ cxml::add_text_child(element, "VideoFadeOut", raw_convert<string>(_fade_out));
+ cxml::add_text_child(element, "Range", _range == VideoRange::FULL ? "full" : "video");
+ _pixel_quanta.as_xml(cxml::add_child(element, "PixelQuanta"));
if (_burnt_subtitle_language) {
- node->add_child("BurntSubtitleLanguage")->add_child_text(_burnt_subtitle_language->to_string());
+ cxml::add_text_child(element, "BurntSubtitleLanguage", _burnt_subtitle_language->to_string());
}
}
@@ -424,27 +426,29 @@ VideoContent::size_after_crop () const
}
-/** @param f Frame index within the whole (untrimmed) content.
+/** @param time Time within the whole (untrimmed) content.
* @return Fade factor (between 0 and 1) or unset if there is no fade.
*/
optional<double>
-VideoContent::fade (shared_ptr<const Film> film, Frame f) const
+VideoContent::fade(shared_ptr<const Film> film, ContentTime time) const
{
- DCPOMATIC_ASSERT (f >= 0);
+ DCPOMATIC_ASSERT(time.get() >= 0);
double const vfr = _parent->active_video_frame_rate(film);
- auto const ts = _parent->trim_start().frames_round(vfr);
- if ((f - ts) < fade_in()) {
- return double (f - ts) / fade_in();
+ auto const ts = _parent->trim_start();
+ auto const fade_in_time = ContentTime::from_frames(fade_in(), vfr);
+ if ((time - ts) < fade_in_time) {
+ return double(ContentTime(time - ts).get()) / fade_in_time.get();
}
- auto fade_out_start = length() - _parent->trim_end().frames_round(vfr) - fade_out();
- if (f >= fade_out_start) {
- return 1 - double (f - fade_out_start) / fade_out();
+ auto const fade_out_time = ContentTime::from_frames(fade_out(), vfr);
+ auto fade_out_start = ContentTime::from_frames(length(), vfr) - _parent->trim_end() - fade_out_time;
+ if (time >= fade_out_start) {
+ return 1 - double(ContentTime(time - fade_out_start).get()) / fade_out_time.get();
}
- return optional<double> ();
+ return {};
}
string
diff --git a/src/lib/video_content.h b/src/lib/video_content.h
index 495d000e1..eb106cc75 100644
--- a/src/lib/video_content.h
+++ b/src/lib/video_content.h
@@ -66,7 +66,7 @@ public:
VideoContent (Content* parent, cxml::ConstNodePtr node, int version, VideoRange video_range_hint);
VideoContent (Content* parent, std::vector<std::shared_ptr<Content>>);
- void as_xml (xmlpp::Node *) const;
+ void as_xml(xmlpp::Element*) const;
std::string technical_summary () const;
std::string identifier () const;
void take_settings_from (std::shared_ptr<const VideoContent> c);
@@ -208,7 +208,7 @@ public:
boost::optional<dcp::Size> size_after_crop() const;
boost::optional<dcp::Size> scaled_size(dcp::Size container_size);
- boost::optional<double> fade (std::shared_ptr<const Film> film, Frame) const;
+ boost::optional<double> fade(std::shared_ptr<const Film> film, dcpomatic::ContentTime time) const;
std::string processing_description (std::shared_ptr<const Film> film);
diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc
index cf21f885a..c628fddd9 100644
--- a/src/lib/video_decoder.cc
+++ b/src/lib/video_decoder.cc
@@ -20,7 +20,6 @@
#include "compose.hpp"
-#include "film.h"
#include "frame_interval_checker.h"
#include "image.h"
#include "j2k_image_proxy.h"
@@ -47,17 +46,9 @@ VideoDecoder::VideoDecoder (Decoder* parent, shared_ptr<const Content> c)
}
-/** Called by decoder classes when they have a video frame ready.
- * @param frame Frame index within the content; this does not take into account 3D
- * so for 3D_ALTERNATE this value goes:
- * 0: frame 0 left
- * 1: frame 0 right
- * 2: frame 1 left
- * 3: frame 1 right
- * and so on.
- */
+/** Called by decoder classes when they have a video frame ready */
void
-VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> image, Frame decoder_frame)
+VideoDecoder::emit(shared_ptr<const Film> film, shared_ptr<const ImageProxy> image, ContentTime time)
{
if (ignore ()) {
return;
@@ -66,14 +57,12 @@ VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> im
auto const afr = _content->active_video_frame_rate(film);
auto const vft = _content->video->frame_type();
- auto frame_time = ContentTime::from_frames (decoder_frame, afr);
-
/* Do some heuristics to try and spot the case where the user sets content to 3D
* when it is not. We try to tell this by looking at the differences in time between
* the first few frames. Real 3D content should have two frames for each timestamp.
*/
if (_frame_interval_checker) {
- _frame_interval_checker->feed (frame_time, afr);
+ _frame_interval_checker->feed(time, afr);
if (_frame_interval_checker->guess() == FrameIntervalChecker::PROBABLY_NOT_3D && vft == VideoFrameType::THREE_D) {
boost::throw_exception (
DecodeError(
@@ -91,94 +80,54 @@ VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> im
}
}
- Frame frame;
- Eyes eyes = Eyes::BOTH;
- if (!_position) {
- /* This is the first data we have received since initialisation or seek. Set
- the position based on the frame that was given. After this first time
- we just count frames, since (as with audio) it seems that ContentTimes
- are unreliable from FFmpegDecoder. They are much better than audio times
- but still we get the occasional one which is duplicated. In this case
- ffmpeg seems to carry on regardless, processing the video frame as normal.
- If we drop the frame with the duplicated timestamp we obviously lose sync.
- */
-
- if (vft == VideoFrameType::THREE_D_ALTERNATE) {
- frame = decoder_frame / 2;
- eyes = (decoder_frame % 2) ? Eyes::RIGHT : Eyes::LEFT;
- } else {
- frame = decoder_frame;
- if (vft == VideoFrameType::THREE_D) {
- auto j2k = dynamic_pointer_cast<const J2KImageProxy>(image);
- /* At the moment only DCP decoders producers VideoFrameType::THREE_D, so only the J2KImageProxy
- * knows which eye it is.
- */
- if (j2k && j2k->eye()) {
- eyes = j2k->eye().get() == dcp::Eye::LEFT ? Eyes::LEFT : Eyes::RIGHT;
- }
- }
- }
-
- _position = ContentTime::from_frames (frame, afr);
- } else {
- if (vft == VideoFrameType::THREE_D) {
- auto j2k = dynamic_pointer_cast<const J2KImageProxy>(image);
- if (j2k && j2k->eye()) {
- if (j2k->eye() == dcp::Eye::LEFT) {
- frame = _position->frames_round(afr) + 1;
- eyes = Eyes::LEFT;
- } else {
- frame = _position->frames_round(afr);
- eyes = Eyes::RIGHT;
- }
- } else {
- /* This should not happen; see above */
- frame = _position->frames_round(afr) + 1;
- }
- } else if (vft == VideoFrameType::THREE_D_ALTERNATE) {
- DCPOMATIC_ASSERT (_last_emitted_eyes);
- if (_last_emitted_eyes.get() == Eyes::RIGHT) {
- frame = _position->frames_round(afr) + 1;
- eyes = Eyes::LEFT;
- } else {
- frame = _position->frames_round(afr);
- eyes = Eyes::RIGHT;
- }
- } else {
- frame = _position->frames_round(afr) + 1;
- }
- }
-
switch (vft) {
case VideoFrameType::TWO_D:
+ Data(ContentVideo(image, time, Eyes::BOTH, Part::WHOLE));
+ break;
case VideoFrameType::THREE_D:
- Data (ContentVideo (image, frame, eyes, Part::WHOLE));
+ {
+ auto eyes = Eyes::LEFT;
+ auto j2k = dynamic_pointer_cast<const J2KImageProxy>(image);
+ if (j2k && j2k->eye()) {
+ eyes = *j2k->eye() == dcp::Eye::LEFT ? Eyes::LEFT : Eyes::RIGHT;
+ }
+
+ Data(ContentVideo(image, time, eyes, Part::WHOLE));
break;
+ }
case VideoFrameType::THREE_D_ALTERNATE:
{
- Data (ContentVideo (image, frame, eyes, Part::WHOLE));
+ Eyes eyes;
+ if (_last_emitted_eyes) {
+ eyes = _last_emitted_eyes.get() == Eyes::LEFT ? Eyes::RIGHT : Eyes::LEFT;
+ } else {
+ /* We don't know what eye this frame is, so just guess */
+ auto frame = time.frames_round(_content->video_frame_rate().get_value_or(24));
+ eyes = (frame % 2) ? Eyes::RIGHT : Eyes::LEFT;
+ }
+ Data(ContentVideo(image, time, eyes, Part::WHOLE));
_last_emitted_eyes = eyes;
break;
}
case VideoFrameType::THREE_D_LEFT_RIGHT:
- Data (ContentVideo (image, frame, Eyes::LEFT, Part::LEFT_HALF));
- Data (ContentVideo (image, frame, Eyes::RIGHT, Part::RIGHT_HALF));
+ Data(ContentVideo(image, time, Eyes::LEFT, Part::LEFT_HALF));
+ Data(ContentVideo(image, time, Eyes::RIGHT, Part::RIGHT_HALF));
break;
case VideoFrameType::THREE_D_TOP_BOTTOM:
- Data (ContentVideo (image, frame, Eyes::LEFT, Part::TOP_HALF));
- Data (ContentVideo (image, frame, Eyes::RIGHT, Part::BOTTOM_HALF));
+ Data(ContentVideo(image, time, Eyes::LEFT, Part::TOP_HALF));
+ Data(ContentVideo(image, time, Eyes::RIGHT, Part::BOTTOM_HALF));
break;
case VideoFrameType::THREE_D_LEFT:
- Data (ContentVideo (image, frame, Eyes::LEFT, Part::WHOLE));
+ Data(ContentVideo(image, time, Eyes::LEFT, Part::WHOLE));
break;
case VideoFrameType::THREE_D_RIGHT:
- Data (ContentVideo (image, frame, Eyes::RIGHT, Part::WHOLE));
+ Data(ContentVideo(image, time, Eyes::RIGHT, Part::WHOLE));
break;
default:
DCPOMATIC_ASSERT (false);
}
- _position = ContentTime::from_frames (frame, afr);
+ _position = time;
}
diff --git a/src/lib/video_decoder.h b/src/lib/video_decoder.h
index f6ee17425..b609404c4 100644
--- a/src/lib/video_decoder.h
+++ b/src/lib/video_decoder.h
@@ -60,7 +60,7 @@ public:
}
void seek () override;
- void emit (std::shared_ptr<const Film> film, std::shared_ptr<const ImageProxy>, Frame frame);
+ void emit(std::shared_ptr<const Film> film, std::shared_ptr<const ImageProxy>, dcpomatic::ContentTime time);
boost::signals2::signal<void (ContentVideo)> Data;
diff --git a/src/lib/video_encoder.cc b/src/lib/video_encoder.cc
new file mode 100644
index 000000000..590dc7471
--- /dev/null
+++ b/src/lib/video_encoder.cc
@@ -0,0 +1,64 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "video_encoder.h"
+
+
+using std::shared_ptr;
+using boost::optional;
+
+
+VideoEncoder::VideoEncoder(shared_ptr<const Film> film, Writer& writer)
+ : _film(film)
+ , _writer(writer)
+ , _history(200)
+{
+
+}
+
+
+void
+VideoEncoder::encode(shared_ptr<PlayerVideo>, dcpomatic::DCPTime time)
+{
+ _last_player_video_time = time;
+}
+
+
+/** @return Number of video frames that have been queued for encoding */
+int
+VideoEncoder::video_frames_enqueued() const
+{
+ if (!_last_player_video_time) {
+ return 0;
+ }
+
+ return _last_player_video_time->frames_floor(_film->video_frame_rate());
+}
+
+
+/** @return an estimate of the current number of frames we are encoding per second,
+ * if known.
+ */
+optional<float>
+VideoEncoder::current_encoding_rate() const
+{
+ return _history.rate();
+}
diff --git a/src/lib/video_encoder.h b/src/lib/video_encoder.h
new file mode 100644
index 000000000..8cc33ef8a
--- /dev/null
+++ b/src/lib/video_encoder.h
@@ -0,0 +1,69 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_VIDEO_ENCODER_H
+#define DCPOMATIC_VIDEO_ENCODER_H
+
+
+#include "dcpomatic_time.h"
+#include "event_history.h"
+#include "film.h"
+#include "player_video.h"
+
+
+class Writer;
+
+
+class VideoEncoder
+{
+public:
+ VideoEncoder(std::shared_ptr<const Film> film, Writer& writer);
+ virtual ~VideoEncoder() {}
+
+ VideoEncoder(VideoEncoder const&) = delete;
+ VideoEncoder& operator=(VideoEncoder const&) = delete;
+
+ /** Called to indicate that a processing run is about to begin */
+ virtual void begin() {}
+
+ /** Called to pass a bit of video to be encoded as the next DCP frame */
+ virtual void encode(std::shared_ptr<PlayerVideo> pv, dcpomatic::DCPTime time);
+
+ virtual void pause() = 0;
+ virtual void resume() = 0;
+
+ /** Called when a processing run has finished */
+ virtual void end() = 0;
+
+ int video_frames_enqueued() const;
+ boost::optional<float> current_encoding_rate() const;
+
+protected:
+ /** Film that we are encoding */
+ std::shared_ptr<const Film> _film;
+ Writer& _writer;
+ EventHistory _history;
+ boost::optional<dcpomatic::DCPTime> _last_player_video_time;
+};
+
+
+#endif
+
diff --git a/src/lib/video_encoding.cc b/src/lib/video_encoding.cc
new file mode 100644
index 000000000..de68c6ae9
--- /dev/null
+++ b/src/lib/video_encoding.cc
@@ -0,0 +1,58 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "dcpomatic_assert.h"
+#include "video_encoding.h"
+
+
+using std::string;
+
+
+string
+video_encoding_to_string(VideoEncoding encoding)
+{
+ switch (encoding) {
+ case VideoEncoding::JPEG2000:
+ return "jpeg2000";
+ case VideoEncoding::MPEG2:
+ return "mpeg2";
+ case VideoEncoding::COUNT:
+ DCPOMATIC_ASSERT(false);
+ }
+
+ DCPOMATIC_ASSERT(false);
+}
+
+
+VideoEncoding
+video_encoding_from_string(string const& encoding)
+{
+ if (encoding == "jpeg2000") {
+ return VideoEncoding::JPEG2000;
+ }
+
+ if (encoding == "mpeg2") {
+ return VideoEncoding::MPEG2;
+ }
+
+ DCPOMATIC_ASSERT(false);
+}
+
diff --git a/src/lib/video_encoding.h b/src/lib/video_encoding.h
new file mode 100644
index 000000000..7c240f06f
--- /dev/null
+++ b/src/lib/video_encoding.h
@@ -0,0 +1,42 @@
+/*
+ Copyright (C) 2024 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_VIDEO_ENCODING_H
+#define DCPOMATIC_VIDEO_ENCODING_H
+
+
+#include <string>
+
+
+enum class VideoEncoding
+{
+ JPEG2000,
+ MPEG2,
+ COUNT
+};
+
+
+std::string video_encoding_to_string(VideoEncoding encoding);
+VideoEncoding video_encoding_from_string(std::string const& encoding);
+
+
+#endif
+
diff --git a/src/lib/video_mxf_content.cc b/src/lib/video_mxf_content.cc
index 9adca5a2d..ded81e6bf 100644
--- a/src/lib/video_mxf_content.cc
+++ b/src/lib/video_mxf_content.cc
@@ -19,25 +19,26 @@
*/
-#include "video_mxf_examiner.h"
-#include "video_mxf_content.h"
-#include "video_content.h"
-#include "job.h"
-#include "film.h"
#include "compose.hpp"
+#include "film.h"
+#include "job.h"
+#include "video_content.h"
+#include "video_mxf_content.h"
+#include "video_mxf_examiner.h"
#include <asdcp/KM_log.h>
-#include <dcp/mono_picture_asset.h>
-#include <dcp/stereo_picture_asset.h>
#include <dcp/exceptions.h>
+#include <dcp/mono_j2k_picture_asset.h>
+#include <dcp/stereo_j2k_picture_asset.h>
#include <libxml++/libxml++.h>
#include "i18n.h"
using std::list;
-using std::string;
-using std::shared_ptr;
using std::make_shared;
+using std::shared_ptr;
+using std::string;
+using boost::optional;
using namespace dcpomatic;
@@ -48,8 +49,8 @@ VideoMXFContent::VideoMXFContent (boost::filesystem::path path)
}
-VideoMXFContent::VideoMXFContent (cxml::ConstNodePtr node, int version)
- : Content (node)
+VideoMXFContent::VideoMXFContent(cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version)
+ : Content(node, film_directory)
{
video = VideoContent::from_xml (this, node, version, VideoRange::FULL);
}
@@ -61,7 +62,7 @@ VideoMXFContent::valid_mxf (boost::filesystem::path path)
Kumu::DefaultLogSink().UnsetFilterFlag(Kumu::LOG_ALLOW_ALL);
try {
- dcp::MonoPictureAsset mp (path);
+ dcp::MonoJ2KPictureAsset mp(path);
return true;
} catch (dcp::MXFFileError& e) {
@@ -71,7 +72,7 @@ VideoMXFContent::valid_mxf (boost::filesystem::path path)
try {
Kumu::DefaultLogSink().SetFilterFlag(0);
- dcp::StereoPictureAsset sp (path);
+ dcp::StereoJ2KPictureAsset sp (path);
return true;
} catch (dcp::MXFFileError& e) {
@@ -121,11 +122,11 @@ VideoMXFContent::identifier () const
void
-VideoMXFContent::as_xml (xmlpp::Node* node, bool with_paths) const
+VideoMXFContent::as_xml(xmlpp::Element* element, bool with_paths, PathBehaviour path_behaviour, optional<boost::filesystem::path> film_directory) const
{
- node->add_child("Type")->add_child_text("VideoMXF");
- Content::as_xml (node, with_paths);
- video->as_xml (node);
+ cxml::add_text_child(element, "Type", "VideoMXF");
+ Content::as_xml(element, with_paths, path_behaviour, film_directory);
+ video->as_xml(element);
}
diff --git a/src/lib/video_mxf_content.h b/src/lib/video_mxf_content.h
index 5a04c3da9..0def6008c 100644
--- a/src/lib/video_mxf_content.h
+++ b/src/lib/video_mxf_content.h
@@ -26,7 +26,7 @@ class VideoMXFContent : public Content
{
public:
VideoMXFContent (boost::filesystem::path path);
- VideoMXFContent (cxml::ConstNodePtr node, int version);
+ VideoMXFContent (cxml::ConstNodePtr node, boost::optional<boost::filesystem::path> film_directory, int version);
std::shared_ptr<VideoMXFContent> shared_from_this () {
return std::dynamic_pointer_cast<VideoMXFContent>(Content::shared_from_this());
@@ -40,7 +40,14 @@ public:
std::string summary () const override;
std::string technical_summary () const override;
std::string identifier () const override;
- void as_xml (xmlpp::Node* node, bool with_paths) const override;
+
+ void as_xml(
+ xmlpp::Element* element,
+ bool with_paths,
+ PathBehaviour path_behaviour,
+ boost::optional<boost::filesystem::path> film_directory
+ ) const override;
+
dcpomatic::DCPTime full_length (std::shared_ptr<const Film> film) const override;
dcpomatic::DCPTime approximate_length () const override;
void add_properties (std::shared_ptr<const Film> film, std::list<UserProperty>& p) const override;
diff --git a/src/lib/video_mxf_decoder.cc b/src/lib/video_mxf_decoder.cc
index 40d3a461a..3d1ed7f4e 100644
--- a/src/lib/video_mxf_decoder.cc
+++ b/src/lib/video_mxf_decoder.cc
@@ -24,10 +24,10 @@
#include "video_mxf_content.h"
#include "j2k_image_proxy.h"
#include "frame_interval_checker.h"
-#include <dcp/mono_picture_asset.h>
-#include <dcp/mono_picture_asset_reader.h>
-#include <dcp/stereo_picture_asset.h>
-#include <dcp/stereo_picture_asset_reader.h>
+#include <dcp/mono_j2k_picture_asset.h>
+#include <dcp/mono_j2k_picture_asset_reader.h>
+#include <dcp/stereo_j2k_picture_asset.h>
+#include <dcp/stereo_j2k_picture_asset_reader.h>
#include <dcp/exceptions.h>
@@ -44,7 +44,7 @@ VideoMXFDecoder::VideoMXFDecoder (shared_ptr<const Film> film, shared_ptr<const
video = make_shared<VideoDecoder>(this, content);
try {
- auto mono = make_shared<dcp::MonoPictureAsset>(_content->path(0));
+ auto mono = make_shared<dcp::MonoJ2KPictureAsset>(_content->path(0));
_mono_reader = mono->start_read ();
_mono_reader->set_check_hmac (false);
_size = mono->size ();
@@ -55,7 +55,7 @@ VideoMXFDecoder::VideoMXFDecoder (shared_ptr<const Film> film, shared_ptr<const
/* maybe it's stereo */
}
- auto stereo = make_shared<dcp::StereoPictureAsset>(_content->path(0));
+ auto stereo = make_shared<dcp::StereoJ2KPictureAsset>(_content->path(0));
_stereo_reader = stereo->start_read ();
_stereo_reader->set_check_hmac (false);
_size = stereo->size ();
@@ -76,18 +76,18 @@ VideoMXFDecoder::pass ()
video->emit (
film(),
std::make_shared<J2KImageProxy>(_mono_reader->get_frame(frame), _size, AV_PIX_FMT_XYZ12LE, optional<int>()),
- frame
+ _next
);
} else {
video->emit (
film(),
std::make_shared<J2KImageProxy>(_stereo_reader->get_frame(frame), _size, dcp::Eye::LEFT, AV_PIX_FMT_XYZ12LE, optional<int>()),
- frame
+ _next
);
video->emit (
film(),
std::make_shared<J2KImageProxy>(_stereo_reader->get_frame(frame), _size, dcp::Eye::RIGHT, AV_PIX_FMT_XYZ12LE, optional<int>()),
- frame
+ _next
);
}
diff --git a/src/lib/video_mxf_decoder.h b/src/lib/video_mxf_decoder.h
index 774e269c6..16d8b112e 100644
--- a/src/lib/video_mxf_decoder.h
+++ b/src/lib/video_mxf_decoder.h
@@ -20,8 +20,8 @@
#include "decoder.h"
-#include <dcp/mono_picture_asset_reader.h>
-#include <dcp/stereo_picture_asset_reader.h>
+#include <dcp/mono_j2k_picture_asset_reader.h>
+#include <dcp/stereo_j2k_picture_asset_reader.h>
class VideoMXFContent;
@@ -42,7 +42,7 @@ private:
/** Time of next thing to return from pass */
dcpomatic::ContentTime _next;
- std::shared_ptr<dcp::MonoPictureAssetReader> _mono_reader;
- std::shared_ptr<dcp::StereoPictureAssetReader> _stereo_reader;
+ std::shared_ptr<dcp::MonoJ2KPictureAssetReader> _mono_reader;
+ std::shared_ptr<dcp::StereoJ2KPictureAssetReader> _stereo_reader;
dcp::Size _size;
};
diff --git a/src/lib/video_mxf_examiner.cc b/src/lib/video_mxf_examiner.cc
index 7a05f3369..276664a14 100644
--- a/src/lib/video_mxf_examiner.cc
+++ b/src/lib/video_mxf_examiner.cc
@@ -21,8 +21,8 @@
#include "video_mxf_content.h"
#include "video_mxf_examiner.h"
#include <dcp/exceptions.h>
-#include <dcp/mono_picture_asset.h>
-#include <dcp/stereo_picture_asset.h>
+#include <dcp/mono_j2k_picture_asset.h>
+#include <dcp/stereo_j2k_picture_asset.h>
using std::shared_ptr;
using boost::optional;
@@ -30,7 +30,7 @@ using boost::optional;
VideoMXFExaminer::VideoMXFExaminer (shared_ptr<const VideoMXFContent> content)
{
try {
- _asset.reset (new dcp::MonoPictureAsset (content->path(0)));
+ _asset = std::make_shared<dcp::MonoJ2KPictureAsset>(content->path(0));
} catch (dcp::MXFFileError& e) {
/* maybe it's stereo */
} catch (dcp::ReadError& e) {
@@ -38,7 +38,7 @@ VideoMXFExaminer::VideoMXFExaminer (shared_ptr<const VideoMXFContent> content)
}
if (!_asset) {
- _asset.reset (new dcp::StereoPictureAsset (content->path(0)));
+ _asset = std::make_shared<dcp::StereoJ2KPictureAsset>(content->path(0));
}
}
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 37b8e4ccb..971085046 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -30,6 +30,7 @@
#include "dcpomatic_log.h"
#include "film.h"
#include "film_util.h"
+#include "frame_info.h"
#include "job.h"
#include "log.h"
#include "ratio.h"
@@ -39,11 +40,11 @@
#include "version.h"
#include "writer.h"
#include <dcp/cpl.h>
+#include <dcp/mono_mpeg2_picture_frame.h>
#include <dcp/locale_convert.h>
#include <dcp/raw_convert.h>
-#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_file_asset.h>
-#include <dcp/reel_subtitle_asset.h>
+#include <dcp/reel_text_asset.h>
#include <cerrno>
#include <cfloat>
#include <set>
@@ -77,9 +78,10 @@ using namespace dcpomatic;
/** @param weak_job Job to report progress to, or 0.
* @param text_only true to enable only the text (subtitle/ccap) parts of the writer.
*/
-Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, bool text_only)
- : WeakConstFilm (weak_film)
+Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, boost::filesystem::path output_dir, bool text_only)
+ : WeakConstFilm(weak_film)
, _job(weak_job)
+ , _output_dir(output_dir)
/* These will be reset to sensible values when J2KEncoder is created */
, _maximum_frames_in_memory (8)
, _maximum_queue_size (8)
@@ -90,7 +92,7 @@ Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, bool text
int reel_index = 0;
auto const reels = film()->reels();
for (auto p: reels) {
- _reels.push_back (ReelWriter(weak_film, p, job, reel_index++, reels.size(), text_only));
+ _reels.push_back(ReelWriter(weak_film, p, job, reel_index++, reels.size(), text_only, _output_dir));
}
_last_written.resize (reels.size());
@@ -100,7 +102,7 @@ Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, bool text
*/
_audio_reel = _reels.begin ();
_subtitle_reel = _reels.begin ();
- for (auto i: film()->closed_caption_tracks()) {
+ for (auto i: film()->closed_text_tracks()) {
_caption_reels[i] = _reels.begin ();
}
_atmos_reel = _reels.begin ();
@@ -172,6 +174,13 @@ Writer::write (shared_ptr<const Data> encoded, Frame frame, Eyes eyes)
}
+void
+Writer::write(shared_ptr<dcp::MonoMPEG2PictureFrame> image, Frame frame)
+{
+ _reels[video_reel(frame)].write(image);
+}
+
+
bool
Writer::can_repeat (Frame frame) const
{
@@ -233,11 +242,7 @@ Writer::fake_write (Frame frame, Eyes eyes)
QueueItem qi;
qi.type = QueueItem::Type::FAKE;
-
- {
- shared_ptr<InfoFileHandle> info_file = film()->info_file_handle(_reels[reel].period(), true);
- qi.size = _reels[reel].read_frame_info(info_file, frame_in_reel, eyes).size;
- }
+ qi.info = J2KFrameInfo(film()->info_file_handle(_reels[reel].period(), true), frame_in_reel, eyes);
DCPOMATIC_ASSERT((film()->three_d() && eyes != Eyes::BOTH) || (!film()->three_d() && eyes == Eyes::BOTH));
@@ -411,7 +416,7 @@ try
if (i.type == QueueItem::Type::FULL) {
LOG_WARNING (N_("- type FULL, frame %1, eyes %2"), i.frame, (int) i.eyes);
} else {
- LOG_WARNING (N_("- type FAKE, size %1, frame %2, eyes %3"), i.size, i.frame, (int) i.eyes);
+ LOG_WARNING (N_("- type FAKE, size %1, frame %2, eyes %3"), i.info.size, i.frame, (int) i.eyes);
}
}
}
@@ -442,7 +447,7 @@ try
break;
case QueueItem::Type::FAKE:
LOG_DEBUG_ENCODE (N_("Writer FAKE-writes %1"), qi.frame);
- reel.fake_write (qi.size);
+ reel.fake_write(qi.info);
++_fake_written;
break;
case QueueItem::Type::REPEAT:
@@ -583,9 +588,8 @@ Writer::calculate_digests ()
}
-/** @param output_dcp Path to DCP folder to write */
void
-Writer::finish (boost::filesystem::path output_dcp)
+Writer::finish()
{
if (_thread.joinable()) {
LOG_GENERAL_NC ("Terminating writer thread");
@@ -596,12 +600,12 @@ Writer::finish (boost::filesystem::path output_dcp)
for (auto& reel: _reels) {
write_hanging_text(reel);
- reel.finish(output_dcp);
+ reel.finish(_output_dir);
}
LOG_GENERAL_NC ("Writing XML");
- dcp::DCP dcp (output_dcp);
+ dcp::DCP dcp(_output_dir);
auto cpl = make_shared<dcp::CPL>(
film()->dcp_name(),
@@ -616,7 +620,7 @@ Writer::finish (boost::filesystem::path output_dcp)
/* Add reels */
for (auto& i: _reels) {
- cpl->add(i.create_reel(_reel_assets, output_dcp, _have_subtitles, _have_closed_captions));
+ cpl->add(i.create_reel(_reel_assets, _output_dir, _have_subtitles, _have_closed_captions));
}
/* Add metadata */
@@ -718,12 +722,12 @@ Writer::finish (boost::filesystem::path output_dcp)
N_("Wrote %1 FULL, %2 FAKE, %3 REPEAT, %4 pushed to disk"), _full_written, _fake_written, _repeat_written, _pushed_to_disk
);
- write_cover_sheet (output_dcp);
+ write_cover_sheet();
}
void
-Writer::write_cover_sheet (boost::filesystem::path output_dcp)
+Writer::write_cover_sheet()
{
auto const cover = film()->file("COVER_SHEET.txt");
dcp::File file(cover, "w");
@@ -756,7 +760,7 @@ Writer::write_cover_sheet (boost::filesystem::path output_dcp)
boost::uintmax_t size = 0;
for (
- auto i = dcp::filesystem::recursive_directory_iterator(output_dcp);
+ auto i = dcp::filesystem::recursive_directory_iterator(_output_dir);
i != dcp::filesystem::recursive_directory_iterator();
++i) {
if (dcp::filesystem::is_regular_file(i->path())) {
@@ -940,19 +944,21 @@ Writer::write (ReferencedReelAsset asset)
{
_reel_assets.push_back (asset);
- if (dynamic_pointer_cast<dcp::ReelSubtitleAsset>(asset.asset)) {
- _have_subtitles = true;
- } else if (auto ccap = dynamic_pointer_cast<dcp::ReelClosedCaptionAsset>(asset.asset)) {
- /* This feels quite fragile. We have a referenced reel and want to know if it's
- * part of a given closed-caption track so that we can fill if it has any
- * missing reels. I guess for that purpose almost any DCPTextTrack values are
- * fine so long as they are consistent.
- */
- DCPTextTrack track;
- track.name = ccap->annotation_text().get_value_or("");
- track.language = dcp::LanguageTag(ccap->language().get_value_or("en-US"));
- if (_have_closed_captions.find(track) == _have_closed_captions.end()) {
- _have_closed_captions.insert(track);
+ if (auto text_asset = dynamic_pointer_cast<dcp::ReelTextAsset>(asset.asset)) {
+ if (is_open(text_asset->type())) {
+ _have_subtitles = true;
+ } else {
+ /* This feels quite fragile. We have a referenced reel and want to know if it's
+ * part of a given closed-caption track so that we can fill if it has any
+ * missing reels. I guess for that purpose almost any DCPTextTrack values are
+ * fine so long as they are consistent.
+ */
+ DCPTextTrack track;
+ track.name = text_asset->annotation_text().get_value_or("");
+ track.language = dcp::LanguageTag(text_asset->language().get_value_or("en-US"));
+ if (_have_closed_captions.find(track) == _have_closed_captions.end()) {
+ _have_closed_captions.insert(track);
+ }
}
}
}
diff --git a/src/lib/writer.h b/src/lib/writer.h
index f0f1fe69a..3e93c9b7b 100644
--- a/src/lib/writer.h
+++ b/src/lib/writer.h
@@ -38,6 +38,8 @@
#include "types.h"
#include "weak_film.h"
#include <dcp/atmos_frame.h>
+#include <dcp/frame_info.h>
+#include <dcp/mono_mpeg2_picture_frame.h>
#include <boost/thread.hpp>
#include <boost/thread/condition.hpp>
#include <list>
@@ -75,8 +77,8 @@ public:
/** encoded data for FULL */
std::shared_ptr<const dcp::Data> encoded;
- /** size of data for FAKE */
- int size = 0;
+ /** info for FAKE */
+ dcp::J2KFrameInfo info;
/** reel index */
size_t reel = 0;
/** frame index within the reel */
@@ -104,7 +106,7 @@ bool operator== (QueueItem const & a, QueueItem const & b);
class Writer : public ExceptionStore, public WeakConstFilm
{
public:
- Writer (std::weak_ptr<const Film>, std::weak_ptr<Job>, bool text_only = false);
+ Writer(std::weak_ptr<const Film>, std::weak_ptr<Job>, boost::filesystem::path output_dir, bool text_only = false);
~Writer ();
Writer (Writer const &) = delete;
@@ -123,7 +125,8 @@ public:
void write (std::vector<std::shared_ptr<dcpomatic::Font>> fonts);
void write (ReferencedReelAsset asset);
void write (std::shared_ptr<const dcp::AtmosFrame> atmos, dcpomatic::DCPTime time, AtmosMetadata metadata);
- void finish (boost::filesystem::path output_dcp);
+ void write (std::shared_ptr<dcp::MonoMPEG2PictureFrame> image, Frame frame);
+ void finish();
void set_encoder_threads (int threads);
@@ -139,7 +142,7 @@ private:
bool have_sequenced_image_at_queue_head ();
size_t video_reel (int frame) const;
void set_digest_progress(Job* job, int id, int64_t done, int64_t size);
- void write_cover_sheet (boost::filesystem::path output_dcp);
+ void write_cover_sheet();
void calculate_referenced_digests(std::function<void (int64_t, int64_t)> set_progress);
void write_hanging_text (ReelWriter& reel);
void calculate_digests ();
@@ -151,6 +154,7 @@ private:
std::map<DCPTextTrack, std::vector<ReelWriter>::iterator> _caption_reels;
std::vector<ReelWriter>::iterator _atmos_reel;
+ boost::filesystem::path _output_dir;
/** our thread */
boost::thread _thread;
/** true if our thread should finish */
diff --git a/src/lib/wscript b/src/lib/wscript
index 87a1ca787..dfe3ce487 100644
--- a/src/lib/wscript
+++ b/src/lib/wscript
@@ -49,7 +49,7 @@ sources = """
text_decoder.cc
case_insensitive_sorter.cc
check_content_job.cc
- cinema.cc
+ cinema_list.cc
cinema_sound_processor.cc
change_signaller.cc
collator.cc
@@ -59,6 +59,7 @@ sources = """
content_factory.cc
combine_dcp_job.cc
copy_dcp_details_to_film.cc
+ cpu_j2k_encoder_thread.cc
create_cli.cc
crop.cc
cross_common.cc
@@ -67,9 +68,9 @@ sources = """
dcp_content.cc
dcp_content_type.cc
dcp_decoder.cc
- dcp_encoder.cc
dcp_examiner.cc
dcp_digest_file.cc
+ dcp_film_encoder.cc
dcp_subtitle.cc
dcp_subtitle_content.cc
dcp_subtitle_decoder.cc
@@ -84,11 +85,11 @@ sources = """
decoder_part.cc
digester.cc
dkdm_recipient.cc
+ dkdm_recipient_list.cc
dkdm_wrapper.cc
dolby_cp750.cc
email.cc
empty.cc
- encoder.cc
encode_server.cc
encode_server_finder.cc
encoded_log_entry.cc
@@ -98,6 +99,7 @@ sources = """
examine_ffmpeg_subtitles_job.cc
exceptions.cc
export_config.cc
+ frame_info.cc
file_group.cc
file_log.cc
filter_graph.cc
@@ -106,14 +108,15 @@ sources = """
ffmpeg_audio_stream.cc
ffmpeg_content.cc
ffmpeg_decoder.cc
- ffmpeg_encoder.cc
ffmpeg_examiner.cc
ffmpeg_file_encoder.cc
+ ffmpeg_film_encoder.cc
ffmpeg_image_proxy.cc
ffmpeg_stream.cc
ffmpeg_subtitle_stream.cc
ffmpeg_wrapper.cc
film.cc
+ film_encoder.cc
film_util.cc
filter.cc
font.cc
@@ -124,6 +127,8 @@ sources = """
frame_rate_change.cc
guess_crop.cc
hints.cc
+ http_server.cc
+ id.cc
internet.cc
image.cc
image_content.cc
@@ -134,10 +139,13 @@ sources = """
image_png.cc
image_proxy.cc
image_store.cc
+ internal_player_server.cc
j2k_image_proxy.cc
job.cc
job_manager.cc
j2k_encoder.cc
+ j2k_encoder_thread.cc
+ j2k_sync_encoder_thread.cc
json_server.cc
kdm_cli.cc
kdm_recipient.cc
@@ -150,6 +158,7 @@ sources = """
maths_util.cc
memory_util.cc
mid_side_decoder.cc
+ mpeg2_encoder.cc
named_channel.cc
overlaps.cc
pixel_quanta.cc
@@ -162,7 +171,9 @@ sources = """
reel_writer.cc
referenced_reel_asset.cc
release_notes.cc
+ remembered_asset.cc
render_text.cc
+ remote_j2k_encoder_thread.cc
resampler.cc
resolution.cc
rgba.cc
@@ -178,12 +189,15 @@ sources = """
state.cc
spl.cc
spl_entry.cc
+ sqlite_statement.cc
+ sqlite_table.cc
+ sqlite_transaction.cc
string_log_entry.cc
string_text_file.cc
string_text_file_content.cc
string_text_file_decoder.cc
subtitle_analysis.cc
- subtitle_encoder.cc
+ subtitle_film_encoder.cc
territory_type.cc
text_ring_buffers.cc
text_type.cc
@@ -202,9 +216,12 @@ sources = """
upmixer_b.cc
usl.cc
util.cc
+ variant.cc
verify_dcp_job.cc
video_content.cc
video_decoder.cc
+ video_encoder.cc
+ video_encoding.cc
video_filter_graph.cc
video_filter_graph_set.cc
video_frame_type.cc
@@ -230,7 +247,7 @@ def build(bld):
BOOST_FILESYSTEM BOOST_THREAD BOOST_DATETIME BOOST_SIGNALS2 BOOST_REGEX
SAMPLERATE POSTPROC TIFF SSH DCP CXML GLIB LZMA XML++
CURL ZIP BZ2 FONTCONFIG PANGOMM CAIROMM XMLSEC SUB ICU NETTLE PNG JPEG LEQM_NRT
- LIBZ
+ LIBZ SQLITE3
"""
if bld.env.TARGET_OSX:
@@ -244,6 +261,9 @@ def build(bld):
if bld.env.TARGET_LINUX:
obj.uselib += ' POLKIT'
+ if bld.env.ENABLE_GROK:
+ obj.source += ' grok_j2k_encoder_thread.cc'
+
if bld.env.TARGET_WINDOWS_64 or bld.env.TARGET_WINDOWS_32:
obj.uselib += ' WINSOCK2 DBGHELP SHLWAPI MSWSOCK BOOST_LOCALE SETUPAPI OLE32 UUID'
obj.source += ' cross_windows.cc'