summaryrefslogtreecommitdiff
path: root/src/lib/encoder.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-01-11 18:50:50 +0000
committerCarl Hetherington <cth@carlh.net>2013-01-11 18:50:50 +0000
commitd0babb26ab341026fe227de810ed30c6c9f65cf2 (patch)
tree13994b39d796e855cf94a8413a017d493e3def6a /src/lib/encoder.h
parent9cec72e1d8a6ef5b4fdb656a9b7713ea750548e3 (diff)
Try a separate writer thread.
Diffstat (limited to 'src/lib/encoder.h')
-rw-r--r--src/lib/encoder.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/lib/encoder.h b/src/lib/encoder.h
index 52ccfc166..fff264963 100644
--- a/src/lib/encoder.h
+++ b/src/lib/encoder.h
@@ -51,6 +51,7 @@ class AudioBuffers;
class Film;
class ServerDescription;
class DCPVideoFrame;
+class EncodedData;
/** @class Encoder
* @brief Encoder to J2K and WAV for DCP.
@@ -119,6 +120,9 @@ private:
void terminate_worker_threads ();
void link (std::string, std::string) const;
+ void writer_thread ();
+ void terminate_writer_thread ();
+
#if HAVE_SWRESAMPLE
SwrContext* _swr_context;
#endif
@@ -133,11 +137,17 @@ private:
int64_t _audio_frames_written;
boost::optional<int> _last_real_frame;
- bool _process_end;
- std::list<boost::shared_ptr<DCPVideoFrame> > _queue;
+ bool _terminate_encoder;
+ std::list<boost::shared_ptr<DCPVideoFrame> > _encode_queue;
std::list<boost::thread *> _worker_threads;
mutable boost::mutex _worker_mutex;
boost::condition _worker_condition;
+
+ boost::thread* _writer_thread;
+ bool _terminate_writer;
+ std::list<std::pair<boost::shared_ptr<EncodedData>, int> > _write_queue;
+ mutable boost::mutex _writer_mutex;
+ boost::condition _writer_condition;
};
#endif