summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-06-21 12:52:50 +0100
committerCarl Hetherington <cth@carlh.net>2013-06-21 12:52:50 +0100
commit01791aac0b11e9f296cd31a7803e287203bd8355 (patch)
tree04e200b8765d06f483476211f62341178ccb013e /src
parent8db8de91e2a5489da345fae7544753f4cb2f5ab4 (diff)
Fix tests.
Diffstat (limited to 'src')
-rw-r--r--src/lib/job.cc6
-rw-r--r--src/lib/job.h2
-rw-r--r--src/lib/player.cc33
-rw-r--r--src/lib/ui_signaller.h5
4 files changed, 43 insertions, 3 deletions
diff --git a/src/lib/job.cc b/src/lib/job.cc
index 4969c4099..080d1eaf6 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -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)));
+ }
}
}
diff --git a/src/lib/job.h b/src/lib/job.h
index 5a4775180..791a9101b 100644
--- a/src/lib/job.h
+++ b/src/lib/job.h
@@ -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:
diff --git a/src/lib/player.cc b/src/lib/player.cc
index c05897c23..cd1c54d5b 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -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
diff --git a/src/lib/ui_signaller.h b/src/lib/ui_signaller.h
index 428ab698f..73db8bff8 100644
--- a/src/lib/ui_signaller.h
+++ b/src/lib/ui_signaller.h
@@ -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 */