summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-04-07 22:27:54 +0100
committerCarl Hetherington <cth@carlh.net>2018-04-07 22:27:54 +0100
commit6e6ebf3122333b38333482bce64df3e6e61e64c4 (patch)
tree0ab8aee046269d4acbd512331e57dce86f5a206f /src/lib
parentb52ecf81298fa814ec96d56a82a66b3874582d7f (diff)
Fix silly crash in shuffler.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/shuffler.cc31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/lib/shuffler.cc b/src/lib/shuffler.cc
index 00edc27d5..59656317d 100644
--- a/src/lib/shuffler.cc
+++ b/src/lib/shuffler.cc
@@ -58,19 +58,24 @@ Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video)
_store.push_back (make_pair (weak_piece, video));
_store.sort (Comparator());
- bool const store_front_in_sequence =
- !_store.empty() &&
- _last &&
- (
- (_store.front().second.frame == _last->frame && _store.front().second.eyes == EYES_RIGHT && _last->eyes == EYES_LEFT) ||
- (_store.front().second.frame == (_last->frame + 1) && _store.front().second.eyes == EYES_LEFT && _last->eyes == EYES_RIGHT)
- );
-
- /* store_front_in_sequence means everything is ok; otherwise if the store is getting too big just
- start emitting things as best we can. This can easily happen if, for example, there is only content
- for one eye in some part of the timeline.
- */
- while (store_front_in_sequence || _store.size() > 8) {
+ while (true) {
+
+ bool const store_front_in_sequence =
+ !_store.empty() &&
+ _last &&
+ (
+ (_store.front().second.frame == _last->frame && _store.front().second.eyes == EYES_RIGHT && _last->eyes == EYES_LEFT) ||
+ (_store.front().second.frame == (_last->frame + 1) && _store.front().second.eyes == EYES_LEFT && _last->eyes == EYES_RIGHT)
+ );
+
+ if (!store_front_in_sequence && _store.size() <= 8) {
+ /* store_front_in_sequence means everything is ok; otherwise if the store is getting too big just
+ start emitting things as best we can. This can easily happen if, for example, there is only content
+ for one eye in some part of the timeline.
+ */
+ break;
+ }
+
Video (_store.front().first, _store.front().second);
_last = _store.front().second;
_store.pop_front ();