X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdecoder.h;h=85b256f5bbe592629b8dad0c2b9c12396816aa73;hb=6e8e4f7ae9a9ae243a1b7d9e17f6b6cacae277b3;hp=805955b9d900bde6af57ab46990bca9b038b1be6;hpb=009a58293bf2e9727d544d1a2648422cc395d81e;p=dcpomatic.git diff --git a/src/lib/decoder.h b/src/lib/decoder.h index 805955b9d..85b256f5b 100644 --- a/src/lib/decoder.h +++ b/src/lib/decoder.h @@ -30,6 +30,7 @@ #include #include #include "util.h" +#include "stream.h" class Job; class FilmState; @@ -37,6 +38,7 @@ class Options; class Image; class Log; class DelayLine; +class TimedSubtitle; class Subtitle; /** @class Decoder. @@ -78,6 +80,17 @@ public: int last_video_frame () const { return _video_frame; } + + virtual std::vector audio_streams () const { + return std::vector (); + } + + virtual std::vector subtitle_streams () const { + return std::vector (); + } + + virtual void set_audio_stream (Stream s) {} + virtual void set_subtitle_stream (Stream s) {} /** Emitted when a video frame is ready. * First parameter is the frame. @@ -86,11 +99,8 @@ public: */ sigc::signal, int, boost::shared_ptr > Video; - /** Emitted when some audio data is ready. - * First parameter is the interleaved sample data, format is given in the FilmState. - * Second parameter is the size of the data. - */ - sigc::signal Audio; + /** Emitted when some audio data is ready */ + sigc::signal > Audio; protected: /** perform a single pass at our content */ @@ -103,7 +113,7 @@ protected: void process_video (AVFrame *); void process_audio (uint8_t *, int); - void process_subtitle (boost::shared_ptr); + void process_subtitle (boost::shared_ptr); /** our FilmState */ boost::shared_ptr _fs; @@ -124,6 +134,8 @@ protected: private: void setup_video_filters (); + void emit_audio (uint8_t* data, int size); + int bytes_per_audio_sample () const; /** last video frame to be processed */ int _video_frame; @@ -140,7 +152,7 @@ private: */ int64_t _audio_frames_processed; - boost::shared_ptr _subtitle; + boost::shared_ptr _timed_subtitle; }; #endif