summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-04-19 00:34:03 +0000
committerCarl Hetherington <cth@carlh.net>2019-04-19 00:34:03 +0000
commit64ff57b866e19daa8ed16b08d0a8038f787948c1 (patch)
treefa610410f081e568854a971ec02987b8328b8772 /src/lib
parent5fc68cc97134b5d49479dadff05725124e56a513 (diff)
Hopefully better errors on large video/audio disagreements.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_ring_buffers.cc12
-rw-r--r--src/lib/audio_ring_buffers.h3
-rw-r--r--src/lib/butler.cc20
3 files changed, 29 insertions, 6 deletions
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 <cth@carlh.net>
+ Copyright (C) 2016-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -103,6 +103,16 @@ AudioRingBuffers::get (float* out, int channels, int frames)
return time;
}
+optional<DCPTime>
+AudioRingBuffers::peek () const
+{
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_buffers.empty()) {
+ return optional<DCPTime>();
+ }
+ 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 <cth@carlh.net>
+ Copyright (C) 2016-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -35,6 +35,7 @@ public:
void put (boost::shared_ptr<const AudioBuffers> data, DCPTime time, int frame_rate);
boost::optional<DCPTime> get (float* out, int channels, int frames);
+ boost::optional<DCPTime> 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<DCPTime> 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<DCPTime> 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) {