Merge master.
[dcpomatic.git] / src / lib / decoder.cc
index 7f4973737faff0146f971f91c846cc4c8a5dabef..53a0c31e140d6ceab0a3d2f222fe419bda88237b 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "i18n.h"
 
+using std::cout;
 using boost::shared_ptr;
 
 /** @param f Film.
@@ -34,13 +35,13 @@ using boost::shared_ptr;
  */
 Decoder::Decoder (shared_ptr<const Film> f)
        : _film (f)
+       , _done (false)
 {
 
 }
 
-class DecodedSorter
+struct DecodedSorter
 {
-public:
        bool operator() (shared_ptr<Decoded> a, shared_ptr<Decoded> b)
        {
                return a->dcp_time < b->dcp_time;
@@ -50,12 +51,15 @@ public:
 shared_ptr<Decoded>
 Decoder::peek ()
 {
-       while (_pending.empty() && !pass ()) {}
+       while (!_done && _pending.empty ()) {
+               _done = pass ();
+       }
 
-       if (_pending.empty ()) {
+       if (_done && _pending.empty ()) {
                return shared_ptr<Decoded> ();
        }
 
+       _pending.sort (DecodedSorter ());
        return _pending.front ();
 }
 
@@ -71,4 +75,5 @@ void
 Decoder::seek (ContentTime, bool)
 {
        _pending.clear ();
+       _done = false;
 }