diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-11-15 22:26:16 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-11-15 22:26:16 +0000 |
| commit | 4fbd1901fdabc829cfa7e7d4d0c1272bba87033c (patch) | |
| tree | 416701b4a2923cdc16983311239bd311282e8438 /src/lib/video_decoder.h | |
| parent | f5c40275a2dc444c295a547dfedcd8f9eee2bcb2 (diff) | |
Untested external audio support; AB transcodes still broken.
Diffstat (limited to 'src/lib/video_decoder.h')
| -rw-r--r-- | src/lib/video_decoder.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/lib/video_decoder.h b/src/lib/video_decoder.h new file mode 100644 index 000000000..df06b7cd9 --- /dev/null +++ b/src/lib/video_decoder.h @@ -0,0 +1,60 @@ +#ifndef DVDOMATIC_VIDEO_DECODER_H +#define DVDOMATIC_VIDEO_DECODER_H + +#include "video_source.h" +#include "stream.h" +#include "decoder.h" + +class VideoDecoder : public VideoSource, public virtual Decoder +{ +public: + VideoDecoder (boost::shared_ptr<Film>, boost::shared_ptr<const Options>, Job *); + + /** @return video frames per second, or 0 if unknown */ + virtual float frames_per_second () const = 0; + /** @return native size in pixels */ + virtual Size native_size () const = 0; + + virtual int time_base_numerator () const = 0; + virtual int time_base_denominator () const = 0; + virtual int sample_aspect_ratio_numerator () const = 0; + virtual int sample_aspect_ratio_denominator () const = 0; + + virtual void set_subtitle_stream (boost::optional<SubtitleStream>); + + SourceFrame video_frame () const { + return _video_frame; + } + + boost::optional<SubtitleStream> subtitle_stream () const { + return _subtitle_stream; + } + + std::vector<SubtitleStream> subtitle_streams () const { + return _subtitle_streams; + } + +protected: + + virtual PixelFormat pixel_format () const = 0; + void set_progress () const; + + void emit_video (boost::shared_ptr<Image>); + void emit_subtitle (boost::shared_ptr<TimedSubtitle>); + void repeat_last_video (); + + boost::optional<SubtitleStream> _subtitle_stream; + std::vector<SubtitleStream> _subtitle_streams; + +private: + void signal_video (boost::shared_ptr<Image>, boost::shared_ptr<Subtitle>); + + SourceFrame _video_frame; + + boost::shared_ptr<TimedSubtitle> _timed_subtitle; + + boost::shared_ptr<Image> _last_image; + boost::shared_ptr<Subtitle> _last_subtitle; +}; + +#endif |
