diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-04-05 16:31:18 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-04-05 16:31:18 +0100 |
| commit | 5f5c64faa7b0114f84f45e50211611333042c672 (patch) | |
| tree | 7381357fb736b6bbb8d1a55b244c518b1f13f0d4 /src/lib/shuffler.cc | |
| parent | 2cbf72995ce53ed92545dbcd3fb07788d68ff7f2 (diff) | |
Further adjustment of shuffler to cope with having sources for only one eye.v2.13.12
Diffstat (limited to 'src/lib/shuffler.cc')
| -rw-r--r-- | src/lib/shuffler.cc | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib/shuffler.cc b/src/lib/shuffler.cc index c32649f00..00edc27d5 100644 --- a/src/lib/shuffler.cc +++ b/src/lib/shuffler.cc @@ -42,8 +42,6 @@ struct Comparator void Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video) { - /* Something has gong wrong if our store gets too big */ - DCPOMATIC_ASSERT (_store.size() < 8); /* We should only ever see 3D_LEFT / 3D_RIGHT */ DCPOMATIC_ASSERT (video.eyes == EYES_LEFT || video.eyes == EYES_RIGHT); @@ -60,15 +58,19 @@ Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video) _store.push_back (make_pair (weak_piece, video)); _store.sort (Comparator()); - while ( + 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) { Video (_store.front().first, _store.front().second); _last = _store.front().second; _store.pop_front (); |
