summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-05-13 23:44:54 +0100
committerCarl Hetherington <cth@carlh.net>2015-05-13 23:44:54 +0100
commit65274489101d5b5c503ea94d61d7ac5eb1372636 (patch)
tree2d11e71e33f78ef3224af436c8c93525b4135cfc
parentedecc975384bfef50418e3fb77e5c4629207ec08 (diff)
parent419c025709132e21ce948c4a6051a323f06ee61d (diff)
Merge branch '2.0' of git.carlh.net:git/dcpomatic into 2.0
-rw-r--r--cscript2
-rw-r--r--src/lib/audio_analysis.cc96
-rw-r--r--src/lib/audio_analysis.h25
-rw-r--r--src/lib/content.cc1
-rw-r--r--src/lib/ffmpeg_decoder.cc53
-rw-r--r--src/lib/ffmpeg_decoder.h2
-rw-r--r--src/lib/job.cc1
-rw-r--r--src/lib/job_manager.cc1
-rw-r--r--src/lib/server_finder.cc1
-rw-r--r--src/lib/signal_manager.cc (renamed from src/lib/ui_signaller.cc)9
-rw-r--r--src/lib/signal_manager.h (renamed from src/lib/ui_signaller.h)16
-rw-r--r--src/lib/signaller.h6
-rw-r--r--src/lib/update.cc1
-rw-r--r--src/lib/wscript2
-rw-r--r--src/tools/dcpomatic.cc8
-rw-r--r--src/tools/dcpomatic_batch.cc6
-rw-r--r--src/tools/dcpomatic_cli.cc4
-rw-r--r--src/tools/dcpomatic_create.cc10
-rw-r--r--src/wx/audio_dialog.cc9
-rw-r--r--src/wx/dolby_certificate_dialog.cc10
-rw-r--r--src/wx/doremi_certificate_dialog.cc4
-rw-r--r--src/wx/wscript2
-rw-r--r--src/wx/wx_signal_manager.cc (renamed from src/wx/wx_ui_signaller.cc)8
-rw-r--r--src/wx/wx_signal_manager.h (renamed from src/wx/wx_ui_signaller.h)12
-rw-r--r--test/test.cc10
25 files changed, 136 insertions, 163 deletions
diff --git a/cscript b/cscript
index 6a2f05355..9e284a072 100644
--- a/cscript
+++ b/cscript
@@ -206,7 +206,7 @@ def make_spec(filename, version, target):
def dependencies(target):
return (('ffmpeg-cdist', 'f69bb08'),
- ('libdcp', '8e7f9e4'),
+ ('libdcp', 'b386248'),
('libsub', 'f66b11f'))
def configure_options(target):
diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc
index ee34b0d80..73422a9be 100644
--- a/src/lib/audio_analysis.cc
+++ b/src/lib/audio_analysis.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,15 +18,17 @@
*/
#include "audio_analysis.h"
-#include "dcpomatic_assert.h"
#include "cross.h"
+#include "util.h"
+#include "raw_convert.h"
+#include <libxml++/libxml++.h>
#include <boost/filesystem.hpp>
+#include <boost/foreach.hpp>
#include <stdint.h>
-#include <inttypes.h>
#include <cmath>
-#include <cassert>
#include <cstdio>
#include <iostream>
+#include <inttypes.h>
using std::ostream;
using std::istream;
@@ -35,6 +37,7 @@ using std::vector;
using std::cout;
using std::max;
using std::list;
+using boost::shared_ptr;
AudioPoint::AudioPoint ()
{
@@ -43,14 +46,10 @@ AudioPoint::AudioPoint ()
}
}
-AudioPoint::AudioPoint (FILE* f)
+AudioPoint::AudioPoint (cxml::ConstNodePtr node)
{
- for (int i = 0; i < COUNT; ++i) {
- int n = fscanf (f, "%f", &_data[i]);
- if (n != 1) {
- _data[i] = 0;
- }
- }
+ _data[PEAK] = node->number_child<float> ("Peak");
+ _data[RMS] = node->number_child<float> ("RMS");
}
AudioPoint::AudioPoint (AudioPoint const & other)
@@ -75,14 +74,12 @@ AudioPoint::operator= (AudioPoint const & other)
}
void
-AudioPoint::write (FILE* f) const
+AudioPoint::as_xml (xmlpp::Element* parent) const
{
- for (int i = 0; i < COUNT; ++i) {
- fprintf (f, "%f\n", _data[i]);
- }
+ parent->add_child ("Peak")->add_child_text (raw_convert<string> (_data[PEAK]));
+ parent->add_child ("RMS")->add_child_text (raw_convert<string> (_data[RMS]));
}
-
AudioAnalysis::AudioAnalysis (int channels)
{
_data.resize (channels);
@@ -90,44 +87,21 @@ AudioAnalysis::AudioAnalysis (int channels)
AudioAnalysis::AudioAnalysis (boost::filesystem::path filename)
{
- FILE* f = fopen_boost (filename, "r");
- if (!f) {
- throw OpenFileError (filename);
- }
+ cxml::Document f ("AudioAnalysis");
+ f.read_file (filename);
- int channels = 0;
- fscanf (f, "%d", &channels);
- _data.resize (channels);
+ BOOST_FOREACH (cxml::NodePtr i, f.node_children ("Channel")) {
+ vector<AudioPoint> channel;
- for (int i = 0; i < channels; ++i) {
- int points;
- fscanf (f, "%d", &points);
- if (feof (f)) {
- fclose (f);
- return;
- }
-
- for (int j = 0; j < points; ++j) {
- _data[i].push_back (AudioPoint (f));
- if (feof (f)) {
- fclose (f);
- return;
- }
+ BOOST_FOREACH (cxml::NodePtr j, i->node_children ("Point")) {
+ channel.push_back (AudioPoint (j));
}
- }
- /* These may not exist in old analysis files, so be careful
- about reading them.
- */
-
- float peak;
- DCPTime::Type peak_time;
- if (fscanf (f, "%f%" SCNd64, &peak, &peak_time) == 2) {
- _peak = peak;
- _peak_time = DCPTime (peak_time);
+ _data.push_back (channel);
}
-
- fclose (f);
+
+ _peak = f.number_child<float> ("Peak");
+ _peak_time = DCPTime (f.number_child<DCPTime::Type> ("PeakTime"));
}
void
@@ -160,26 +134,20 @@ AudioAnalysis::points (int c) const
void
AudioAnalysis::write (boost::filesystem::path filename)
{
- boost::filesystem::path tmp = filename;
- tmp.replace_extension (".tmp");
-
- FILE* f = fopen_boost (tmp, "w");
- if (!f) {
- throw OpenFileError (tmp);
- }
+ shared_ptr<xmlpp::Document> doc (new xmlpp::Document);
+ xmlpp::Element* root = doc->create_root_node ("AudioAnalysis");
- fprintf (f, "%ld\n", _data.size ());
- for (vector<vector<AudioPoint> >::iterator i = _data.begin(); i != _data.end(); ++i) {
- fprintf (f, "%ld\n", i->size ());
- for (vector<AudioPoint>::iterator j = i->begin(); j != i->end(); ++j) {
- j->write (f);
+ BOOST_FOREACH (vector<AudioPoint>& i, _data) {
+ xmlpp::Element* channel = root->add_child ("Channel");
+ BOOST_FOREACH (AudioPoint& j, i) {
+ j.as_xml (channel->add_child ("Point"));
}
}
if (_peak) {
- fprintf (f, "%f%" PRId64, _peak.get (), _peak_time.get().get ());
+ root->add_child("Peak")->add_child_text (raw_convert<string> (_peak.get ()));
+ root->add_child("PeakTime")->add_child_text (raw_convert<string> (_peak_time.get().get ()));
}
- fclose (f);
- boost::filesystem::rename (tmp, filename);
+ doc->write_to_file_formatted (filename.string ());
}
diff --git a/src/lib/audio_analysis.h b/src/lib/audio_analysis.h
index 1872c57ad..9387ec896 100644
--- a/src/lib/audio_analysis.h
+++ b/src/lib/audio_analysis.h
@@ -17,21 +17,16 @@
*/
-/** @file src/lib/audio_analysis.h
- * @brief AudioAnalysis and AudioPoint classes.
- */
-
#ifndef DCPOMATIC_AUDIO_ANALYSIS_H
#define DCPOMATIC_AUDIO_ANALYSIS_H
-#include "types.h"
+#include <vector>
+#include <list>
#include <boost/filesystem.hpp>
#include <boost/optional.hpp>
-#include <vector>
+#include <libcxml/cxml.h>
+#include "types.h"
-/** @class AudioPoint
- * @brief A single point of an audio analysis for one portion of one channel.
- */
class AudioPoint
{
public:
@@ -42,11 +37,11 @@ public:
};
AudioPoint ();
- AudioPoint (FILE *);
+ AudioPoint (cxml::ConstNodePtr node);
AudioPoint (AudioPoint const &);
AudioPoint& operator= (AudioPoint const &);
- void write (FILE *) const;
+ void as_xml (xmlpp::Element *) const;
float& operator[] (int t) {
return _data[t];
@@ -56,14 +51,6 @@ private:
float _data[COUNT];
};
-/** @class AudioAnalysis
- * @brief An analysis of the audio data in a piece of AudioContent.
- *
- * This is a set of AudioPoints for each channel. The AudioPoints
- * each represent some measurement of the audio over a portion of the
- * content. For example each AudioPoint may give the RMS level of
- * a 1-minute portion of the audio.
- */
class AudioAnalysis : public boost::noncopyable
{
public:
diff --git a/src/lib/content.cc b/src/lib/content.cc
index b00ea3e57..b9e8367e1 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -24,7 +24,6 @@
#include "content.h"
#include "util.h"
#include "content_factory.h"
-#include "ui_signaller.h"
#include "exceptions.h"
#include "film.h"
#include "safe_stringstream.h"
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc
index 6122a547e..35e15a331 100644
--- a/src/lib/ffmpeg_decoder.cc
+++ b/src/lib/ffmpeg_decoder.cc
@@ -453,15 +453,43 @@ FFmpegDecoder::decode_subtitle_packet ()
AVSubtitleRect const * rect = sub.rects[0];
- if (rect->type != SUBTITLE_BITMAP) {
- throw DecodeError (_("non-bitmap subtitles not yet supported"));
+ switch (rect->type) {
+ case SUBTITLE_NONE:
+ break;
+ case SUBTITLE_BITMAP:
+ decode_bitmap_subtitle (rect, period);
+ break;
+ case SUBTITLE_TEXT:
+ cout << "XXX: SUBTITLE_TEXT " << rect->text << "\n";
+ break;
+ case SUBTITLE_ASS:
+ cout << "XXX: SUBTITLE_ASS " << rect->ass << "\n";
+ break;
}
+
+ avsubtitle_free (&sub);
+}
+
+list<ContentTimePeriod>
+FFmpegDecoder::image_subtitles_during (ContentTimePeriod p, bool starting) const
+{
+ return _ffmpeg_content->subtitles_during (p, starting);
+}
+list<ContentTimePeriod>
+FFmpegDecoder::text_subtitles_during (ContentTimePeriod, bool) const
+{
+ return list<ContentTimePeriod> ();
+}
+
+void
+FFmpegDecoder::decode_bitmap_subtitle (AVSubtitleRect const * rect, ContentTimePeriod period)
+{
/* Note RGBA is expressed little-endian, so the first byte in the word is R, second
G, third B, fourth A.
*/
shared_ptr<Image> image (new Image (PIX_FMT_RGBA, dcp::Size (rect->w, rect->h), true));
-
+
/* Start of the first line in the subtitle */
uint8_t* sub_p = rect->pict.data[0];
/* sub_p looks up into a BGRA palette which is here
@@ -470,7 +498,7 @@ FFmpegDecoder::decode_subtitle_packet ()
uint32_t const * palette = (uint32_t *) rect->pict.data[1];
/* Start of the output data */
uint32_t* out_p = (uint32_t *) image->data()[0];
-
+
for (int y = 0; y < rect->h; ++y) {
uint8_t* sub_line_p = sub_p;
uint32_t* out_line_p = out_p;
@@ -481,7 +509,7 @@ FFmpegDecoder::decode_subtitle_packet ()
sub_p += rect->pict.linesize[0];
out_p += image->stride()[0] / sizeof (uint32_t);
}
-
+
dcp::Size const vs = _ffmpeg_content->video_size ();
dcpomatic::Rect<double> const scaled_rect (
static_cast<double> (rect->x) / vs.width,
@@ -489,20 +517,7 @@ FFmpegDecoder::decode_subtitle_packet ()
static_cast<double> (rect->w) / vs.width,
static_cast<double> (rect->h) / vs.height
);
-
- image_subtitle (ContentTimePeriod (period.from, period.to), image, scaled_rect);
- avsubtitle_free (&sub);
-}
-
-list<ContentTimePeriod>
-FFmpegDecoder::image_subtitles_during (ContentTimePeriod p, bool starting) const
-{
- return _ffmpeg_content->subtitles_during (p, starting);
+ image_subtitle (period, image, scaled_rect);
}
-list<ContentTimePeriod>
-FFmpegDecoder::text_subtitles_during (ContentTimePeriod, bool) const
-{
- return list<ContentTimePeriod> ();
-}
diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h
index 616fa88dd..6f027ce1c 100644
--- a/src/lib/ffmpeg_decoder.h
+++ b/src/lib/ffmpeg_decoder.h
@@ -64,6 +64,8 @@ private:
void decode_audio_packet ();
void decode_subtitle_packet ();
+ void decode_bitmap_subtitle (AVSubtitleRect const * rect, ContentTimePeriod period);
+
void maybe_add_subtitle ();
boost::shared_ptr<AudioBuffers> deinterleave_audio (uint8_t** data, int size);
diff --git a/src/lib/job.cc b/src/lib/job.cc
index f28146632..c4d93ddc1 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -27,7 +27,6 @@
#include "job.h"
#include "util.h"
#include "cross.h"
-#include "ui_signaller.h"
#include "exceptions.h"
#include "film.h"
#include "log.h"
diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc
index 63db662d0..b5b64a77e 100644
--- a/src/lib/job_manager.cc
+++ b/src/lib/job_manager.cc
@@ -26,7 +26,6 @@
#include "job_manager.h"
#include "job.h"
#include "cross.h"
-#include "ui_signaller.h"
using std::string;
using std::list;
diff --git a/src/lib/server_finder.cc b/src/lib/server_finder.cc
index 72a9a4ef5..b4b400b52 100644
--- a/src/lib/server_finder.cc
+++ b/src/lib/server_finder.cc
@@ -22,7 +22,6 @@
#include "util.h"
#include "config.h"
#include "cross.h"
-#include "ui_signaller.h"
#include "dcpomatic_socket.h"
#include "raw_convert.h"
#include <libcxml/cxml.h>
diff --git a/src/lib/ui_signaller.cc b/src/lib/signal_manager.cc
index 4cb34da51..7c2b3e11a 100644
--- a/src/lib/ui_signaller.cc
+++ b/src/lib/signal_manager.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,8 +17,7 @@
*/
-#include "ui_signaller.h"
-
-/** Global UISignaller instance */
-UISignaller* ui_signaller = 0;
+#include "signal_manager.h"
+/** Global SignalManager instance */
+SignalManager* signal_manager = 0;
diff --git a/src/lib/ui_signaller.h b/src/lib/signal_manager.h
index 9d4495cd1..ae4306e30 100644
--- a/src/lib/ui_signaller.h
+++ b/src/lib/signal_manager.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@
*/
-#ifndef DCPOMATIC_UI_SIGNALLER_H
-#define DCPOMATIC_UI_SIGNALLER_H
+#ifndef DCPOMATIC_SIGNAL_MANAGER_H
+#define DCPOMATIC_SIGNAL_MANAGER_H
#include <boost/bind.hpp>
#include <boost/asio.hpp>
@@ -29,11 +29,11 @@ class Signaller;
/** A class to allow signals to be emitted from non-UI threads and handled
* by a UI thread.
*/
-class UISignaller : public boost::noncopyable
+class SignalManager : public boost::noncopyable
{
public:
- /** Create a UISignaller. Must be called from the UI thread */
- UISignaller ()
+ /** Create a SignalManager. Must be called from the UI thread */
+ SignalManager ()
: _work (_service)
{
_ui_thread = boost::this_thread::get_id ();
@@ -53,7 +53,7 @@ public:
/** This should wake the UI and make it call ui_idle() */
virtual void wake_ui () {
- /* This is only a sensible implementation when there is no GUI... */
+ /* This is only a sensible implementation when there is no GUI */
ui_idle ();
}
@@ -85,6 +85,6 @@ private:
boost::thread::id _ui_thread;
};
-extern UISignaller* ui_signaller;
+extern SignalManager* signal_manager;
#endif
diff --git a/src/lib/signaller.h b/src/lib/signaller.h
index 408cfcf5b..4ef9b38b3 100644
--- a/src/lib/signaller.h
+++ b/src/lib/signaller.h
@@ -20,7 +20,7 @@
#ifndef DCPOMATIC_SIGNALLER_H
#define DCPOMATIC_SIGNALLER_H
-#include "ui_signaller.h"
+#include "signal_manager.h"
#include <boost/thread/mutex.hpp>
#include <boost/signals2.hpp>
@@ -100,8 +100,8 @@ public:
void emit (T signal)
{
Wrapper<T>* w = new Wrapper<T> (signal);
- if (ui_signaller) {
- ui_signaller->emit (boost::bind (&Wrapper<T>::signal, w));
+ if (signal_manager) {
+ signal_manager->emit (boost::bind (&Wrapper<T>::signal, w));
}
boost::mutex::scoped_lock lm (_mutex);
diff --git a/src/lib/update.cc b/src/lib/update.cc
index 26944ecc3..f433ff991 100644
--- a/src/lib/update.cc
+++ b/src/lib/update.cc
@@ -19,7 +19,6 @@
#include "update.h"
#include "version.h"
-#include "ui_signaller.h"
#include "safe_stringstream.h"
#include "config.h"
#include "util.h"
diff --git a/src/lib/wscript b/src/lib/wscript
index 68897a4c4..5956c73d6 100644
--- a/src/lib/wscript
+++ b/src/lib/wscript
@@ -109,7 +109,7 @@ sources = """
transcode_job.cc
transcoder.cc
types.cc
- ui_signaller.cc
+ signal_manager.cc
update.cc
upmixer_a.cc
util.cc
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc
index e59220785..904e39fda 100644
--- a/src/tools/dcpomatic.cc
+++ b/src/tools/dcpomatic.cc
@@ -21,7 +21,7 @@
#include "lib/config.h"
#include "lib/util.h"
#include "lib/version.h"
-#include "lib/ui_signaller.h"
+#include "lib/signal_manager.h"
#include "lib/log.h"
#include "lib/job_manager.h"
#include "lib/transcode_job.h"
@@ -39,7 +39,7 @@
#include "wx/wx_util.h"
#include "wx/new_film_dialog.h"
#include "wx/properties_dialog.h"
-#include "wx/wx_ui_signaller.h"
+#include "wx/wx_signal_manager.h"
#include "wx/about_dialog.h"
#include "wx/kdm_dialog.h"
#include "wx/servers_list_dialog.h"
@@ -841,7 +841,7 @@ private:
}
}
- ui_signaller = new wxUISignaller (this);
+ signal_manager = new wxSignalManager (this);
Bind (wxEVT_IDLE, boost::bind (&App::idle, this));
Bind (wxEVT_TIMER, boost::bind (&App::check, this));
@@ -909,7 +909,7 @@ private:
void idle ()
{
- ui_signaller->ui_idle ();
+ signal_manager->ui_idle ();
}
void check ()
diff --git a/src/tools/dcpomatic_batch.cc b/src/tools/dcpomatic_batch.cc
index da8a61414..ae2f3a2c5 100644
--- a/src/tools/dcpomatic_batch.cc
+++ b/src/tools/dcpomatic_batch.cc
@@ -29,7 +29,7 @@
#include "lib/job_manager.h"
#include "wx/wx_util.h"
#include "wx/about_dialog.h"
-#include "wx/wx_ui_signaller.h"
+#include "wx/wx_signal_manager.h"
#include "wx/job_manager_view.h"
using std::exception;
@@ -225,7 +225,7 @@ class App : public wxApp
f->Maximize ();
f->Show ();
- ui_signaller = new wxUISignaller (this);
+ signal_manager = new wxSignalManager (this);
this->Bind (wxEVT_IDLE, boost::bind (&App::idle, this));
shared_ptr<Film> film;
@@ -244,7 +244,7 @@ class App : public wxApp
void idle ()
{
- ui_signaller->ui_idle ();
+ signal_manager->ui_idle ();
}
void OnInitCmdLine (wxCmdLineParser& parser)
diff --git a/src/tools/dcpomatic_cli.cc b/src/tools/dcpomatic_cli.cc
index 4facdd4d1..0307cac9c 100644
--- a/src/tools/dcpomatic_cli.cc
+++ b/src/tools/dcpomatic_cli.cc
@@ -30,7 +30,7 @@
#include "lib/cross.h"
#include "lib/config.h"
#include "lib/log.h"
-#include "lib/ui_signaller.h"
+#include "lib/signal_manager.h"
#include "lib/server_finder.h"
#include "lib/json_server.h"
@@ -119,7 +119,7 @@ main (int argc, char* argv[])
film_dir = argv[optind];
dcpomatic_setup ();
- ui_signaller = new UISignaller ();
+ signal_manager = new SignalManager ();
if (no_remote) {
ServerFinder::instance()->disable ();
diff --git a/src/tools/dcpomatic_create.cc b/src/tools/dcpomatic_create.cc
index 304f4f697..d121eb0cc 100644
--- a/src/tools/dcpomatic_create.cc
+++ b/src/tools/dcpomatic_create.cc
@@ -28,7 +28,7 @@
#include "lib/util.h"
#include "lib/content_factory.h"
#include "lib/job_manager.h"
-#include "lib/ui_signaller.h"
+#include "lib/signal_manager.h"
#include "lib/job.h"
#include "lib/dcp_content_type.h"
#include "lib/ratio.h"
@@ -59,11 +59,11 @@ help (string n)
<< " -o, --output <dir> output directory\n";
}
-class SimpleUISignaller : public UISignaller
+class SimpleSignalManager : public SignalManager
{
public:
/* Do nothing in this method so that UI events happen in our thread
- when we call UISignaller::ui_idle().
+ when we call SignalManager::ui_idle().
*/
void wake_ui () {}
};
@@ -161,7 +161,7 @@ main (int argc, char* argv[])
exit (EXIT_FAILURE);
}
- ui_signaller = new SimpleUISignaller ();
+ signal_manager = new SimpleSignalManager ();
try {
shared_ptr<Film> film (new Film (output, false));
@@ -184,7 +184,7 @@ main (int argc, char* argv[])
JobManager* jm = JobManager::instance ();
while (jm->work_to_do ()) {}
- while (ui_signaller->ui_idle() > 0) {}
+ while (signal_manager->ui_idle() > 0) {}
ContentList content = film->content ();
for (ContentList::iterator i = content.begin(); i != content.end(); ++i) {
diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc
index 286e7f49d..fcae9c30f 100644
--- a/src/wx/audio_dialog.cc
+++ b/src/wx/audio_dialog.cc
@@ -124,8 +124,15 @@ AudioDialog::try_to_load_analysis ()
_analysis_finished_connection = _content->analyse_audio (bind (&AudioDialog::analysis_finished, this));
return;
}
+
+ try {
+ _analysis.reset (new AudioAnalysis (_content->audio_analysis_path ()));
+ } catch (xmlpp::exception& e) {
+ /* Probably an old-style analysis file: recreate it */
+ _analysis_finished_connection = _content->analyse_audio (bind (&AudioDialog::analysis_finished, this));
+ return;
+ }
- _analysis.reset (new AudioAnalysis (_content->audio_analysis_path ()));
_plot->set_analysis (_analysis);
setup_peak_time ();
diff --git a/src/wx/dolby_certificate_dialog.cc b/src/wx/dolby_certificate_dialog.cc
index 15551a424..ad43f6479 100644
--- a/src/wx/dolby_certificate_dialog.cc
+++ b/src/wx/dolby_certificate_dialog.cc
@@ -21,7 +21,7 @@
#include <curl/curl.h>
#include "lib/compose.hpp"
#include "lib/internet.h"
-#include "lib/ui_signaller.h"
+#include "lib/signal_manager.h"
#include "dolby_certificate_dialog.h"
#include "wx_util.h"
@@ -80,7 +80,7 @@ DolbyCertificateDialog::setup_countries ()
/* See DoremiCertificateDialog for discussion about this daft delay */
wxMilliSleep (200);
#endif
- ui_signaller->when_idle (boost::bind (&DolbyCertificateDialog::finish_setup_countries, this));
+ signal_manager->when_idle (boost::bind (&DolbyCertificateDialog::finish_setup_countries, this));
}
void
@@ -103,7 +103,7 @@ DolbyCertificateDialog::country_selected ()
#ifdef DCPOMATIC_OSX
wxMilliSleep (200);
#endif
- ui_signaller->when_idle (boost::bind (&DolbyCertificateDialog::finish_country_selected, this));
+ signal_manager->when_idle (boost::bind (&DolbyCertificateDialog::finish_country_selected, this));
}
void
@@ -126,7 +126,7 @@ DolbyCertificateDialog::cinema_selected ()
#ifdef DCPOMATIC_OSX
wxMilliSleep (200);
#endif
- ui_signaller->when_idle (boost::bind (&DolbyCertificateDialog::finish_cinema_selected, this));
+ signal_manager->when_idle (boost::bind (&DolbyCertificateDialog::finish_cinema_selected, this));
}
void
@@ -161,7 +161,7 @@ DolbyCertificateDialog::download ()
wxMilliSleep (200);
#endif
- ui_signaller->when_idle (boost::bind (&DolbyCertificateDialog::finish_download, this));
+ signal_manager->when_idle (boost::bind (&DolbyCertificateDialog::finish_download, this));
}
void
diff --git a/src/wx/doremi_certificate_dialog.cc b/src/wx/doremi_certificate_dialog.cc
index 105555da9..578a7a72d 100644
--- a/src/wx/doremi_certificate_dialog.cc
+++ b/src/wx/doremi_certificate_dialog.cc
@@ -21,7 +21,7 @@
#include <zip.h>
#include "lib/compose.hpp"
#include "lib/util.h"
-#include "lib/ui_signaller.h"
+#include "lib/signal_manager.h"
#include "lib/internet.h"
#include "doremi_certificate_dialog.h"
#include "wx_util.h"
@@ -59,7 +59,7 @@ DoremiCertificateDialog::download ()
wxMilliSleep (200);
#endif
- ui_signaller->when_idle (boost::bind (&DoremiCertificateDialog::finish_download, this, serial));
+ signal_manager->when_idle (boost::bind (&DoremiCertificateDialog::finish_download, this, serial));
}
void
diff --git a/src/wx/wscript b/src/wx/wscript
index a05774cd2..370f59c62 100644
--- a/src/wx/wscript
+++ b/src/wx/wscript
@@ -80,7 +80,7 @@ sources = """
update_dialog.cc
video_panel.cc
wx_util.cc
- wx_ui_signaller.cc
+ wx_signal_manager.cc
"""
def configure(conf):
diff --git a/src/wx/wx_ui_signaller.cc b/src/wx/wx_signal_manager.cc
index 8fc6670d6..3d8b9992a 100644
--- a/src/wx/wx_ui_signaller.cc
+++ b/src/wx/wx_signal_manager.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,16 +18,16 @@
*/
#include <wx/wx.h>
-#include "wx_ui_signaller.h"
+#include "wx_signal_manager.h"
-wxUISignaller::wxUISignaller (wxEvtHandler* h)
+wxSignalManager::wxSignalManager (wxEvtHandler* h)
: _handler (h)
{
}
void
-wxUISignaller::wake_ui ()
+wxSignalManager::wake_ui ()
{
wxCommandEvent event (-1, -1);
_handler->AddPendingEvent (event);
diff --git a/src/wx/wx_ui_signaller.h b/src/wx/wx_signal_manager.h
index 63f2049cd..ad18e6880 100644
--- a/src/wx/wx_ui_signaller.h
+++ b/src/wx/wx_signal_manager.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,18 +17,18 @@
*/
-#include "lib/ui_signaller.h"
+#include "lib/signal_manager.h"
class wxEvtHandler;
-/** @class wxUISignaller
- * @brief UISignaller for the wxWidgets event loop
+/** @class wxSignalManager
+ * @brief SignalManager for the wxWidgets event loop
*/
-class wxUISignaller : public UISignaller
+class wxSignalManager : public SignalManager
{
public:
- wxUISignaller (wxEvtHandler *);
+ wxSignalManager (wxEvtHandler *);
void wake_ui ();
private:
diff --git a/test/test.cc b/test/test.cc
index 9201e5b4c..32ad6ca70 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -29,7 +29,7 @@
#include <dcp/dcp.h>
#include "lib/config.h"
#include "lib/util.h"
-#include "lib/ui_signaller.h"
+#include "lib/signal_manager.h"
#include "lib/film.h"
#include "lib/job_manager.h"
#include "lib/job.h"
@@ -51,7 +51,7 @@ using boost::scoped_array;
boost::filesystem::path private_data = boost::filesystem::path ("..") / boost::filesystem::path ("dcpomatic-test-private");
-class TestUISignaller : public UISignaller
+class TestSignalManager : public SignalManager
{
public:
/* No wakes in tests: we call ui_idle ourselves */
@@ -77,7 +77,7 @@ struct TestConfig
ServerFinder::instance()->disable ();
- ui_signaller = new TestUISignaller ();
+ signal_manager = new TestSignalManager ();
}
~TestConfig ()
@@ -285,7 +285,7 @@ wait_for_jobs ()
{
JobManager* jm = JobManager::instance ();
while (jm->work_to_do ()) {
- ui_signaller->ui_idle ();
+ signal_manager->ui_idle ();
}
if (jm->errors ()) {
int N = 0;
@@ -305,7 +305,7 @@ wait_for_jobs ()
}
}
- ui_signaller->ui_idle ();
+ signal_manager->ui_idle ();
/* Discard all jobs so we lose any we just reported an error in */
JobManager::drop ();