Fix tests.
authorCarl Hetherington <cth@carlh.net>
Fri, 21 Jun 2013 11:52:50 +0000 (12:52 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 21 Jun 2013 11:52:50 +0000 (12:52 +0100)
src/lib/job.cc
src/lib/job.h
src/lib/player.cc
src/lib/ui_signaller.h
test/test.cc

index 4969c4099c8aae60a4e7c22db6618ded9c8a1c93..080d1eaf6018a5588c9d9f0c31a63c894585a4a1 100644 (file)
@@ -27,6 +27,7 @@
 #include "job.h"
 #include "util.h"
 #include "cross.h"
+#include "ui_signaller.h"
 
 #include "i18n.h"
 
@@ -170,8 +171,11 @@ Job::set_state (State s)
        boost::mutex::scoped_lock lm (_state_mutex);
        _state = s;
 
-       if (_state == FINISHED_OK || _state == FINISHED_ERROR) {
+       if (_state == FINISHED_OK || _state == FINISHED_ERROR || _state == FINISHED_CANCELLED) {
                _ran_for = elapsed_time ();
+               if (ui_signaller) {
+                       ui_signaller->emit (boost::bind (boost::ref (Finished)));
+               }
        }
 }
 
index 5a4775180586e7dbed363c6e4ac1bc3bb06ae97b..791a9101b24bed0ca792049cf5bd24123b4c89a8 100644 (file)
@@ -71,7 +71,7 @@ public:
        void descend (float);
        float overall_progress () const;
 
-       /** Emitted by the JobManagerView from the UI thread */
+       /** Emitted from the UI thread when the job is finished */
        boost::signals2::signal<void()> Finished;
 
 protected:
index c05897c23b02adfc64d233c88d900ff14264a749..cd1c54d5bd466e78834d36d87c10476e180e6410 100644 (file)
@@ -42,6 +42,8 @@ using boost::shared_ptr;
 using boost::weak_ptr;
 using boost::dynamic_pointer_cast;
 
+#define DEBUG_PLAYER 1
+
 struct Piece
 {
        Piece (shared_ptr<Content> c, shared_ptr<Decoder> d)
@@ -52,6 +54,30 @@ struct Piece
        shared_ptr<Content> content;
        shared_ptr<Decoder> decoder;
 };
+       
+
+#ifdef DEBUG_PLAYER
+std::ostream& operator<<(std::ostream& s, Piece const & p)
+{
+       if (dynamic_pointer_cast<NullContent> (p.content)) {
+               if (dynamic_pointer_cast<SilenceDecoder> (p.decoder)) {
+                       s << "\tsilence    ";
+               } else {
+                       s << "\tblack      ";
+               }
+       } else if (dynamic_pointer_cast<FFmpegContent> (p.content)) {
+               s << "\tffmpeg     ";
+       } else if (dynamic_pointer_cast<ImageMagickContent> (p.content)) {
+               s << "\timagemagick";
+       } else if (dynamic_pointer_cast<SndfileContent> (p.content)) {
+               s << "\tsndfile    ";
+       }
+       
+       s << " at " << p.content->start() << " until " << p.content->end();
+       
+       return s;
+}
+#endif 
 
 Player::Player (shared_ptr<const Film> f, shared_ptr<const Playlist> p)
        : _film (f)
@@ -332,6 +358,13 @@ Player::setup_pieces ()
        } else if (audio_pos < video_pos) {
                add_silent_piece (audio_pos, video_pos - audio_pos);
        }
+
+#ifdef DEBUG_PLAYER
+       cout << "=== Player setup:\n";
+       for (list<shared_ptr<Piece> >::iterator i = _pieces.begin(); i != _pieces.end(); ++i) {
+               cout << *(i->get()) << "\n";
+       }
+#endif 
 }
 
 void
index 428ab698f1d3028f05c42705bb1ad76787120ba1..73db8bff85d1b67b78c5e5c4704322ad1acc5528 100644 (file)
@@ -60,7 +60,10 @@ public:
        }
 
        /** This should wake the UI and make it call ui_idle() */
-       virtual void wake_ui () = 0;
+       virtual void wake_ui () {
+               /* This is only a sensible implementation when there is no GUI... */
+               ui_idle ();
+       }
 
 private:
        /** A io_service which is used as the conduit for messages */
index b33c06be4443830691cc80234de91d225c6483d0..29a7fad940aad345cfbf8ff9300d1447e42166ab 100644 (file)
@@ -41,6 +41,7 @@
 #include "ffmpeg_decoder.h"
 #include "sndfile_decoder.h"
 #include "dcp_content_type.h"
+#include "ui_signaller.h"
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE dcpomatic_test
 #include <boost/test/unit_test.hpp>
@@ -67,6 +68,8 @@ struct TestConfig
                Config::instance()->set_default_dci_metadata (DCIMetadata ());
                Config::instance()->set_default_container (0);
                Config::instance()->set_default_dcp_content_type (0);
+
+               ui_signaller = new UISignaller ();
        }
 };