Runs.
[dcpomatic.git] / src / lib / playlist.h
index 4add76344e7c5b1af299e1376d0e397d544c7ed3..b42d46036bb9e37b2c5679c8bd4c503549d6f9b0 100644 (file)
 
 */
 
+#include <list>
 #include <boost/shared_ptr.hpp>
+#include <boost/enable_shared_from_this.hpp>
 #include "video_source.h"
+#include "audio_source.h"
 #include "video_sink.h"
+#include "audio_sink.h"
 
 class Content;
+class FFmpegContent;
+class FFmpegDecoder;
+class ImageMagickContent;
+class ImageMagickDecoder;
+class SndfileContent;
+class SndfileDecoder;
+class Job;
+class Film;
 
-class Playlist : public VideoSource, public AudioSource
+class Playlist : public VideoSource, public AudioSource, public VideoSink, public AudioSink, public boost::enable_shared_from_this<Playlist>
 {
 public:
-       Playlist (std::list<boost::shared_ptr<Content> >);
+       Playlist (boost::shared_ptr<const Film>, std::list<boost::shared_ptr<Content> >);
+
+       ContentAudioFrame audio_length () const;
+       int audio_channels () const;
+       int audio_frame_rate () const;
+       int64_t audio_channel_layout () const;
+       bool has_audio () const;
+       
+       float video_frame_rate () const;
+       libdcp::Size video_size () const;
+
+       void disable_video ();
+
+       bool pass ();
+       void set_progress (boost::shared_ptr<Job>);
+
+private:
+       void process_video (boost::shared_ptr<Image> i, bool same, boost::shared_ptr<Subtitle> s);
+       void process_audio (boost::shared_ptr<AudioBuffers>);
+       
+       enum {
+               VIDEO_NONE,
+               VIDEO_FFMPEG,
+               VIDEO_IMAGEMAGICK
+       } _video_from;
+       
+       enum {
+               AUDIO_NONE,
+               AUDIO_FFMPEG,
+               AUDIO_SNDFILE
+       } _audio_from;
+
+       boost::shared_ptr<FFmpegContent> _ffmpeg;
+       std::list<boost::shared_ptr<ImageMagickContent> > _imagemagick;
+       std::list<boost::shared_ptr<SndfileContent> > _sndfile;
+
+       boost::shared_ptr<FFmpegDecoder> _ffmpeg_decoder;
+       bool _ffmpeg_decoder_done;
+       std::list<boost::shared_ptr<ImageMagickDecoder> > _imagemagick_decoders;
+       std::list<boost::shared_ptr<ImageMagickDecoder> >::iterator _imagemagick_decoder;
+       std::list<boost::shared_ptr<SndfileDecoder> > _sndfile_decoders;
 };