Barely-functioning GL playback with new arrangement.
[dcpomatic.git] / src / tools / dcpomatic_player.cc
index 6a64bd0ded4f26d80492b9fd3505c472671425b5..6bd5b36ffd1f0f61974c6b94d9de177f7a632aa3 100644 (file)
@@ -66,6 +66,9 @@
 #include <wx/preferences.h>
 #include <wx/progdlg.h>
 #include <wx/display.h>
+#ifdef __WXGTK__
+#include <X11/Xlib.h>
+#endif
 #ifdef __WXOSX__
 #include <ApplicationServices/ApplicationServices.h>
 #endif
@@ -287,6 +290,15 @@ public:
                        }
                }
 
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+               BOOST_FOREACH (shared_ptr<Content> i, _film->content()) {
+                       shared_ptr<FFmpegContent> c = dynamic_pointer_cast<FFmpegContent>(i);
+                       if (c && !c->kdm_timing_window_valid()) {
+                               ok = false;
+                       }
+               }
+#endif
+
                if (!ok) {
                        error_dialog (this, _("The KDM does not allow playback of this content at this time."));
                }
@@ -303,7 +315,7 @@ public:
 
                shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent>(_film->content().front());
                if (dcp) {
-                       DCPExaminer ex (dcp);
+                       DCPExaminer ex (dcp, true);
                        shared_ptr<dcp::CPL> playing_cpl;
                        BOOST_FOREACH (shared_ptr<dcp::CPL> i, ex.cpls()) {
                                if (!dcp->cpl() || i->id() == *dcp->cpl()) {
@@ -385,6 +397,8 @@ public:
        void reset_film (shared_ptr<Film> film = shared_ptr<Film>(new Film(optional<boost::filesystem::path>())))
        {
                _film = film;
+               _film->set_tolerant (true);
+               _film->set_audio_channels (MAX_DCP_AUDIO_CHANNELS);
                _viewer->set_film (_film);
                _controls->set_film (_film);
                _film->Change.connect (bind(&DOMFrame::film_changed, this, _1, _2));
@@ -439,7 +453,7 @@ public:
                        /* Offer a CPL menu */
                        shared_ptr<DCPContent> first = dynamic_pointer_cast<DCPContent>(_film->content().front());
                        if (first) {
-                               DCPExaminer ex (first);
+                               DCPExaminer ex (first, true);
                                int id = ID_view_cpl;
                                BOOST_FOREACH (shared_ptr<dcp::CPL> i, ex.cpls()) {
                                        wxMenuItem* j = _cpl_menu->AppendRadioItem(
@@ -455,12 +469,27 @@ public:
 
 private:
 
+       bool report_errors_from_last_job (wxWindow* parent) const
+       {
+               JobManager* jm = JobManager::instance ();
+
+               DCPOMATIC_ASSERT (!jm->get().empty());
+
+               shared_ptr<Job> last = jm->get().back();
+               if (last->finished_in_error()) {
+                       error_dialog(parent, wxString::Format(_("Could not load DCP.\n\n%s."), std_to_wx(last->error_summary()).data()), std_to_wx(last->error_details()));
+                       return false;
+               }
+
+               return true;
+       }
+
        void setup_menu (wxMenuBar* m)
        {
                _file_menu = new wxMenu;
                _file_menu->Append (ID_file_open, _("&Open...\tCtrl-O"));
                _file_add_ov = _file_menu->Append (ID_file_add_ov, _("&Add OV..."));
-               _file_add_kdm = _file_menu->Append (ID_file_add_kdm, _("&Add KDM..."));
+               _file_add_kdm = _file_menu->Append (ID_file_add_kdm, _("Add &KDM..."));
 
                _history_position = _file_menu->GetMenuItems().GetCount();
 
@@ -677,7 +706,7 @@ private:
        {
                shared_ptr<DCPContent> dcp = boost::dynamic_pointer_cast<DCPContent>(_film->content().front());
                DCPOMATIC_ASSERT (dcp);
-               DCPExaminer ex (dcp);
+               DCPExaminer ex (dcp, true);
                int id = ev.GetId() - ID_view_cpl;
                DCPOMATIC_ASSERT (id >= 0);
                DCPOMATIC_ASSERT (id < int(ex.cpls().size()));
@@ -1018,7 +1047,11 @@ public:
        App ()
                : wxApp ()
                , _frame (0)
-       {}
+       {
+#ifdef DCPOMATIC_LINUX
+               XInitThreads ();
+#endif
+       }
 
 private: