Supporter.
[dcpomatic.git] / src / wx / film_viewer.cc
index 2416c6776841690fee63786d52b20725a578d8fd..de12564d7756b61730b5ad5f9a54d90f529fbbeb 100644 (file)
@@ -50,12 +50,13 @@ using std::cout;
 using std::list;
 using std::bad_alloc;
 using std::make_pair;
+using std::exception;
 using boost::shared_ptr;
 using boost::dynamic_pointer_cast;
 using boost::weak_ptr;
 using dcp::Size;
 
-FilmViewer::FilmViewer (shared_ptr<Film> f, wxWindow* p)
+FilmViewer::FilmViewer (wxWindow* p)
        : wxPanel (p)
        , _panel (new wxPanel (this))
        , _outline_content (new wxCheckBox (this, wxID_ANY, _("Outline content")))
@@ -109,8 +110,8 @@ FilmViewer::FilmViewer (shared_ptr<Film> f, wxWindow* p)
        _back_button->Bind    (wxEVT_COMMAND_BUTTON_CLICKED,       boost::bind (&FilmViewer::back_clicked,    this));
        _forward_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED,       boost::bind (&FilmViewer::forward_clicked, this));
 
-       set_film (f);
-
+       set_film (shared_ptr<Film> ());
+       
        JobManager::instance()->ActiveJobsChanged.connect (
                bind (&FilmViewer::active_jobs_changed, this, _1)
                );
@@ -151,6 +152,8 @@ FilmViewer::set_film (shared_ptr<Film> f)
 
        calculate_sizes ();
        get (_position, _last_get_accurate);
+
+       setup_sensitivity ();
 }
 
 void
@@ -167,10 +170,16 @@ FilmViewer::get (DCPTime p, bool accurate)
                return;
        }
 
-       list<shared_ptr<PlayerVideo> > pvf = _player->get_video (p, accurate);
+       list<shared_ptr<PlayerVideo> > pvf;
+       try {
+               pvf = _player->get_video (p, accurate);
+       } catch (exception& e) {
+               error_dialog (this, wxString::Format (_("Could not get video for view (%s)"), std_to_wx(e.what()).data()));
+       }
+       
        if (!pvf.empty ()) {
                try {
-                       _frame = pvf.front()->image (true);
+                       _frame = pvf.front()->image (PIX_FMT_RGB24, true);
                        _frame = _frame->scale (_frame->size(), Scaler::from_id ("fastbilinear"), PIX_FMT_RGB24, false);
                        _position = pvf.front()->time ();
                        _inter_position = pvf.front()->inter_position ();