projects
/
dcpomatic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
d371988
)
Tidy up creation of analysis a bit.
author
Carl Hetherington
<cth@carlh.net>
Mon, 25 Feb 2013 19:27:58 +0000
(19:27 +0000)
committer
Carl Hetherington
<cth@carlh.net>
Mon, 25 Feb 2013 19:27:58 +0000
(19:27 +0000)
src/lib/audio_analysis.cc
patch
|
blob
|
history
src/lib/film.cc
patch
|
blob
|
history
src/lib/film.h
patch
|
blob
|
history
src/lib/job.cc
patch
|
blob
|
history
src/lib/job.h
patch
|
blob
|
history
src/wx/audio_dialog.cc
patch
|
blob
|
history
src/wx/audio_dialog.h
patch
|
blob
|
history
src/wx/audio_plot.cc
patch
|
blob
|
history
src/wx/film_editor.cc
patch
|
blob
|
history
src/wx/job_manager_view.cc
patch
|
blob
|
history
diff --git
a/src/lib/audio_analysis.cc
b/src/lib/audio_analysis.cc
index 39c1ba2261a910924ed41e9024ccfc03d9b5b1e1..fffafc4d4c5fe38ab4591883e160e7d0e35812cc 100644
(file)
--- a/
src/lib/audio_analysis.cc
+++ b/
src/lib/audio_analysis.cc
@@
-21,6
+21,7
@@
#include <cmath>
#include <cassert>
#include <fstream>
#include <cmath>
#include <cassert>
#include <fstream>
+#include <boost/filesystem.hpp>
#include "audio_analysis.h"
using std::ostream;
#include "audio_analysis.h"
using std::ostream;
@@
-101,7
+102,9
@@
AudioAnalysis::points (int c) const
void
AudioAnalysis::write (string filename)
{
void
AudioAnalysis::write (string filename)
{
- ofstream f (filename.c_str ());
+ string tmp = filename + ".tmp";
+
+ ofstream f (tmp.c_str ());
f << _data.size() << "\n";
for (vector<vector<AudioPoint> >::iterator i = _data.begin(); i != _data.end(); ++i) {
f << i->size () << "\n";
f << _data.size() << "\n";
for (vector<vector<AudioPoint> >::iterator i = _data.begin(); i != _data.end(); ++i) {
f << i->size () << "\n";
@@
-109,4
+112,7
@@
AudioAnalysis::write (string filename)
j->write (f);
}
}
j->write (f);
}
}
+
+ f.close ();
+ boost::filesystem::rename (tmp, filename);
}
}
diff --git
a/src/lib/film.cc
b/src/lib/film.cc
index f36614689c64a23d9bc65f09083fd2a2a91f27ba..ab636bdfcc3a651fe79cd1b87dd94d15693e93ed 100644
(file)
--- a/
src/lib/film.cc
+++ b/
src/lib/film.cc
@@
-342,7
+342,10
@@
Film::examine_content ()
void
Film::analyse_audio_finished ()
{
void
Film::analyse_audio_finished ()
{
+ ensure_ui_thread ();
_analyse_audio_job.reset ();
_analyse_audio_job.reset ();
+
+ AudioAnalysisFinished ();
}
void
}
void
diff --git
a/src/lib/film.h
b/src/lib/film.h
index c268d3eac9a01498505d50e6369089a19caeb279..847ab434ea06adfc98a169626da7e7b0b5f5fa78 100644
(file)
--- a/
src/lib/film.h
+++ b/
src/lib/film.h
@@
-367,6
+367,8
@@
public:
/** Emitted when some property has changed */
mutable boost::signals2::signal<void (Property)> Changed;
/** Emitted when some property has changed */
mutable boost::signals2::signal<void (Property)> Changed;
+ boost::signals2::signal<void ()> AudioAnalysisFinished;
+
/** Current version number of the state file */
static int const state_version;
/** Current version number of the state file */
static int const state_version;
diff --git
a/src/lib/job.cc
b/src/lib/job.cc
index bfad65a0a61f18d6566fa937b528232b91fe38f2..6a53e629cfd033a5d4f1b7fd8a86bb48a252c8ff 100644
(file)
--- a/
src/lib/job.cc
+++ b/
src/lib/job.cc
@@
-147,7
+147,6
@@
Job::set_state (State s)
if (_state == FINISHED_OK || _state == FINISHED_ERROR) {
_ran_for = elapsed_time ();
if (_state == FINISHED_OK || _state == FINISHED_ERROR) {
_ran_for = elapsed_time ();
- Finished ();
}
}
}
}
diff --git
a/src/lib/job.h
b/src/lib/job.h
index 1538e2779563910e67e998b2ec87c10f80838fcd..c98dbaea15dfb13133611f61727439d332158470 100644
(file)
--- a/
src/lib/job.h
+++ b/
src/lib/job.h
@@
-65,6
+65,7
@@
public:
void descend (float);
float overall_progress () const;
void descend (float);
float overall_progress () const;
+ /** Emitted by the JobManagerView from the UI thread */
boost::signals2::signal<void()> Finished;
protected:
boost::signals2::signal<void()> Finished;
protected:
diff --git
a/src/wx/audio_dialog.cc
b/src/wx/audio_dialog.cc
index 32864ca15974a9c400bb88da7c27efcbc75a17a0..89b04409a816d90899c6209844da93a094280fa6 100644
(file)
--- a/
src/wx/audio_dialog.cc
+++ b/
src/wx/audio_dialog.cc
@@
-17,6
+17,7
@@
*/
*/
+#include <boost/filesystem.hpp>
#include "audio_dialog.h"
#include "audio_plot.h"
#include "audio_analysis.h"
#include "audio_dialog.h"
#include "audio_plot.h"
#include "audio_analysis.h"
@@
-24,8
+25,9
@@
#include "wx_util.h"
using boost::shared_ptr;
#include "wx_util.h"
using boost::shared_ptr;
+using boost::bind;
-AudioDialog::AudioDialog (wxWindow* parent
, boost::shared_ptr<Film> film
)
+AudioDialog::AudioDialog (wxWindow* parent)
: wxDialog (parent, wxID_ANY, _("Audio"), wxDefaultPosition, wxSize (640, 512), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
, _plot (0)
{
: wxDialog (parent, wxID_ANY, _("Audio"), wxDefaultPosition, wxSize (640, 512), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
, _plot (0)
{
@@
-42,8
+44,6
@@
AudioDialog::AudioDialog (wxWindow* parent, boost::shared_ptr<Film> film)
sizer->Add (table);
sizer->Add (table);
- set_film (film);
-
SetSizer (sizer);
sizer->Layout ();
sizer->SetSizeHints (this);
SetSizer (sizer);
sizer->Layout ();
sizer->SetSizeHints (this);
@@
-54,27
+54,48
@@
AudioDialog::AudioDialog (wxWindow* parent, boost::shared_ptr<Film> film)
void
AudioDialog::set_film (boost::shared_ptr<Film> f)
{
void
AudioDialog::set_film (boost::shared_ptr<Film> f)
{
- _film_connection.disconnect ();
- _film
= f
;
+ _film_c
hanged_c
onnection.disconnect ();
+ _film
_audio_analysis_finished_connection.disconnect ()
;
-
shared_ptr<AudioAnalysis> a
;
+
_film = f
;
- try {
- a.reset (new AudioAnalysis (f->audio_analysis_path ()));
- } catch (...) {
+ try_to_load_analysis ();
+ setup_channels ();
- }
-
- _plot->set_analysis (a);
+ _channel->SetSelection (0);
+ _film_changed_connection = _film->Changed.connect (bind (&AudioDialog::film_changed, this, _1));
+ _film_audio_analysis_finished_connection = _film->AudioAnalysisFinished.connect (bind (&AudioDialog::try_to_load_analysis, this));
+}
+
+void
+AudioDialog::setup_channels ()
+{
_channel->Clear ();
_channel->Clear ();
- for (int i = 0; i < f->audio_stream()->channels(); ++i) {
+
+ if (!_film->audio_stream()) {
+ return;
+ }
+
+ for (int i = 0; i < _film->audio_stream()->channels(); ++i) {
_channel->Append (audio_channel_name (i));
}
_channel->Append (audio_channel_name (i));
}
+}
- _channel->SetSelection (0);
+void
+AudioDialog::try_to_load_analysis ()
+{
+ shared_ptr<AudioAnalysis> a;
- _film_connection = f->Changed.connect (bind (&AudioDialog::film_changed, this, _1));
+ if (boost::filesystem::exists (_film->audio_analysis_path())) {
+ a.reset (new AudioAnalysis (_film->audio_analysis_path ()));
+ } else {
+ if (IsShown ()) {
+ _film->analyse_audio ();
+ }
+ }
+
+ _plot->set_analysis (a);
}
void
}
void
@@
-86,7
+107,16
@@
AudioDialog::channel_changed (wxCommandEvent &)
void
AudioDialog::film_changed (Film::Property p)
{
void
AudioDialog::film_changed (Film::Property p)
{
- if (p == Film::AUDIO_GAIN) {
+ switch (p) {
+ case Film::AUDIO_GAIN:
_plot->set_gain (_film->audio_gain ());
_plot->set_gain (_film->audio_gain ());
+ break;
+ case Film::CONTENT_AUDIO_STREAM:
+ case Film::EXTERNAL_AUDIO:
+ case Film::USE_CONTENT_AUDIO:
+ setup_channels ();
+ break;
+ default:
+ break;
}
}
}
}
diff --git
a/src/wx/audio_dialog.h
b/src/wx/audio_dialog.h
index 968fd0a122340f9021303dc2a799b68e868c1539..623c9a067a5d633342d4e79e4f3f29251a3e6372 100644
(file)
--- a/
src/wx/audio_dialog.h
+++ b/
src/wx/audio_dialog.h
@@
-28,16
+28,19
@@
class Film;
class AudioDialog : public wxDialog
{
public:
class AudioDialog : public wxDialog
{
public:
- AudioDialog (wxWindow *
, boost::shared_ptr<Film>
);
+ AudioDialog (wxWindow *);
void set_film (boost::shared_ptr<Film>);
private:
void film_changed (Film::Property);
void channel_changed (wxCommandEvent &);
void set_film (boost::shared_ptr<Film>);
private:
void film_changed (Film::Property);
void channel_changed (wxCommandEvent &);
+ void try_to_load_analysis ();
+ void setup_channels ();
boost::shared_ptr<Film> _film;
AudioPlot* _plot;
wxChoice* _channel;
boost::shared_ptr<Film> _film;
AudioPlot* _plot;
wxChoice* _channel;
- boost::signals2::scoped_connection _film_connection;
+ boost::signals2::scoped_connection _film_changed_connection;
+ boost::signals2::scoped_connection _film_audio_analysis_finished_connection;
};
};
diff --git
a/src/wx/audio_plot.cc
b/src/wx/audio_plot.cc
index 1ad07fcce0dc9eb352c69d3456e28e0fac35cb2a..41d074dad485539b210ef34278fde82595a6b117 100644
(file)
--- a/
src/wx/audio_plot.cc
+++ b/
src/wx/audio_plot.cc
@@
-65,15
+65,17
@@
AudioPlot::paint (wxPaintEvent &)
{
wxPaintDC dc (this);
{
wxPaintDC dc (this);
- if (!_analysis) {
- return;
- }
-
wxGraphicsContext* gc = wxGraphicsContext::Create (dc);
if (!gc) {
return;
}
wxGraphicsContext* gc = wxGraphicsContext::Create (dc);
if (!gc) {
return;
}
+ if (!_analysis) {
+ gc->SetFont (gc->CreateFont (*wxNORMAL_FONT));
+ gc->DrawText (_("Please wait; audio is being analysed..."), 32, 32);
+ return;
+ }
+
int const width = GetSize().GetWidth();
float const xs = width / float (_analysis->points (_channel));
int const height = GetSize().GetHeight ();
int const width = GetSize().GetWidth();
float const xs = width / float (_analysis->points (_channel));
int const height = GetSize().GetHeight ();
diff --git
a/src/wx/film_editor.cc
b/src/wx/film_editor.cc
index 725f2d1b3c517f2dd4178fee92a20cc380798514..c9f83677c6da5db1cf7ef2168890538d4d810e5b 100644
(file)
--- a/
src/wx/film_editor.cc
+++ b/
src/wx/film_editor.cc
@@
-1182,6
+1182,7
@@
FilmEditor::show_audio_clicked (wxCommandEvent &)
_audio_dialog = 0;
}
_audio_dialog = 0;
}
- _audio_dialog = new AudioDialog (this
, _film
);
+ _audio_dialog = new AudioDialog (this);
_audio_dialog->Show ();
_audio_dialog->Show ();
+ _audio_dialog->set_film (_film);
}
}
diff --git
a/src/wx/job_manager_view.cc
b/src/wx/job_manager_view.cc
index 7537da287dca0f4ae545de67f902c5b5ec81e7c0..7361f29a815896d1021a5a1ed06a1500cc293f8c 100644
(file)
--- a/
src/wx/job_manager_view.cc
+++ b/
src/wx/job_manager_view.cc
@@
-109,6
+109,7
@@
JobManagerView::update ()
if ((*i)->finished() && !_job_records[*i].finalised) {
_job_records[*i].gauge->SetValue (100);
checked_set (_job_records[*i].message, st);
if ((*i)->finished() && !_job_records[*i].finalised) {
_job_records[*i].gauge->SetValue (100);
checked_set (_job_records[*i].message, st);
+ (*i)->Finished ();
_job_records[*i].finalised = true;
if (!(*i)->error_details().empty ()) {
_job_records[*i].details->Enable (true);
_job_records[*i].finalised = true;
if (!(*i)->error_details().empty ()) {
_job_records[*i].details->Enable (true);