summaryrefslogtreecommitdiff
path: root/src/lib/writer.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-02-02 13:46:20 +0000
committerCarl Hetherington <cth@carlh.net>2013-02-02 13:46:20 +0000
commitaeb20874df252fd8d36f5d3742ed8e34f2215367 (patch)
treef00d1d8fdc41d8ec07e3c55fedba2e724a2b0188 /src/lib/writer.h
parent8e7d91ac8b945d66a65fc7b20249cd1c7796c7fa (diff)
First try at doing fake writes.
Diffstat (limited to 'src/lib/writer.h')
-rw-r--r--src/lib/writer.h27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/lib/writer.h b/src/lib/writer.h
index 768d63448..57609825d 100644
--- a/src/lib/writer.h
+++ b/src/lib/writer.h
@@ -33,12 +33,35 @@ namespace libdcp {
class SoundAssetWriter;
}
+struct QueueItem
+{
+public:
+ enum Type {
+ FULL,
+ FAKE,
+ REPEAT
+ } type;
+
+ /** encoded data for FULL */
+ boost::shared_ptr<const EncodedData> encoded;
+ /** size of data for FAKE */
+ int size;
+ /** frame index */
+ int frame;
+};
+
+bool operator< (QueueItem const & a, QueueItem const & b);
+bool operator== (QueueItem const & a, QueueItem const & b);
+
class Writer
{
public:
Writer (boost::shared_ptr<Film>);
+
+ bool can_fake_write (int) const;
void write (boost::shared_ptr<const EncodedData>, int);
+ void fake_write (int);
void write (boost::shared_ptr<const AudioBuffers>);
void repeat (int f);
void finish ();
@@ -53,11 +76,11 @@ private:
boost::thread* _thread;
bool _finish;
- std::list<std::pair<boost::shared_ptr<const EncodedData>, int> > _queue;
+ std::list<QueueItem> _queue;
mutable boost::mutex _mutex;
boost::condition _condition;
boost::shared_ptr<const EncodedData> _last_written;
- std::list<int> _pending;
+ std::list<QueueItem> _pending;
int _last_written_frame;
static const unsigned int _maximum_frames_in_memory;