X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdecoder.cc;h=53a0c31e140d6ceab0a3d2f222fe419bda88237b;hb=e8c1880a2b9a40eb11ee259feee3edd799139a43;hp=2308bbd98fe5d3a3a7dedba52bd9a32b90c42e96;hpb=11c70b0e3051517e7bb96a7d6fa53053dab6e978;p=dcpomatic.git diff --git a/src/lib/decoder.cc b/src/lib/decoder.cc index 2308bbd98..53a0c31e1 100644 --- a/src/lib/decoder.cc +++ b/src/lib/decoder.cc @@ -21,15 +21,13 @@ * @brief Parent class for decoders of content. */ -#include #include "film.h" -#include "exceptions.h" -#include "util.h" #include "decoder.h" +#include "decoded.h" #include "i18n.h" -using std::string; +using std::cout; using boost::shared_ptr; /** @param f Film. @@ -37,13 +35,45 @@ using boost::shared_ptr; */ Decoder::Decoder (shared_ptr f) : _film (f) + , _done (false) { - _film_connection = f->Changed.connect (bind (&Decoder::film_changed, this, _1)); + +} + +struct DecodedSorter +{ + bool operator() (shared_ptr a, shared_ptr b) + { + return a->dcp_time < b->dcp_time; + } +}; + +shared_ptr +Decoder::peek () +{ + while (!_done && _pending.empty ()) { + _done = pass (); + } + + if (_done && _pending.empty ()) { + return shared_ptr (); + } + + _pending.sort (DecodedSorter ()); + return _pending.front (); +} + +void +Decoder::consume () +{ + if (!_pending.empty ()) { + _pending.pop_front (); + } } -/** @return true on error */ -bool -Decoder::seek (Time) +void +Decoder::seek (ContentTime, bool) { - throw DecodeError (N_("decoder does not support seek")); + _pending.clear (); + _done = false; }