Supporters update.
[dcpomatic.git] / src / lib / butler.cc
index 686fa9f7272849c70f035ef836f17be50096e91c..b2fbc6c60b630be0c0478dace3b922c735517878 100644 (file)
 
 
 #include "butler.h"
-#include "player.h"
-#include "util.h"
-#include "log.h"
-#include "dcpomatic_log.h"
-#include "cross.h"
 #include "compose.hpp"
+#include "cross.h"
+#include "dcpomatic_log.h"
 #include "exceptions.h"
+#include "log.h"
+#include "player.h"
+#include "util.h"
 #include "video_content.h"
 
 
 using std::cout;
-using std::pair;
+using std::function;
 using std::make_pair;
+using std::pair;
+using std::shared_ptr;
 using std::string;
 using std::weak_ptr;
-using std::shared_ptr;
 using boost::bind;
 using boost::optional;
-using std::function;
 using namespace dcpomatic;
 #if BOOST_VERSION >= 106100
 using namespace boost::placeholders;
@@ -62,14 +62,15 @@ using namespace boost::placeholders;
  */
 Butler::Butler (
        weak_ptr<const Film> film,
-       shared_ptr<Player> player,
+       Player& player,
        AudioMapping audio_mapping,
        int audio_channels,
        function<AVPixelFormat (AVPixelFormat)> pixel_format,
        VideoRange video_range,
        Image::Alignment alignment,
        bool fast,
-       bool prepare_only_proxy
+       bool prepare_only_proxy,
+       Audio audio
        )
        : _film (film)
        , _player (player)
@@ -81,20 +82,20 @@ Butler::Butler (
        , _stop_thread (false)
        , _audio_mapping (audio_mapping)
        , _audio_channels (audio_channels)
-       , _disable_audio (false)
+       , _disable_audio (audio == Audio::DISABLED)
        , _pixel_format (pixel_format)
        , _video_range (video_range)
        , _alignment (alignment)
        , _fast (fast)
        , _prepare_only_proxy (prepare_only_proxy)
 {
-       _player_video_connection = _player->Video.connect (bind (&Butler::video, this, _1, _2));
-       _player_audio_connection = _player->Audio.connect (bind (&Butler::audio, this, _1, _2, _3));
-       _player_text_connection = _player->Text.connect (bind (&Butler::text, this, _1, _2, _3, _4));
+       _player_video_connection = _player.Video.connect(bind(&Butler::video, this, _1, _2));
+       _player_audio_connection = _player.Audio.connect(bind(&Butler::audio, this, _1, _2, _3));
+       _player_text_connection = _player.Text.connect(bind(&Butler::text, this, _1, _2, _3, _4));
        /* The butler must hear about things first, otherwise it might not sort out suspensions in time for
           get_video() to be called in response to this signal.
        */
-       _player_change_connection = _player->Change.connect (bind (&Butler::player_change, this, _1, _2), boost::signals2::at_front);
+       _player_change_connection = _player.Change.connect(bind(&Butler::player_change, this, _1, _2), boost::signals2::at_front);
        _thread = boost::thread (bind(&Butler::thread, this));
 #ifdef DCPOMATIC_LINUX
        pthread_setname_np (_thread.native_handle(), "butler");
@@ -149,7 +150,7 @@ Butler::should_run () const
 
        if (_audio.size() >= MAXIMUM_AUDIO_READAHEAD * 10) {
                /* This is way too big */
-               optional<DCPTime> pos = _audio.peek();
+               auto pos = _audio.peek();
                if (pos) {
                        throw ProgrammingError
                                (__FILE__, __LINE__, String::compose ("Butler audio buffers reached %1 frames at %2 (video is %3)", _audio.size(), pos->get(), _video.size()));
@@ -199,7 +200,7 @@ try
                /* Do any seek that has been requested */
                if (_pending_seek_position) {
                        _finished = false;
-                       _player->seek (*_pending_seek_position, _pending_seek_accurate);
+                       _player.seek(*_pending_seek_position, _pending_seek_accurate);
                        _pending_seek_position = optional<DCPTime> ();
                }
 
@@ -209,7 +210,7 @@ try
                */
                while (should_run() && !_pending_seek_position) {
                        lm.unlock ();
-                       bool const r = _player->pass ();
+                       bool const r = _player.pass();
                        lm.lock ();
                        if (r) {
                                _finished = true;
@@ -394,14 +395,6 @@ Butler::get_audio (Behaviour behaviour, float* out, Frame frames)
 }
 
 
-void
-Butler::disable_audio ()
-{
-       boost::mutex::scoped_lock lm (_mutex);
-       _disable_audio = true;
-}
-
-
 pair<size_t, string>
 Butler::memory_used () const
 {
@@ -417,7 +410,7 @@ Butler::player_change (ChangeType type, int property)
                if (type == ChangeType::DONE) {
                        auto film = _film.lock();
                        if (film) {
-                               _video.reset_metadata (film, _player->video_container_size());
+                               _video.reset_metadata(film, _player.video_container_size());
                        }
                }
                return;