diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-08-19 13:55:46 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-08-19 13:55:46 +0100 |
| commit | 4408e6eea87ce9630e71e4a7d40e2dade091b0ee (patch) | |
| tree | 634dd286de7ee2b18cbdc6bcb8837b52b2f8655f /src/lib | |
| parent | 67c604d3fa2391b98ea436e2c6412f1c83a98f77 (diff) | |
Similar pending/done for Film::Change.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/film.cc | 11 | ||||
| -rw-r--r-- | src/lib/film.h | 4 | ||||
| -rw-r--r-- | src/lib/player.cc | 23 | ||||
| -rw-r--r-- | src/lib/player.h | 2 |
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; |
