+ boost::shared_ptr<VideoDecoder> video;
+ boost::shared_ptr<AudioDecoder> audio;
+ boost::shared_ptr<SubtitleDecoder> subtitle;
+
+ enum PassReason {
+ PASS_REASON_VIDEO,
+ PASS_REASON_AUDIO,
+ PASS_REASON_SUBTITLE
+ };
+
+ /** Seek so that the next pass() will yield the next thing
+ * (video/sound frame, subtitle etc.) at or after the requested
+ * time. Pass accurate = true to try harder to ensure that, at worst,
+ * the next thing we yield comes before `time'. This may entail
+ * seeking some way before `time' to be on the safe side.
+ * Alternatively, if seeking is 100% accurate for this decoder,
+ * it may seek to just the right spot.
+ */
+ virtual void seek (ContentTime time, bool accurate) = 0;
+
+ /** @return true if this decoder has already returned all its data and will give no more */
+ virtual bool pass (PassReason, bool accurate) = 0;
+
+ /** Ensure that any future get() calls return data that reflect
+ * changes in our content's settings.