More player debugging for butler video-full states.
[dcpomatic.git] / src / tools / dcpomatic_player.cc
index 32e5b16d691bcefeb331e16a50f5a66a991accd7..6e4f9960c167feb5d71db5ccd258b5d26dce2829 100644 (file)
@@ -53,6 +53,7 @@
 #include "lib/lock_file_checker.h"
 #include "lib/ffmpeg_content.h"
 #include "lib/dcpomatic_log.h"
+#include "lib/file_log.h"
 #include <dcp/dcp.h>
 #include <dcp/raw_convert.h>
 #include <dcp/exceptions.h>
@@ -147,7 +148,7 @@ public:
 #endif
 
                _config_changed_connection = Config::instance()->Changed.connect (boost::bind (&DOMFrame::config_changed, this, _1));
-               update_from_config ();
+               update_from_config (Config::PLAYER_DEBUG_LOG);
 
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_open, this), ID_file_open);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_add_ov, this), ID_file_add_ov);
@@ -184,7 +185,6 @@ public:
                _viewer->set_dcp_decode_reduction (Config::instance()->decode_reduction ());
                _viewer->PlaybackPermitted.connect (bind(&DOMFrame::playback_permitted, this));
                _viewer->Started.connect (bind(&DOMFrame::playback_started, this, _1));
-               _viewer->Seeked.connect (bind(&DOMFrame::playback_seeked, this, _1));
                _viewer->Stopped.connect (bind(&DOMFrame::playback_stopped, this, _1));
                _info = new PlayerInformation (_overall_panel, _viewer);
                setup_main_sizer (Config::instance()->player_mode());
@@ -288,13 +288,6 @@ public:
 
        void playback_started (DCPTime time)
        {
-               optional<boost::filesystem::path> log = Config::instance()->player_log_file();
-               if (!log) {
-                       return;
-               }
-
-               FILE* f = fopen_boost(*log, "a");
-
                /* XXX: this only logs the first piece of content; probably should be each piece? */
 
                shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent>(_film->content().front());
@@ -308,40 +301,26 @@ public:
                        }
                        DCPOMATIC_ASSERT (playing_cpl);
 
-                       fprintf (
-                               f,
-                               "%s playback-started %s %s %s\n",
-                               dcp::LocalTime().as_string().c_str(),
-                               time.timecode(_film->video_frame_rate()).c_str(),
-                               dcp->directories().front().string().c_str(),
-                               playing_cpl->annotation_text().c_str()
+                       _controls->log (
+                               wxString::Format(
+                                       "playback-started %s %s %s",
+                                       time.timecode(_film->video_frame_rate()).c_str(),
+                                       dcp->directories().front().string().c_str(),
+                                       playing_cpl->annotation_text().c_str()
+                                       )
                                );
                }
 
                shared_ptr<FFmpegContent> ffmpeg = dynamic_pointer_cast<FFmpegContent>(_film->content().front());
                if (ffmpeg) {
-                       fprintf (
-                               f,
-                               "%s playback-started %s %s\n",
-                               dcp::LocalTime().as_string().c_str(),
-                               time.timecode(_film->video_frame_rate()).c_str(),
-                               ffmpeg->path(0).string().c_str()
+                       _controls->log (
+                               wxString::Format(
+                                       "playback-started %s %s",
+                                       time.timecode(_film->video_frame_rate()).c_str(),
+                                       ffmpeg->path(0).string().c_str()
+                                       )
                                );
                }
-
-               fclose (f);
-       }
-
-       void playback_seeked (DCPTime time)
-       {
-               optional<boost::filesystem::path> log = Config::instance()->player_log_file();
-               if (!log) {
-                       return;
-               }
-
-               FILE* f = fopen_boost(*log, "a");
-               fprintf (f, "%s playback-seeked %s\n", dcp::LocalTime().as_string().c_str(), time.timecode(_film->video_frame_rate()).c_str());
-               fclose (f);
        }
 
        void playback_stopped (DCPTime time)
@@ -354,14 +333,7 @@ public:
                }
 #endif
 
-               optional<boost::filesystem::path> log = Config::instance()->player_log_file();
-               if (!log) {
-                       return;
-               }
-
-               FILE* f = fopen_boost(*log, "a");
-               fprintf (f, "%s playback-stopped %s\n", dcp::LocalTime().as_string().c_str(), time.timecode(_film->video_frame_rate()).c_str());
-               fclose (f);
+               _controls->log (wxString::Format("playback-stopped %s", time.timecode(_film->video_frame_rate()).c_str()));
        }
 
        void set_decode_reduction (optional<int> reduction)
@@ -855,10 +827,10 @@ private:
                                );
                }
 
-               update_from_config ();
+               update_from_config (prop);
        }
 
-       void update_from_config ()
+       void update_from_config (Config::Property prop)
        {
                for (int i = 0; i < _history_items; ++i) {
                        delete _file_menu->Remove (ID_file_history + i);
@@ -889,6 +861,16 @@ private:
                }
 
                _history_items = history.size ();
+
+               if (prop == Config::PLAYER_DEBUG_LOG) {
+                       optional<boost::filesystem::path> p = Config::instance()->player_debug_log_file();
+                       if (p) {
+                               dcpomatic_log.reset (new FileLog(*p));
+                       } else {
+                               dcpomatic_log.reset (new NullLog());
+                       }
+                       dcpomatic_log->set_types (LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR | LogEntry::TYPE_DEBUG_PLAYER);
+               }
        }
 
        void set_menu_sensitivity ()