summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-08-19 13:55:46 +0100
committerCarl Hetherington <cth@carlh.net>2018-08-19 13:55:46 +0100
commit4408e6eea87ce9630e71e4a7d40e2dade091b0ee (patch)
tree634dd286de7ee2b18cbdc6bcb8837b52b2f8655f /src/lib
parent67c604d3fa2391b98ea436e2c6412f1c83a98f77 (diff)
Similar pending/done for Film::Change.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc11
-rw-r--r--src/lib/film.h4
-rw-r--r--src/lib/player.cc23
-rw-r--r--src/lib/player.h2
4 files changed, 26 insertions, 14 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 846e8ac51..eaaa611af 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -938,19 +938,28 @@ Film::signal_changed (Property p)
{
_dirty = true;
+ Change (CHANGE_TYPE_PENDING, p);
+ bool changed = false;
+
switch (p) {
case Film::CONTENT:
set_video_frame_rate (_playlist->best_video_frame_rate ());
+ changed = true;
break;
case Film::VIDEO_FRAME_RATE:
case Film::SEQUENCE:
_playlist->maybe_sequence ();
+ changed = true;
break;
default:
break;
}
- emit (boost::bind (boost::ref (Changed), p));
+ if (changed) {
+ emit (boost::bind (boost::ref (Change), CHANGE_TYPE_DONE, p));
+ } else {
+ Change (CHANGE_TYPE_CANCELLED, p);
+ }
}
void
diff --git a/src/lib/film.h b/src/lib/film.h
index c6c8403cb..649768c7a 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -323,8 +323,8 @@ public:
void set_reel_length (int64_t);
void set_upload_after_make_dcp (bool);
- /** Emitted when some property has of the Film has changed */
- mutable boost::signals2::signal<void (Property)> Changed;
+ /** Emitted when some property has of the Film is about to change or has changed */
+ mutable boost::signals2::signal<void (ChangeType, Property)> Change;
/** Emitted when some property of our content has changed */
mutable boost::signals2::signal<void (ChangeType, boost::weak_ptr<Content>, int, bool)> ContentChange;
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 0c3aea028..dae0d23d6 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -97,12 +97,12 @@ Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist
, _audio_merger (_film->audio_frame_rate())
, _shuffler (0)
{
- _film_changed_connection = _film->Changed.connect (bind (&Player::film_changed, this, _1));
+ _film_changed_connection = _film->Change.connect (bind (&Player::film_change, this, _1, _2));
_playlist_change_connection = _playlist->Change.connect (bind (&Player::playlist_change, this, _1));
_playlist_content_change_connection = _playlist->ContentChange.connect (bind(&Player::playlist_content_change, this, _1, _3, _4));
set_video_container_size (_film->frame_size ());
- film_changed (Film::AUDIO_PROCESSOR);
+ film_change (CHANGE_TYPE_DONE, Film::AUDIO_PROCESSOR);
setup_pieces ();
seek (DCPTime (), true);
@@ -268,7 +268,7 @@ Player::playlist_change (ChangeType type)
}
void
-Player::film_changed (Film::Property p)
+Player::film_change (ChangeType type, Film::Property p)
{
/* Here we should notice Film properties that affect our output, and
alert listeners that our output now would be different to how it was
@@ -276,22 +276,25 @@ Player::film_changed (Film::Property p)
*/
if (p == Film::CONTAINER) {
- Change (CHANGE_TYPE_PENDING, PlayerProperty::FILM_CONTAINER, false);
+ Change (type, PlayerProperty::FILM_CONTAINER, false);
} else if (p == Film::VIDEO_FRAME_RATE) {
/* Pieces contain a FrameRateChange which contains the DCP frame rate,
so we need new pieces here.
*/
- /* XXX: missing PENDING! */
- setup_pieces ();
- Change (CHANGE_TYPE_DONE, PlayerProperty::FILM_VIDEO_FRAME_RATE, false);
+ if (type == CHANGE_TYPE_DONE) {
+ setup_pieces ();
+ }
+ Change (type, PlayerProperty::FILM_VIDEO_FRAME_RATE, false);
} else if (p == Film::AUDIO_PROCESSOR) {
- if (_film->audio_processor ()) {
+ if (type == CHANGE_TYPE_DONE && _film->audio_processor ()) {
boost::mutex::scoped_lock lm (_mutex);
_audio_processor = _film->audio_processor()->clone (_film->audio_frame_rate ());
}
} else if (p == Film::AUDIO_CHANNELS) {
- boost::mutex::scoped_lock lm (_mutex);
- _audio_merger.clear ();
+ if (type == CHANGE_TYPE_DONE) {
+ boost::mutex::scoped_lock lm (_mutex);
+ _audio_merger.clear ();
+ }
}
}
diff --git a/src/lib/player.h b/src/lib/player.h
index 165820799..e17456cf2 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -112,7 +112,7 @@ private:
void setup_pieces ();
void setup_pieces_unlocked ();
void flush ();
- void film_changed (Film::Property);
+ void film_change (ChangeType, Film::Property);
void playlist_change (ChangeType);
void playlist_content_change (ChangeType, int, bool);
std::list<PositionImage> transform_bitmap_texts (std::list<BitmapText>) const;