X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Faudio_ring_buffers.cc;h=1a216ab33749399fadf51b24eb3392a3b3ee895d;hb=fc1441eeaa3c0805c37809685ea7a3f5ca173666;hp=d1375cb27e2eeeb80d3a2935a06a10cb3aee9b87;hpb=64ff57b866e19daa8ed16b08d0a8038f787948c1;p=dcpomatic.git diff --git a/src/lib/audio_ring_buffers.cc b/src/lib/audio_ring_buffers.cc index d1375cb27..1a216ab33 100644 --- a/src/lib/audio_ring_buffers.cc +++ b/src/lib/audio_ring_buffers.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2016-2019 Carl Hetherington + Copyright (C) 2016-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,26 +18,29 @@ */ + #include "audio_ring_buffers.h" #include "dcpomatic_assert.h" #include "exceptions.h" -#include #include + using std::min; using std::cout; using std::make_pair; using std::pair; using std::list; -using boost::shared_ptr; +using std::shared_ptr; using boost::optional; +using namespace dcpomatic; + AudioRingBuffers::AudioRingBuffers () - : _used_in_head (0) { } + /** @param frame_rate Frame rate in use; this is only used to check timing consistency of the incoming data */ void AudioRingBuffers::put (shared_ptr data, DCPTime time, int frame_rate) @@ -56,6 +59,7 @@ AudioRingBuffers::put (shared_ptr data, DCPTime time, int fr _buffers.push_back(make_pair(data, time)); } + /** @return time of the returned data; if it's not set this indicates an underrun */ optional AudioRingBuffers::get (float* out, int channels, int frames) @@ -75,7 +79,7 @@ AudioRingBuffers::get (float* out, int channels, int frames) return time; } - pair, DCPTime> front = _buffers.front (); + auto front = _buffers.front (); if (!time) { time = front.second + DCPTime::from_frames(_used_in_head, 48000); } @@ -103,16 +107,18 @@ 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 {}; } return _buffers.front().second; } + void AudioRingBuffers::clear () { @@ -121,13 +127,14 @@ AudioRingBuffers::clear () _used_in_head = 0; } + Frame AudioRingBuffers::size () const { boost::mutex::scoped_lock lm (_mutex); Frame s = 0; - for (list, DCPTime> >::const_iterator i = _buffers.begin(); i != _buffers.end(); ++i) { - s += i->first->frames(); + for (auto const& i: _buffers) { + s += i.first->frames(); } return s - _used_in_head; }