From: Carl Hetherington Date: Fri, 19 Apr 2019 00:34:03 +0000 (+0000) Subject: Hopefully better errors on large video/audio disagreements. X-Git-Tag: v2.13.149~2 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=64ff57b866e19daa8ed16b08d0a8038f787948c1 Hopefully better errors on large video/audio disagreements. --- diff --git a/src/lib/audio_ring_buffers.cc b/src/lib/audio_ring_buffers.cc index 21c4b6a5c..d1375cb27 100644 --- a/src/lib/audio_ring_buffers.cc +++ b/src/lib/audio_ring_buffers.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2016-2018 Carl Hetherington + Copyright (C) 2016-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -103,6 +103,16 @@ AudioRingBuffers::get (float* out, int channels, int frames) return time; } +optional +AudioRingBuffers::peek () const +{ + boost::mutex::scoped_lock lm (_mutex); + if (_buffers.empty()) { + return optional(); + } + return _buffers.front().second; +} + void AudioRingBuffers::clear () { diff --git a/src/lib/audio_ring_buffers.h b/src/lib/audio_ring_buffers.h index ce0efd3e2..8d830ecf7 100644 --- a/src/lib/audio_ring_buffers.h +++ b/src/lib/audio_ring_buffers.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2016-2017 Carl Hetherington + Copyright (C) 2016-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -35,6 +35,7 @@ public: void put (boost::shared_ptr data, DCPTime time, int frame_rate); boost::optional get (float* out, int channels, int frames); + boost::optional peek () const; void clear (); Frame size () const; diff --git a/src/lib/butler.cc b/src/lib/butler.cc index e15cb9d3f..11ee033e9 100644 --- a/src/lib/butler.cc +++ b/src/lib/butler.cc @@ -124,14 +124,26 @@ Butler::should_run () const { if (_video.size() >= MAXIMUM_VIDEO_READAHEAD * 10) { /* This is way too big */ - throw ProgrammingError - (__FILE__, __LINE__, String::compose ("Butler video buffers reached %1 frames (audio is %2)", _video.size(), _audio.size())); + optional pos = _audio.peek(); + if (pos) { + throw ProgrammingError + (__FILE__, __LINE__, String::compose ("Butler video buffers reached %1 frames (audio is %2 at %3)", _video.size(), _audio.size(), pos->get())); + } else { + throw ProgrammingError + (__FILE__, __LINE__, String::compose ("Butler video buffers reached %1 frames (audio is %2)", _video.size(), _audio.size())); + } } if (_audio.size() >= MAXIMUM_AUDIO_READAHEAD * 10) { /* This is way too big */ - throw ProgrammingError - (__FILE__, __LINE__, String::compose ("Butler audio buffers reached %1 frames (video is %2)", _audio.size(), _video.size())); + optional pos = _audio.peek(); + if (pos) { + throw ProgrammingError + (__FILE__, __LINE__, String::compose ("Butler audio buffers reached %1 frames at %2 (video is %3)", _audio.size(), pos->get(), _video.size())); + } else { + throw ProgrammingError + (__FILE__, __LINE__, String::compose ("Butler audio buffers reached %1 frames (video is %3)", _audio.size(), _video.size())); + } } if (_video.size() >= MAXIMUM_VIDEO_READAHEAD * 2) {