summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-02-12 00:06:13 +0100
committerCarl Hetherington <cth@carlh.net>2024-02-12 00:06:13 +0100
commit6f9adc9f7215a362d23e45b861017638ec67c723 (patch)
tree81c07fa6ddc8dca328c269bdfc8f2534c46ccd2c
parenteade5cc8657f51d1d768b705936e918f8d1f53ee (diff)
parenteb04ac87ccfa046dd342ca7b9e6478c3bdcabbba (diff)
Merge branch 'main' into v2.17.x
-rw-r--r--cscript4
-rw-r--r--platform/osx/make_dmg.sh2
-rw-r--r--src/lib/analyse_audio_job.cc13
-rw-r--r--src/lib/analyse_audio_job.h3
-rw-r--r--src/lib/audio_analyser.cc10
-rw-r--r--src/lib/audio_analyser.h2
-rw-r--r--src/lib/dcp_examiner.cc3
-rw-r--r--src/lib/ecinema_kdm_data.h32
-rw-r--r--src/lib/player.cc12
-rw-r--r--src/lib/player.h2
-rw-r--r--src/lib/po/sl_SI.po68
-rw-r--r--src/lib/string_text_file.cc12
-rw-r--r--src/tools/dcpomatic.cc19
-rw-r--r--src/tools/po/sl_SI.po39
-rw-r--r--src/wx/about_dialog.cc20
-rw-r--r--src/wx/audio_dialog.h5
-rw-r--r--src/wx/po/sl_SI.po58
-rw-r--r--src/wx/recipient_dialog.cc5
-rw-r--r--src/wx/supporters.cc2
-rw-r--r--test/audio_analysis_test.cc25
-rw-r--r--test/audio_ring_buffers_test.cc2
m---------test/data0
-rw-r--r--test/subtitle_font_id_test.cc11
-rw-r--r--wscript17
24 files changed, 181 insertions, 185 deletions
diff --git a/cscript b/cscript
index f1339e050..4bc3e5674 100644
--- a/cscript
+++ b/cscript
@@ -507,8 +507,8 @@ def dependencies(target, options):
# Use distro-provided FFmpeg on Arch
deps = []
- deps.append(('libdcp', 'v1.8.94'))
- deps.append(('libsub', 'v1.6.46'))
+ deps.append(('libdcp', 'v1.8.95'))
+ deps.append(('libsub', 'v1.6.47'))
deps.append(('leqm-nrt', '30dcaea1373ac62fba050e02ce5b0c1085797a23'))
deps.append(('rtaudio', 'f619b76'))
# We get our OpenSSL libraries from the environment, but we
diff --git a/platform/osx/make_dmg.sh b/platform/osx/make_dmg.sh
index 91983438e..161261faa 100644
--- a/platform/osx/make_dmg.sh
+++ b/platform/osx/make_dmg.sh
@@ -62,6 +62,8 @@ cat <<EOF > entitlements.plist
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
+ <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
+ <true/>
</dict>
</plist>
EOF
diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc
index ca0f49f57..a6ce5dcc8 100644
--- a/src/lib/analyse_audio_job.cc
+++ b/src/lib/analyse_audio_job.cc
@@ -47,12 +47,16 @@ using namespace boost::placeholders;
#endif
-/** @param from_zero true to analyse audio from time 0 in the playlist, otherwise begin at Playlist::start */
-AnalyseAudioJob::AnalyseAudioJob (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool from_zero)
+/** @param whole_film true to analyse the whole film' audio (i.e. start from time 0 and use processors), false
+ * to analyse just the single piece of content in the playlist (i.e. start from Playlist::start() and do not
+ * use processors.
+ */
+AnalyseAudioJob::AnalyseAudioJob (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool whole_film)
: Job (film)
- , _analyser (film, playlist, from_zero, boost::bind(&Job::set_progress, this, _1, false))
+ , _analyser(film, playlist, whole_film, boost::bind(&Job::set_progress, this, _1, false))
, _playlist (playlist)
, _path (film->audio_analysis_path(playlist))
+ , _whole_film(whole_film)
{
LOG_DEBUG_AUDIO_ANALYSIS_NC("AnalyseAudioJob::AnalyseAudioJob");
}
@@ -89,6 +93,9 @@ AnalyseAudioJob::run ()
player->set_fast ();
player->set_play_referenced ();
player->Audio.connect (bind(&AudioAnalyser::analyse, &_analyser, _1, _2));
+ if (!_whole_film) {
+ player->set_disable_audio_processor();
+ }
bool has_any_audio = false;
for (auto c: _playlist->content()) {
diff --git a/src/lib/analyse_audio_job.h b/src/lib/analyse_audio_job.h
index 2b749da6b..afd52c304 100644
--- a/src/lib/analyse_audio_job.h
+++ b/src/lib/analyse_audio_job.h
@@ -50,7 +50,7 @@ class Filter;
class AnalyseAudioJob : public Job
{
public:
- AnalyseAudioJob (std::shared_ptr<const Film>, std::shared_ptr<const Playlist>, bool from_zero);
+ AnalyseAudioJob(std::shared_ptr<const Film>, std::shared_ptr<const Playlist>, bool whole_film);
~AnalyseAudioJob ();
std::string name () const override;
@@ -70,6 +70,7 @@ private:
std::shared_ptr<const Playlist> _playlist;
/** playlist's audio analysis path when the job was created */
boost::filesystem::path _path;
+ bool _whole_film;
static const int _num_points;
};
diff --git a/src/lib/audio_analyser.cc b/src/lib/audio_analyser.cc
index df76932de..6e7b9fa86 100644
--- a/src/lib/audio_analyser.cc
+++ b/src/lib/audio_analyser.cc
@@ -52,7 +52,7 @@ using namespace dcpomatic;
static auto constexpr num_points = 1024;
-AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool from_zero, std::function<void (float)> set_progress)
+AudioAnalyser::AudioAnalyser(shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool whole_film, std::function<void (float)> set_progress)
: _film (film)
, _playlist (playlist)
, _set_progress (set_progress)
@@ -71,7 +71,7 @@ AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Play
_current = std::vector<AudioPoint>(_film->audio_channels());
- if (!from_zero) {
+ if (!whole_film) {
_start = _playlist->start().get_value_or(DCPTime());
}
@@ -87,7 +87,9 @@ AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Play
};
auto content = _playlist->content();
- if (content.size() == 1 && content[0]->audio) {
+ if (whole_film) {
+ _leqm_channels = film->audio_channels();
+ } else {
_leqm_channels = 0;
for (auto channel: content[0]->audio->mapping().mapped_output_channels()) {
/* This means that if, for example, a file only maps C we will
@@ -96,8 +98,6 @@ AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Play
*/
_leqm_channels = std::min(film->audio_channels(), channel + 1);
}
- } else {
- _leqm_channels = film->audio_channels();
}
/* XXX: is this right? Especially for more than 5.1? */
diff --git a/src/lib/audio_analyser.h b/src/lib/audio_analyser.h
index 4708f517a..3d40f8026 100644
--- a/src/lib/audio_analyser.h
+++ b/src/lib/audio_analyser.h
@@ -39,7 +39,7 @@ class Playlist;
class AudioAnalyser
{
public:
- AudioAnalyser (std::shared_ptr<const Film> film, std::shared_ptr<const Playlist> playlist, bool from_zero, std::function<void (float)> set_progress);
+ AudioAnalyser(std::shared_ptr<const Film> film, std::shared_ptr<const Playlist> playlist, bool whole_film, std::function<void (float)> set_progress);
AudioAnalyser (AudioAnalyser const&) = delete;
AudioAnalyser& operator= (AudioAnalyser const&) = delete;
diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc
index d9c904720..72eb82860 100644
--- a/src/lib/dcp_examiner.cc
+++ b/src/lib/dcp_examiner.cc
@@ -237,9 +237,6 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
for (auto const& font: asset->font_data()) {
_fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>(font.first, font.second)});
}
- if (asset->font_data().empty()) {
- _fonts.push_back({reel_index, asset->id(), make_shared<dcpomatic::Font>("")});
- }
}
}
diff --git a/src/lib/ecinema_kdm_data.h b/src/lib/ecinema_kdm_data.h
deleted file mode 100644
index 9ca3b24d0..000000000
--- a/src/lib/ecinema_kdm_data.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- Copyright (C) 2019 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/>.
-
-*/
-
-/* ECinema KDM data block contains:
- - key (16 bytes)
- - (optional) not-valid-before time (25 bytes)
- - (optional) not-valid-after time (25 bytes)
-*/
-
-#define ECINEMA_KDM_KEY 0
-#define ECINEMA_KDM_KEY_LENGTH 16
-#define ECINEMA_KDM_NOT_VALID_BEFORE (ECINEMA_KDM_KEY_LENGTH)
-#define ECINEMA_KDM_NOT_VALID_BEFORE_LENGTH 25
-#define ECINEMA_KDM_NOT_VALID_AFTER (ECINEMA_KDM_NOT_VALID_BEFORE + ECINEMA_KDM_NOT_VALID_BEFORE_LENGTH)
-#define ECINEMA_KDM_NOT_VALID_AFTER_LENGTH 25
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 888c56aec..3402cc12b 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -189,6 +189,7 @@ Player::Player(Player&& other)
, _silent(std::move(other._silent))
, _active_texts(std::move(other._active_texts))
, _audio_processor(std::move(other._audio_processor))
+ , _disable_audio_processor(other._disable_audio_processor)
, _playback_length(other._playback_length.load())
, _subtitle_alignment(other._subtitle_alignment)
{
@@ -228,6 +229,7 @@ Player::operator=(Player&& other)
_silent = std::move(other._silent);
_active_texts = std::move(other._active_texts);
_audio_processor = std::move(other._audio_processor);
+ _disable_audio_processor = other._disable_audio_processor;
_playback_length = other._playback_length.load();
_subtitle_alignment = other._subtitle_alignment;
@@ -1191,7 +1193,7 @@ Player::audio (weak_ptr<Piece> weak_piece, AudioStreamPtr stream, ContentAudio c
/* Process */
- if (_audio_processor) {
+ if (_audio_processor && !_disable_audio_processor) {
content_audio.audio = _audio_processor->run(content_audio.audio, film->audio_channels());
}
@@ -1589,3 +1591,11 @@ Player::signal_change(ChangeType type, int property)
Change(type, property, false);
}
+
+/** Must be called from the same thread that calls ::pass() */
+void
+Player::set_disable_audio_processor()
+{
+ _disable_audio_processor = true;
+}
+
diff --git a/src/lib/player.h b/src/lib/player.h
index d4fae9fc4..2502ae536 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -105,6 +105,7 @@ public:
void set_fast ();
void set_play_referenced ();
void set_dcp_decode_reduction (boost::optional<int> reduction);
+ void set_disable_audio_processor();
boost::optional<dcpomatic::DCPTime> content_time_to_dcp (std::shared_ptr<const Content> content, dcpomatic::ContentTime t) const;
boost::optional<dcpomatic::ContentTime> dcp_to_content_time (std::shared_ptr<const Content> content, dcpomatic::DCPTime t) const;
@@ -242,6 +243,7 @@ private:
EnumIndexedVector<ActiveText, TextType> _active_texts;
std::shared_ptr<AudioProcessor> _audio_processor;
+ bool _disable_audio_processor = false;
boost::atomic<dcpomatic::DCPTime> _playback_length;
diff --git a/src/lib/po/sl_SI.po b/src/lib/po/sl_SI.po
index 7a1cec1ca..82888f76b 100644
--- a/src/lib/po/sl_SI.po
+++ b/src/lib/po/sl_SI.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-12 00:54+0100\n"
-"PO-Revision-Date: 2023-09-14 22:18+0200\n"
+"PO-Revision-Date: 2024-02-10 16:15+0100\n"
"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
"Language-Team: \n"
"Language: sl_SI\n"
@@ -208,17 +208,17 @@ msgstr "; %1 preostalo; zaključevanje ob %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!"
+"<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 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 "
@@ -929,9 +929,8 @@ msgid "Event"
msgstr "Dogodek"
#: src/lib/hints.cc:397
-#, fuzzy
msgid "Examining audio"
-msgstr "Preučevanje podnaslovov"
+msgstr "Preučevanje zvoka"
#: src/lib/hints.cc:399
msgid "Examining audio, subtitles and closed captions"
@@ -1078,7 +1077,6 @@ 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
-#, fuzzy
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 "
@@ -1086,7 +1084,7 @@ msgid ""
msgstr ""
"Na splošno je zdaj priporočljivo, da izdelujete DCP-je SMPTE, razen če imate "
"poseben razlog za uporabo Interop. Svetujemo, da vaš DCP uporablja standard "
-"SMPTE, ki ga določite na zavihku »DCP«."
+"SMPTE, kar določite na zavihku »DCP«."
#: src/lib/release_notes.cc:53
msgid ""
@@ -1231,14 +1229,13 @@ msgid "No CPLs found in DCP."
msgstr "V DCP-ju ni CPL-jev."
#: src/lib/kdm_with_metadata.cc:217
-#, fuzzy
msgid "No from address configured in the KDM Email tab of preferences"
-msgstr "Noben KDM iz naslova ni določen v nastavitvah"
+msgstr "Noben dohodni naslov ni določen v nastavitvah na zavihku e-naslova KDM"
#: src/lib/kdm_with_metadata.cc:213 src/lib/send_notification_email_job.cc:70
-#, fuzzy
msgid "No outgoing mail server configured in the Email tab of preferences"
-msgstr "Noben poštni strežnik ni določen v nastavitvah"
+msgstr ""
+"Noben odhodni poštni strežnik ni določen v nastavitvah na zavihku e-pošte"
#: src/lib/image_content.cc:131
msgid "No valid image files were found in the folder."
@@ -1309,7 +1306,7 @@ msgstr "Politika"
#: src/lib/filter.cc:106
msgid "Premultiply alpha channel"
-msgstr ""
+msgstr "Vnaprej pomnoži kanal alfa"
#: src/lib/content.cc:494
msgid "Prepared for video frame rate"
@@ -1578,7 +1575,6 @@ msgid "The certificate chain for signing is invalid (%1)"
msgstr "Veriga potrdil za podpisovanje ni veljavna (%1)"
#: src/lib/hints.cc:721
-#, 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 "
@@ -1586,14 +1582,13 @@ msgid ""
"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 in KDM-jev, "
-"vsebuje majhno napako, ki bo preprečila pravilno preverjanje veljavnosti DCP "
-"v nekaterih sistemih. Svetujemo vam, da znova ustvarite verigo potrdil za "
-"podpisovanje s klikom gumba »Ponovno izdelaj potrdila in ključ …« na strani "
-"Ključi v Nastavitvah."
+"Veriga potrdil, ki jo DCP-o-matic uporablja za podpisovanje DCP-jev in KDM-"
+"jev, vsebuje majhno napako, ki bo preprečila pravilno preverjanje "
+"veljavnosti DCP v nekaterih sistemih. Svetujemo vam, da znova ustvarite "
+"verigo potrdil za podpisovanje s klikom gumba »Ponovno izdelaj potrdila in "
+"ključ …« na strani Ključi v Nastavitvah."
#: src/lib/hints.cc:727
-#, 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 "
@@ -1642,7 +1637,6 @@ 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
-#, fuzzy
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 "
@@ -1651,7 +1645,7 @@ msgid ""
"systems support your chosen DCP rate."
msgstr ""
"Velika razlika je med hitrostjo sličic vašega DCP-ja in nekaterih vaših "
-"vsebin. To bo povzročilo predvajanje zvoka na precej nižjem ali višjem "
+"vsebin. To bo povzročilo predvajanje zvoka pri precej nižji ali višji "
"frekvenci, kot bi bilo potrebno. Svetujemo vam, da nastavite hitrost sličic "
"DCP na takšno, ki je bližje vaši vsebini, pod pogojem, da ciljni sistemi "
"projekcije podpirajo izbrano hitrost DCP."
@@ -1840,15 +1834,14 @@ msgid "Yet Another Deinterlacing Filter"
msgstr "Še en filter za razpletanje"
#: src/lib/hints.cc:199
-#, fuzzy
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 ""
"Nastavljeno imate za DCP s hitrostjo %1 sl/s. Te hitrosti sličic ne "
-"podpirajo vsi projektorji. Svetujemo vam, da spremenite hitrost sličic DCP "
-"na %2 sl/s."
+"podpirajo vsi projektorji. Svetujemo vam, da spremenite hitrost predvajanja "
+"DCP na %2 sl/s."
#: src/lib/hints.cc:183
msgid ""
@@ -2181,12 +2174,3 @@ msgstr "neznano"
#: src/lib/video_content.cc:516
msgid "video frames"
msgstr "video sličice"
-
-#~ msgid "it does not have closed captions in all its reels."
-#~ msgstr "nima zaprtih napisov v vseh svojih kolutih."
-
-#~ msgid "it does not have open subtitles in all its reels."
-#~ msgstr "nima odprtih podnaslovov v vseh svojih kolutih."
-
-#~ msgid "it does not have sound in all its reels."
-#~ msgstr "nima zvoka v vseh svojih kolutih."
diff --git a/src/lib/string_text_file.cc b/src/lib/string_text_file.cc
index 348ccd1d5..9b43b35a6 100644
--- a/src/lib/string_text_file.cc
+++ b/src/lib/string_text_file.cc
@@ -25,6 +25,7 @@
#include "string_text_file_content.h"
#include <dcp/file.h>
#include <sub/collect.h>
+#include <sub/exceptions.h>
#include <sub/ssa_reader.h>
#include <sub/stl_binary_reader.h>
#include <sub/subrip_reader.h>
@@ -105,9 +106,14 @@ StringTextFile::StringTextFile (shared_ptr<const StringTextFileContent> content)
if (ext == ".srt") {
try {
reader.reset(new sub::SubripReader(utf8.get()));
- } catch (...) {
- /* Sometimes files are have the .srt extension but are really WEBVTT */
- reader.reset(new sub::WebVTTReader(utf8.get()));
+ } catch (sub::SubripError& subrip_error) {
+ /* Sometimes files are have the .srt extension but are really WEBVTT... */
+ try {
+ reader.reset(new sub::WebVTTReader(utf8.get()));
+ } catch (sub::WebVTTHeaderError&) {
+ /* ...but in this case there isn't even a WebVTT error */
+ throw subrip_error;
+ }
}
} else if (ext == ".ssa" || ext == ".ass") {
reader.reset(new sub::SSAReader(utf8.get()));
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc
index 024422965..5333f34ae 100644
--- a/src/tools/dcpomatic.cc
+++ b/src/tools/dcpomatic.cc
@@ -1446,7 +1446,8 @@ private:
void config_changed (Config::Property what)
{
/* Instantly save any config changes when using the DCP-o-matic GUI */
- if (what == Config::CINEMAS) {
+ switch (what) {
+ case Config::CINEMAS:
try {
Config::instance()->write_cinemas();
} catch (exception& e) {
@@ -1458,7 +1459,21 @@ private:
)
);
}
- } else {
+ break;
+ case Config::DKDM_RECIPIENTS:
+ try {
+ Config::instance()->write_dkdm_recipients();
+ } catch (exception& e) {
+ error_dialog (
+ this,
+ wxString::Format (
+ _("Could not write to DKDM recipients file at %s. Your changes have not been saved."),
+ std_to_wx(Config::instance()->dkdm_recipients_file().string()).data()
+ )
+ );
+ }
+ break;
+ default:
try {
Config::instance()->write_config();
} catch (exception& e) {
diff --git a/src/tools/po/sl_SI.po b/src/tools/po/sl_SI.po
index f649c071a..1ae1b2aed 100644
--- a/src/tools/po/sl_SI.po
+++ b/src/tools/po/sl_SI.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-12 00:54+0100\n"
-"PO-Revision-Date: 2023-09-14 22:47+0200\n"
+"PO-Revision-Date: 2024-02-10 16:05+0100\n"
"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
"Language-Team: \n"
"Language: sl_SI\n"
@@ -381,7 +381,7 @@ msgstr ""
#: src/tools/dcpomatic.cc:771
msgid "Could not remove existing preferences file"
-msgstr ""
+msgstr "Obstoječe datoteke z nastavitvami ni bilo mogoče odstraniti"
#: src/tools/dcpomatic.cc:605 src/tools/dcpomatic.cc:1278
msgid "Could not save project."
@@ -1028,7 +1028,6 @@ msgstr ""
"verigo potrdil za podpisovanje DCP-jev in KDM-jev?"
#: src/tools/dcpomatic.cc:1927
-#, fuzzy
msgid ""
"The certificate chain that DCP-o-matic uses for signing DCPs and KDMs "
"contains a small error\n"
@@ -1041,8 +1040,10 @@ msgstr ""
"Veriga potrdil, ki jo DCP-o-matic uporablja za podpisovanje DCP-jev in KDM-"
"jev, vsebuje majhno\n"
"napako, ki bo preprečila pravilno validacijo DCP-jev v nekaterih sistemih. "
-"Ali želite ponovno ustvariti\n"
-"verigo potrdil za podpisovanje DCP-jev in KDM-jev?"
+"To napako je povzročila\n"
+"napaka v DCP-o-matic, ki pa je že odpravljena. Ali želite ponovno ustvariti "
+"verigo potrdil\n"
+"za podpisovanje DCP-jev in KDM-jev?"
#: src/tools/dcpomatic.cc:1886
msgid ""
@@ -1193,9 +1194,9 @@ msgstr ""
"\n"
"<tt>%s</tt>\n"
"\n"
-"<span weight=\"bold\" size=\"larger\">POMEMBNO JE,</span> da <span "
-"weight=\"bold\" size=\"larger\">DA VARNOSTNO KOPIRATE TO DATOTEKO</span>, "
-"ker če izgubite DKDM (in DCP-ji, ki jih ščitijo), bodo postali neuporabni."
+"<span weight=\"bold\" size=\"larger\">POMEMBNO JE,</span> da <span weight="
+"\"bold\" size=\"larger\">DA VARNOSTNO KOPIRATE TO DATOTEKO</span>, ker če "
+"izgubite DKDM (in DCP-ji, ki jih ščitijo), bodo postali neuporabni."
#: src/tools/dcpomatic.cc:809
msgid ""
@@ -1203,8 +1204,8 @@ msgid ""
"this DCP unless you have copies of the <tt>metadata.xml</tt> file within the "
"film and the metadata files within the DCP.\n"
"\n"
-"You should ensure that these files are <span weight=\"bold\" "
-"size=\"larger\">BACKED UP</span> if you want to make KDMs for this film."
+"You should ensure that these files are <span weight=\"bold\" size=\"larger"
+"\">BACKED UP</span> if you want to make KDMs for this film."
msgstr ""
"Izdelujete šifriran DCP. KDM-jev za ta DCP ne bo mogoče izdelati, razen če "
"imate kopije datoteke <tt>metadata.xml</tt> znotraj filma in datotek "
@@ -1259,21 +1260,3 @@ msgstr ""
"Pri pošiljanju prevodov morate vnesti veljaven e-poštni naslov, sicer vam "
"vzdrževalci DCP-o-matic ne morejo pripisati zaslug ali se obrniti na vas z "
"vprašanji."
-
-#~ msgid ""
-#~ "For some of these KDMs the recipient certificate's validity period will "
-#~ "not cover the whole of the KDM validity period. This might cause "
-#~ "problems with the KDMs."
-#~ msgstr ""
-#~ "Pri nekaterih od teh KDM-jev obdobje veljavnosti prejemnikovega potrdila "
-#~ "ne pokriva celotnega obdobja veljavnosti KDM. To lahko povzroči težave s "
-#~ "KDM-ji."
-
-#~ msgid ""
-#~ "Some KDMs would have validity periods which are completely outside the "
-#~ "recipient certificate periods. Such KDMs are very unlikely to work, so "
-#~ "will not be created."
-#~ msgstr ""
-#~ "Nekateri KDM bi imeli obdobja veljavnosti, ki so povsem zunaj obdobij "
-#~ "veljavnosti prejemnikovega potrdila. Takšni KDM najverjetneje ne bodo "
-#~ "delovali, zato ne bodo ustvarjeni."
diff --git a/src/wx/about_dialog.cc b/src/wx/about_dialog.cc
index 59760be98..8b1f8a038 100644
--- a/src/wx/about_dialog.cc
+++ b/src/wx/about_dialog.cc
@@ -232,6 +232,7 @@ AboutDialog::AboutDialog (wxWindow* parent)
tested_by.Add (wxT ("Andreas Weiss"));
tested_by.Add (wxT ("Paul Willmott"));
tested_by.Add (wxT ("Wolfgang Woehl"));
+ tested_by.Add (wxT ("Benno Zwanenburg"));
tested_by.Add (wxT ("Дима Агатов"));
add_section (_("Tested by"), tested_by);
@@ -255,7 +256,7 @@ void
AboutDialog::add_section (wxString name, wxArrayString credits)
{
static auto first = true;
- int const N = 4;
+ int const N = 3;
auto panel = new wxScrolledWindow (_notebook);
panel->SetMaxSize (wxSize (-1, 380));
@@ -263,22 +264,23 @@ AboutDialog::add_section (wxString name, wxArrayString credits)
panel->SetScrollRate (0, 32);
auto overall_sizer = new wxBoxSizer (wxHORIZONTAL);
- vector<wxSizer*> sizers;
-
- for (int i = 0; i < N; ++i) {
- sizers.push_back (new wxBoxSizer (wxVERTICAL));
- overall_sizer->Add (sizers.back (), 1, wxEXPAND | wxALL, 6);
- }
-
+ vector<wxString> strings(N);
int c = 0;
for (size_t i = 0; i < credits.Count(); ++i) {
- add_label_to_sizer (sizers[c], panel, credits[i], false);
+ strings[c] += credits[i] + wxT("\n");
++c;
if (c == N) {
c = 0;
}
}
+ for (int i = 0; i < N; ++i) {
+ auto label = new wxStaticText(panel, wxID_ANY, strings[i]);
+ auto sizer = new wxBoxSizer(wxVERTICAL);
+ sizer->Add(label);
+ overall_sizer->Add(sizer, 1, wxEXPAND | wxALL, 6);
+ }
+
panel->SetSizerAndFit (overall_sizer);
_notebook->AddPage (panel, name, first);
first = false;
diff --git a/src/wx/audio_dialog.h b/src/wx/audio_dialog.h
index f144fb485..8c2001c17 100644
--- a/src/wx/audio_dialog.h
+++ b/src/wx/audio_dialog.h
@@ -36,6 +36,11 @@ class FilmViewer;
class Film;
+/** @class AudioDialog
+ * @brief Dialog to display audio analysis.
+ *
+ * This can be used for the whole DCP, or a specific piece of content if one is passed into the constructor.
+ */
class AudioDialog : public wxDialog
{
public:
diff --git a/src/wx/po/sl_SI.po b/src/wx/po/sl_SI.po
index 43a894668..6a9291fc3 100644
--- a/src/wx/po/sl_SI.po
+++ b/src/wx/po/sl_SI.po
@@ -3,13 +3,12 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-#: src/wx/custom_scale_dialog.cc:45
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-12 00:54+0100\n"
-"PO-Revision-Date: 2023-09-14 22:45+0200\n"
+"PO-Revision-Date: 2024-02-10 16:17+0100\n"
"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
"Language-Team: \n"
"Language: sl_SI\n"
@@ -78,12 +77,11 @@ msgid "%s %s"
msgstr "%s %s"
#: src/wx/about_dialog.cc:89
-#, fuzzy
msgid ""
"(C) 2012-2024 Carl Hetherington, Terrence Meiczinger\n"
" Ole Laursen"
msgstr ""
-"(C) 2012-2023 Carl Hetherington, Terrence Meiczinger\n"
+"(C) 2012-2024 Carl Hetherington, Terrence Meiczinger\n"
" Ole Laursen"
#: src/wx/file_picker_ctrl.cc:51 src/wx/file_picker_ctrl.cc:66
@@ -719,14 +717,12 @@ msgid "Certificate downloaded"
msgstr "Preneseno potrdilo"
#: src/wx/invalid_certificate_period_dialog.cc:63
-#, fuzzy
msgid "Certificate end"
-msgstr "Veriga potrdil"
+msgstr "Konec potrdila"
#: src/wx/invalid_certificate_period_dialog.cc:55
-#, fuzzy
msgid "Certificate start"
-msgstr "Veriga potrdil"
+msgstr "Začetek potrdila"
#: src/wx/metadata_dialog.cc:298
msgid "Chain"
@@ -785,9 +781,8 @@ msgid "Christie"
msgstr "Christie"
#: src/wx/invalid_certificate_period_dialog.cc:39
-#, fuzzy
msgid "Cinema"
-msgstr "kino"
+msgstr "Kino"
#: src/wx/full_config_dialog.cc:122
msgid "Cinema and screen database file"
@@ -961,7 +956,7 @@ msgstr "Naslovnica"
#: src/wx/invalid_certificate_period_dialog.cc:98
msgid "Create KDMs anyway"
-msgstr ""
+msgstr "Vseeno ustvari KDM-je"
#: src/wx/film_name_location_dialog.cc:51
msgid "Create in folder"
@@ -1737,13 +1732,12 @@ msgid "Intermediate common name"
msgstr "Skupno ime vmesne kopije (intermediata)"
#: src/wx/metadata_dialog.cc:208
-#, fuzzy
msgid "International texted"
-msgstr "Besedilo pripombe CPL"
+msgstr "Mednarodno, z besedilom"
#: src/wx/metadata_dialog.cc:209
msgid "International textless"
-msgstr ""
+msgstr "Mednarodno, brez besedila"
#: src/wx/dcp_panel.cc:173 src/wx/full_config_dialog.cc:414
msgid "Interop"
@@ -1754,9 +1748,8 @@ msgid "Invalid DCP-o-matic export file"
msgstr "Neveljavna izvozna datoteka DCP-o-matic"
#: src/wx/invalid_certificate_period_dialog.cc:33
-#, fuzzy
msgid "Invalid certificates"
-msgstr "Prenesi potrdilo"
+msgstr "Neveljavna potrdila"
#: src/wx/colour_conversion_editor.cc:215
msgid "Inverse 2.6 gamma correction on output"
@@ -2673,9 +2666,8 @@ msgid "Scale"
msgstr "Umeri"
#: src/wx/invalid_certificate_period_dialog.cc:47
-#, fuzzy
msgid "Screen"
-msgstr "Platna"
+msgstr "Zaslon"
#: src/wx/kdm_dialog.cc:81
msgid "Screens"
@@ -2816,9 +2808,8 @@ msgid "Set project DCP settings from this DCP"
msgstr "Nastavi DCP-nastavitve projekta iz tega DCP"
#: src/wx/content_menu.cc:113
-#, fuzzy
msgid "Set project markers from this DCP"
-msgstr "Nastavi DCP-nastavitve projekta iz tega DCP"
+msgstr "Nastavi oznake projekta iz tega DCP"
#: src/wx/custom_scale_dialog.cc:42
msgid "Set ratio and fit to DCP container"
@@ -2855,11 +2846,11 @@ msgstr "Pokaži grafikon ravni zvoka ..."
#: src/wx/screens_panel.cc:763
#, c-format
msgid "Show only %d checked"
-msgstr ""
+msgstr "Pokaži le %d potrjenih"
#: src/wx/screens_panel.cc:65 src/wx/screens_panel.cc:761
msgid "Show only checked"
-msgstr ""
+msgstr "Pokaži le potrjene"
#: src/wx/text_panel.cc:170
msgid "Show subtitle area"
@@ -2903,14 +2894,12 @@ msgid "Snap"
msgstr "Pripni"
#: src/wx/invalid_certificate_period_dialog.cc:83
-#, fuzzy
msgid ""
"Some KDMs would have validity periods which are outside the recipient "
"certificate validity periods. What do you want to do?"
msgstr ""
-"Nekateri KDM bi imeli obdobja veljavnosti, ki so povsem zunaj obdobij "
-"veljavnosti prejemnikovega potrdila. Takšni KDM najverjetneje ne bodo "
-"delovali, zato ne bodo ustvarjeni."
+"Nekateri KDM bi imeli obdobja veljavnosti, ki so zunaj obdobij veljavnosti "
+"prejemnikovega potrdila. Kaj želite storiti?"
#: src/wx/verify_dcp_dialog.cc:384
msgid ""
@@ -2940,9 +2929,8 @@ msgid "Sound processor"
msgstr "Zvočni procesor"
#: src/wx/metadata_dialog.cc:207
-#, fuzzy
msgid "Specific"
-msgstr "Nedoločeno"
+msgstr "Posebno"
#: src/wx/dcp_panel.cc:150
msgid "Split by video content"
@@ -3069,7 +3057,7 @@ msgstr "Začasna različica"
#: src/wx/metadata_dialog.cc:205
msgid "Territory type"
-msgstr ""
+msgstr "Vrsta ozemlja"
#: src/wx/full_config_dialog.cc:994 src/wx/full_config_dialog.cc:997
msgid "Test email sending failed."
@@ -4239,9 +4227,8 @@ msgid "full screen"
msgstr "celozaslonsko"
#: src/wx/player_config_dialog.cc:99
-#, fuzzy
msgid "full screen with separate advanced controls"
-msgstr "celozaslonsko s kontrolniki na drugem zaslonu"
+msgstr "celozaslonsko z ločenimi naprednimi kontrolniki"
#. TRANSLATORS: this is an abbreviation for "hours"
#: src/wx/timing_panel.cc:85
@@ -4365,12 +4352,3 @@ msgstr "let"
#: src/wx/drive_wipe_warning_dialog.cc:61
msgid "yes"
msgstr "da"
-
-#~ msgid ""
-#~ "For some of these KDMs the recipient certificate's validity period will "
-#~ "not cover the whole of the KDM validity period. This might cause "
-#~ "problems with the KDMs."
-#~ msgstr ""
-#~ "Pri nekaterih od teh KDM-jev obdobje veljavnosti prejemnikovega potrdila "
-#~ "ne pokriva celotnega obdobja veljavnosti KDM. To lahko povzroči težave s "
-#~ "KDM-ji."
diff --git a/src/wx/recipient_dialog.cc b/src/wx/recipient_dialog.cc
index 1b38ea2d1..992c88362 100644
--- a/src/wx/recipient_dialog.cc
+++ b/src/wx/recipient_dialog.cc
@@ -82,7 +82,7 @@ RecipientDialog::RecipientDialog (
copy (emails.begin(), emails.end(), back_inserter (_emails));
vector<EditableListColumn> columns;
- columns.push_back (EditableListColumn(_("Address")));
+ columns.push_back(EditableListColumn(_("Address"), 400, true));
_email_list = new EditableList<string, EmailDialog> (
this, columns, bind(&RecipientDialog::get_emails, this), bind(&RecipientDialog::set_emails, this, _1), bind(&column, _1),
EditableListTitle::VISIBLE,
@@ -110,9 +110,6 @@ RecipientDialog::RecipientDialog (
_sizer->Add (s, wxGBPosition (r, 1));
++r;
- add_label_to_sizer (_sizer, this, _("Other trusted devices"), true, wxGBPosition (r, 0));
- ++r;
-
_name->Bind (wxEVT_TEXT, boost::bind (&RecipientDialog::setup_sensitivity, this));
_get_recipient_from_file->Bind (wxEVT_BUTTON, boost::bind (&RecipientDialog::get_recipient_from_file, this));
diff --git a/src/wx/supporters.cc b/src/wx/supporters.cc
index beb4d967a..fdbedde69 100644
--- a/src/wx/supporters.cc
+++ b/src/wx/supporters.cc
@@ -70,6 +70,7 @@ supported_by.Add (wxT ("Tahirih Association"));
supported_by.Add (wxT ("Cine Trianon Athens"));
supported_by.Add (wxT ("Kirk Attard"));
supported_by.Add (wxT ("Eric Audurier"));
+supported_by.Add (wxT ("Francesco De Augustinis"));
supported_by.Add (wxT ("Dylan Avery"));
supported_by.Add (wxT ("Christian Bachmayer"));
supported_by.Add (wxT ("John Bacon"));
@@ -558,6 +559,7 @@ supported_by.Add (wxT ("Inskino"));
supported_by.Add (wxT ("Bryn Mawr Film Institute"));
supported_by.Add (wxT ("IntergalacticFM"));
supported_by.Add (wxT ("20minmax International Short Film Festival"));
+supported_by.Add (wxT ("Shinya Isobe"));
supported_by.Add (wxT ("Theodore Ivanov"));
supported_by.Add (wxT ("Julien Ivanowich"));
supported_by.Add (wxT ("Denis Ivashvkevych"));
diff --git a/test/audio_analysis_test.cc b/test/audio_analysis_test.cc
index 8bdca4c32..8ded9eda9 100644
--- a/test/audio_analysis_test.cc
+++ b/test/audio_analysis_test.cc
@@ -41,6 +41,7 @@
#include "lib/ratio.h"
#include "test.h"
#include <boost/test/unit_test.hpp>
+#include <numeric>
using std::make_shared;
@@ -283,3 +284,27 @@ BOOST_AUTO_TEST_CASE(analyse_audio_with_more_channels_than_film)
BOOST_CHECK(!wait_for_jobs());
}
+
+BOOST_AUTO_TEST_CASE(analyse_audio_uses_processor_when_analysing_whole_film)
+{
+ auto sound = content_factory(TestPaths::private_data() / "betty_stereo.wav")[0];
+ auto film = new_test_film2("analyse_audio_uses_processor_when_analysing_whole_film", { sound });
+
+ auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), true);
+ JobManager::instance()->add(job);
+ BOOST_REQUIRE(!wait_for_jobs());
+
+ AudioAnalysis analysis(job->path());
+
+ BOOST_REQUIRE(analysis.channels() > 2);
+ bool centre_non_zero = false;
+ /* Make sure there's something from the mid-side decoder on the centre channel */
+ for (auto point = 0; point < analysis.points(2); ++point) {
+ if (std::abs(analysis.get_point(2, point)[AudioPoint::Type::PEAK]) > 0) {
+ centre_non_zero = true;
+ }
+ }
+
+ BOOST_CHECK(centre_non_zero);
+}
+
diff --git a/test/audio_ring_buffers_test.cc b/test/audio_ring_buffers_test.cc
index ef64f5fba..265142d53 100644
--- a/test/audio_ring_buffers_test.cc
+++ b/test/audio_ring_buffers_test.cc
@@ -30,8 +30,6 @@ using namespace dcpomatic;
#define CANARY 9999
-/* XXX: these tests don't check the timestamping in AudioRingBuffers */
-
/** Basic tests fetching the same number of channels as went in */
BOOST_AUTO_TEST_CASE (audio_ring_buffers_test1)
{
diff --git a/test/data b/test/data
-Subproject a5b12872bf034712039414fad58e7e68c068b77
+Subproject ddf878730354cdec8a802a59543591f6f943f5c
diff --git a/test/subtitle_font_id_test.cc b/test/subtitle_font_id_test.cc
index 9575868a1..bc09a9cf1 100644
--- a/test/subtitle_font_id_test.cc
+++ b/test/subtitle_font_id_test.cc
@@ -23,6 +23,7 @@
#include "lib/dcp_content.h"
#include "lib/film.h"
#include "lib/font.h"
+#include "lib/player.h"
#include "lib/text_content.h"
#include "lib/util.h"
#include <dcp/cpl.h>
@@ -291,3 +292,13 @@ BOOST_AUTO_TEST_CASE(use_first_loadfont_as_default)
BOOST_REQUIRE_EQUAL(subtitle->font_data().size(), 1U);
BOOST_CHECK(subtitle->font_data().begin()->second == dcp::ArrayData("test/data/Inconsolata-VF.ttf"));
}
+
+
+BOOST_AUTO_TEST_CASE(no_error_with_ccap_that_mentions_no_font)
+{
+ auto dcp = make_shared<DCPContent>("test/data/ccap_only");
+ auto film = new_test_film2("no_error_with_ccap_that_mentions_no_font", { dcp });
+ auto player = Player(film, film->playlist());
+ while (!player.pass()) {}
+}
+
diff --git a/wscript b/wscript
index f4e33328f..2ca54488e 100644
--- a/wscript
+++ b/wscript
@@ -80,6 +80,7 @@ def options(opt):
opt.add_option('--warnings-are-errors', action='store_true', default=False, help='build with -Werror')
opt.add_option('--wx-config', help='path to wx-config')
opt.add_option('--enable-asan', action='store_true', help='build with asan')
+ opt.add_option('--disable-more-warnings', action='store_true', default=False, help='disable some warnings raised by Xcode 15 with the 2.16 branch')
def configure(conf):
conf.load('compiler_cxx')
@@ -114,19 +115,21 @@ def configure(conf):
'-Wwrite-strings',
# getMessengerLogger() in the grok code triggers these warnings
'-Wno-nonnull',
- # These next 5 are for Xcode 15.0.1 with the v2.16.x-era
- # dependencies; maybe they aren't necessary when building
- # v2.1{7,8}.x
'-Wno-error=deprecated',
- '-Wno-deprecated-builtins',
- '-Wno-deprecated-declarations',
- '-Wno-enum-constexpr-conversion',
- '-Wno-deprecated-copy',
# I tried and failed to ignore these with _Pragma
'-Wno-ignored-qualifiers',
'-D_FILE_OFFSET_BITS=64',
'-std=c++11'])
+ if conf.options.disable_more_warnings:
+ # These are for Xcode 15.0.1 with the v2.16.x-era
+ # dependencies; maybe they aren't necessary when building
+ # v2.1{7,8}.x
+ conf.env.append_value('CXXFLAGS', ['-Wno-deprecated-builtins',
+ '-Wno-deprecated-declarations',
+ '-Wno-enum-constexpr-conversion',
+ '-Wno-deprecated-copy'])
+
if conf.options.warnings_are_errors:
conf.env.append_value('CXXFLAGS', '-Werror')