#include "util.h"
#include "log.h"
#include "compose.hpp"
+#include "exceptions.h"
#include <boost/weak_ptr.hpp>
#include <boost/shared_ptr.hpp>
_player_video_connection = _player->Video.connect (bind (&Butler::video, this, _1, _2));
_player_audio_connection = _player->Audio.connect (bind (&Butler::audio, this, _1));
_thread = new boost::thread (bind (&Butler::thread, this));
+#ifdef DCPOMATIC_LINUX
+ pthread_setname_np (_thread->native_handle(), "butler");
+#endif
/* Create some threads to do work on the PlayerVideos we are creating; at present this is used to
multi-thread JPEG2000 decoding.
bool
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()));
+ }
+
+ 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()));
+ }
+
if (_video.size() >= MAXIMUM_VIDEO_READAHEAD * 2) {
LOG_WARNING ("Butler video buffers reached %1 frames (audio is %2)", _video.size(), _audio.size());
}
void
Butler::video (shared_ptr<PlayerVideo> video, DCPTime time)
{
- {
- boost::mutex::scoped_lock lm (_mutex);
- if (_pending_seek_position) {
- /* Don't store any video while a seek is pending */
- return;
- }
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_pending_seek_position) {
+ /* Don't store any video while a seek is pending */
+ return;
}
_prepare_service.post (bind (&Butler::prepare, this, weak_ptr<PlayerVideo>(video)));