X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fbutler.cc;h=56f8919f5516487742c44b308bf345ceb350d687;hb=a5ea5c0d2637dd41e3d356cb62cac75b8cadf8ce;hp=ea0950afbcccd916ce8e2b79ff9a6797a54502d1;hpb=9de96c328babc3944f5a9b4d12da9471e3a33ef7;p=dcpomatic.git diff --git a/src/lib/butler.cc b/src/lib/butler.cc index ea0950afb..56f8919f5 100644 --- a/src/lib/butler.cc +++ b/src/lib/butler.cc @@ -29,6 +29,7 @@ using std::cout; using std::pair; using std::make_pair; +using std::string; using boost::weak_ptr; using boost::shared_ptr; using boost::bind; @@ -37,11 +38,11 @@ using boost::optional; /** Minimum video readahead in frames */ #define MINIMUM_VIDEO_READAHEAD 10 /** Maximum video readahead in frames; should never be reached unless there are bugs in Player */ -#define MAXIMUM_VIDEO_READAHEAD 240 +#define MAXIMUM_VIDEO_READAHEAD 24 /** Minimum audio readahead in frames */ -#define MINIMUM_AUDIO_READAHEAD (48000*5) +#define MINIMUM_AUDIO_READAHEAD (48000 * MINIMUM_VIDEO_READAHEAD / 24) /** Minimum audio readahead in frames; should never be reached unless there are bugs in Player */ -#define MAXIMUM_AUDIO_READAHEAD (48000*60) +#define MAXIMUM_AUDIO_READAHEAD (48000 * MAXIMUM_VIDEO_READAHEAD / 24) #define LOG_WARNING(...) _log->log (String::compose(__VA_ARGS__), LogEntry::TYPE_WARNING); @@ -101,12 +102,18 @@ Butler::should_run () const LOG_WARNING ("Butler audio buffers reached %1 frames", _audio.size()); } - return (_video.size() < MINIMUM_VIDEO_READAHEAD || (!_disable_audio && _audio.size() < MINIMUM_AUDIO_READAHEAD)) - && (_video.size() < MAXIMUM_VIDEO_READAHEAD) - && (_audio.size() < MAXIMUM_AUDIO_READAHEAD) - && !_stop_thread - && !_finished - && !_died; + if (_stop_thread || _finished || _died) { + /* Definitely do not run */ + return false; + } + + if (_video.size() < MINIMUM_VIDEO_READAHEAD || (!_disable_audio && _audio.size() < MINIMUM_AUDIO_READAHEAD)) { + /* Definitely do run: we need data */ + return true; + } + + /* Run if we aren't full of video or audio */ + return (_video.size() < MAXIMUM_VIDEO_READAHEAD) && (_audio.size() < MAXIMUM_AUDIO_READAHEAD); } void @@ -248,3 +255,10 @@ Butler::disable_audio () boost::mutex::scoped_lock lm (_mutex); _disable_audio = true; } + +pair +Butler::memory_used () const +{ + /* XXX: should also look at _audio.memory_used() */ + return _video.memory_used(); +}