X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fplayer.h;h=903d011d0aad99a64bc4650786f20c174e8b65a8;hb=d0d584a7dde6de383302615634fdee17e9724fe8;hp=e4fb832209025117a3f5c02414a3d429bf62bc5a;hpb=46cd0fe7b5b514f0d9456b25f670679cc584a218;p=dcpomatic.git diff --git a/src/lib/player.h b/src/lib/player.h index e4fb83220..903d011d0 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -23,24 +23,23 @@ #include #include #include -#include "video_source.h" -#include "audio_source.h" -#include "video_sink.h" -#include "audio_sink.h" #include "playlist.h" #include "audio_buffers.h" +#include "content.h" class Job; class Film; class Playlist; class AudioContent; class Piece; +class Image; +class Resampler; /** @class Player * @brief A class which can `play' a Playlist; emitting its audio and video. */ -class Player : public VideoSource, public AudioSource, public boost::enable_shared_from_this +class Player : public boost::enable_shared_from_this { public: Player (boost::shared_ptr, boost::shared_ptr); @@ -51,7 +50,6 @@ public: bool pass (); void seek (Time); void seek_back (); - void seek_forward (); /** @return position that we are at; ie the time of the next thing we will emit on pass() */ Time position () const { @@ -60,10 +58,20 @@ public: void set_video_container_size (libdcp::Size); + /** Emitted when a video frame is ready. + * First parameter is the video image. + * Second parameter is true if the image is the same as the last one that was emitted. + * Third parameter is the time. + */ + boost::signals2::signal, bool, Time)> Video; + + /** Emitted when some audio data is ready */ + boost::signals2::signal, Time)> Audio; + private: - void process_video (boost::weak_ptr, boost::shared_ptr, bool, Time); - void process_audio (boost::weak_ptr, boost::shared_ptr, Time); + void process_video (boost::weak_ptr, boost::shared_ptr, bool, VideoContent::Frame); + void process_audio (boost::weak_ptr, boost::shared_ptr, AudioContent::Frame); void setup_pieces (); void playlist_changed (); void content_changed (boost::weak_ptr, int); @@ -71,6 +79,7 @@ private: void add_black_piece (Time, Time); void add_silent_piece (Time, Time); void flush (); + boost::shared_ptr resampler (boost::shared_ptr); boost::shared_ptr _film; boost::shared_ptr _playlist; @@ -85,6 +94,7 @@ private: AudioBuffers _audio_buffers; Time _next_audio; boost::optional _video_container_size; + std::map, boost::shared_ptr > _resamplers; }; #endif