summaryrefslogtreecommitdiff
path: root/src/lib/video_decoder.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-11-15 22:26:16 +0000
committerCarl Hetherington <cth@carlh.net>2012-11-15 22:26:16 +0000
commit4fbd1901fdabc829cfa7e7d4d0c1272bba87033c (patch)
tree416701b4a2923cdc16983311239bd311282e8438 /src/lib/video_decoder.h
parentf5c40275a2dc444c295a547dfedcd8f9eee2bcb2 (diff)
Untested external audio support; AB transcodes still broken.
Diffstat (limited to 'src/lib/video_decoder.h')
-rw-r--r--src/lib/video_decoder.h60
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