JobManager* JobManager::_instance = 0;
JobManager::JobManager ()
- : _last_active_jobs (false)
+ : _terminate (false)
+ , _last_active_jobs (false)
+ , _scheduler (new boost::thread (boost::bind (&JobManager::scheduler, this)))
{
- boost::thread (boost::bind (&JobManager::scheduler, this));
+
+}
+
+JobManager::~JobManager ()
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ _terminate = true;
+ }
+
+ if (_scheduler->joinable ()) {
+ _scheduler->join ();
+ }
}
shared_ptr<Job>
{
boost::mutex::scoped_lock lm (_mutex);
+ if (_terminate) {
+ return;
+ }
+
for (list<shared_ptr<Job> >::iterator i = _jobs.begin(); i != _jobs.end(); ++i) {
if (!(*i)->finished ()) {
#include <list>
#include <boost/thread/mutex.hpp>
+#include <boost/thread.hpp>
#include <boost/signals2.hpp>
class Job;
friend void ::wait_for_jobs ();
JobManager ();
+ ~JobManager ();
void scheduler ();
mutable boost::mutex _mutex;
std::list<boost::shared_ptr<Job> > _jobs;
+ bool _terminate;
bool _last_active_jobs;
+ boost::thread* _scheduler;
static JobManager* _instance;
};
if (!create) {
return shared_ptr<Resampler> ();
}
+
+ _film->log()->log (
+ String::compose (
+ "Creating new resampler for %1 to %2 with %3 channels", c->content_audio_frame_rate(), c->output_audio_frame_rate(), c->audio_channels()
+ )
+ );
shared_ptr<Resampler> r (new Resampler (c->content_audio_frame_rate(), c->output_audio_frame_rate(), c->audio_channels()));
_resamplers[c] = r;
#include "resampler.h"
#include "audio_buffers.h"
#include "exceptions.h"
+#include "compose.hpp"
#include "i18n.h"
);
if (resampled_frames < 0) {
- throw EncodeError (_("could not run sample-rate converter"));
+ char buf[256];
+ av_strerror (resampled_frames, buf, sizeof(buf));
+ throw EncodeError (String::compose (_("could not run sample-rate converter for %1 samples (%2) (%3)"), in->frames(), resampled_frames, buf));
}
resampled->set_frames (resampled_frames);