/*
- Copyright (C) 2016-2017 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2016-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+
#ifndef DCPOMATIC_AUDIO_RING_BUFFERS_H
#define DCPOMATIC_AUDIO_RING_BUFFERS_H
+
#include "audio_buffers.h"
#include "types.h"
#include "dcpomatic_time.h"
-#include <boost/shared_ptr.hpp>
#include <boost/thread.hpp>
#include <list>
-class AudioRingBuffers : public boost::noncopyable
+
+class AudioRingBuffers
{
public:
AudioRingBuffers ();
- void put (boost::shared_ptr<const AudioBuffers> data, DCPTime time);
- void get (float* out, int channels, int frames);
+ AudioRingBuffers (AudioBuffers const&) = delete;
+ AudioRingBuffers& operator= (AudioBuffers const&) = delete;
- void clear ();
- Frame size ();
+ void put (std::shared_ptr<const AudioBuffers> data, dcpomatic::DCPTime time, int frame_rate);
+ boost::optional<dcpomatic::DCPTime> get (float* out, int channels, int frames);
+ boost::optional<dcpomatic::DCPTime> peek () const;
- DCPTime latest () const {
- boost::mutex::scoped_lock lm (_mutex);
- return _latest;
- }
+ void clear ();
+ /** @return number of frames currently available */
+ Frame size () const;
private:
mutable boost::mutex _mutex;
- std::list<boost::shared_ptr<const AudioBuffers> > _buffers;
- DCPTime _latest;
- int _used_in_head;
+ std::list<std::pair<std::shared_ptr<const AudioBuffers>, dcpomatic::DCPTime>> _buffers;
+ int _used_in_head = 0;
};
+
#endif