Emit no audio from DCPs if none is mapped
[dcpomatic.git] / src / wx / config_dialog.cc
index fdb7947dab6e81d04abaa950c87b1326857e4438..b4adc855e4af103398fd11a8c5a27cbc33c6a8c6 100644 (file)
@@ -27,6 +27,7 @@
 #include "static_text.h"
 #include "lib/constants.h"
 #include <dcp/file.h>
+#include <dcp/filesystem.h>
 #include <dcp/raw_convert.h>
 
 
@@ -127,6 +128,7 @@ GeneralPage::add_language_controls (wxGridBagSizer* table, int& r)
        languages.push_back (make_pair("Deutsch", "de_DE"));
        languages.push_back (make_pair("English", "en_GB"));
        languages.push_back (make_pair("Español", "es_ES"));
+       languages.push_back (make_pair("فارسی", "fa_IR"));
        languages.push_back (make_pair("Français", "fr_FR"));
        languages.push_back (make_pair("Italiano", "it_IT"));
        languages.push_back (make_pair("ქართული", "ka_KA"));
@@ -576,7 +578,7 @@ CertificateChainEditor::import_private_key ()
        if (d->ShowModal() == wxID_OK) {
                try {
                        boost::filesystem::path p (wx_to_std (d->GetPath ()));
-                       if (boost::filesystem::file_size (p) > 8192) {
+                       if (dcp::filesystem::file_size(p) > 8192) {
                                error_dialog (
                                        this,
                                        wxString::Format (_("Could not read key file; file is too long (%s)"), std_to_wx (p.string ()))
@@ -879,6 +881,14 @@ SoundPage::setup ()
        _sound_output_details->SetFont (font);
 
        RtAudio audio (DCPOMATIC_RTAUDIO_API);
+#if (RTAUDIO_VERSION_MAJOR >= 6)
+       for (auto device_id: audio.getDeviceIds()) {
+               auto dev = audio.getDeviceInfo(device_id);
+               if (dev.outputChannels > 0) {
+                       _sound_output->Append(std_to_wx(dev.name));
+               }
+       }
+#else
        for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) {
                try {
                        auto dev = audio.getDeviceInfo (i);
@@ -889,6 +899,7 @@ SoundPage::setup ()
                        /* Something went wrong so let's just ignore that device */
                }
        }
+#endif
 
        _sound->bind(&SoundPage::sound_changed, this);
        _sound_output->Bind (wxEVT_CHOICE,   bind(&SoundPage::sound_output_changed, this));
@@ -920,11 +931,15 @@ SoundPage::sound_output_changed ()
        RtAudio audio (DCPOMATIC_RTAUDIO_API);
        auto const so = get_sound_output();
        string default_device;
+#if (RTAUDIO_VERSION_MAJOR >= 6)
+       default_device = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name;
+#else
        try {
                default_device = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name;
        } catch (RtAudioError&) {
                /* Never mind */
        }
+#endif
        if (!so || *so == default_device) {
                Config::instance()->unset_sound_output ();
        } else {
@@ -947,11 +962,15 @@ SoundPage::config_changed ()
        } else {
                /* No configured output means we should use the default */
                RtAudio audio (DCPOMATIC_RTAUDIO_API);
+#if (RTAUDIO_VERSION_MAJOR >= 6)
+               configured_so = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name;
+#else
                try {
                        configured_so = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name;
                } catch (RtAudioError&) {
                        /* Probably no audio devices at all */
                }
+#endif
        }
 
        if (configured_so && current_so != configured_so) {
@@ -981,6 +1000,14 @@ SoundPage::config_changed ()
 
        int channels = 0;
        if (configured_so) {
+#if (RTAUDIO_VERSION_MAJOR >= 6)
+               for (auto device_id: audio.getDeviceIds()) {
+                       auto info = audio.getDeviceInfo(device_id);
+                       if (info.name == *configured_so && info.outputChannels > 0) {
+                               channels = info.outputChannels;
+                       }
+               }
+#else
                for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) {
                        try {
                                auto info = audio.getDeviceInfo(i);
@@ -991,6 +1018,7 @@ SoundPage::config_changed ()
                                /* Never mind */
                        }
                }
+#endif
        }
 
        _sound_output_details->SetLabel (