summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-06-27 01:16:37 +0100
committerCarl Hetherington <cth@carlh.net>2013-06-27 01:16:37 +0100
commit814f799b280cbf8e73f61ad283a199e211ed0c5e (patch)
tree0e2f32e61ab7f82c14af2558716c7a9cad277196 /src/lib
parent605355f3335d189f6243be42bf254df2ba0442f2 (diff)
Various bits of backported 1.0
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ffmpeg_decoder.cc10
-rw-r--r--src/lib/ffmpeg_decoder.h5
-rw-r--r--src/lib/job.cc6
-rw-r--r--src/lib/ui_signaller.h5
4 files changed, 24 insertions, 2 deletions
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index cad247e5a..c2143b949 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -61,6 +61,8 @@ using boost::optional;
using boost::dynamic_pointer_cast;
using libdcp::Size;
+boost::mutex FFmpegDecoder::_mutex;
+
FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, DecodeOptions o)
: Decoder (f, o)
, VideoDecoder (f, o)
@@ -83,6 +85,8 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr<Film> f, DecodeOptions o)
FFmpegDecoder::~FFmpegDecoder ()
{
+ boost::mutex::scoped_lock lm (_mutex);
+
if (_audio_codec_context) {
avcodec_close (_audio_codec_context);
}
@@ -157,6 +161,8 @@ FFmpegDecoder::setup_general ()
void
FFmpegDecoder::setup_video ()
{
+ boost::mutex::scoped_lock lm (_mutex);
+
_video_codec_context = _format_context->streams[_video_stream]->codec;
_video_codec = avcodec_find_decoder (_video_codec_context->codec_id);
@@ -172,6 +178,8 @@ FFmpegDecoder::setup_video ()
void
FFmpegDecoder::setup_audio ()
{
+ boost::mutex::scoped_lock lm (_mutex);
+
if (!_audio_stream) {
return;
}
@@ -194,6 +202,8 @@ FFmpegDecoder::setup_audio ()
void
FFmpegDecoder::setup_subtitle ()
{
+ boost::mutex::scoped_lock lm (_mutex);
+
if (!_subtitle_stream || _subtitle_stream->id() >= int (_format_context->nb_streams)) {
return;
}
diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h
index 0c89b973d..198f4294e 100644
--- a/src/lib/ffmpeg_decoder.h
+++ b/src/lib/ffmpeg_decoder.h
@@ -107,6 +107,9 @@ public:
private:
+ /* No copy construction */
+ FFmpegDecoder (FFmpegDecoder const &);
+
bool pass ();
bool do_seek (double p, bool, bool);
PixelFormat pixel_format () const;
@@ -145,4 +148,6 @@ private:
std::list<boost::shared_ptr<FilterGraph> > _filter_graphs;
boost::mutex _filter_graphs_mutex;
+
+ static boost::mutex _mutex;
};
diff --git a/src/lib/job.cc b/src/lib/job.cc
index 9a5812fa7..8bb43a91f 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"
@@ -172,8 +173,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/ui_signaller.h b/src/lib/ui_signaller.h
index 221bcbe95..0d19660bf 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 */