- VideoDecoder (boost::shared_ptr<const Film>);
-
- virtual void seek (VideoContent::Frame) = 0;
- virtual void seek_back () = 0;
-
- /** Emitted when a video frame is ready.
- * First parameter is the video image.
- * Second parameter is true if the image is the same as the last one that was emitted.
- * Third parameter is the frame within our source.
- */
- boost::signals2::signal<void (boost::shared_ptr<const Image>, bool, VideoContent::Frame)> Video;
-
-protected:
-
- void video (boost::shared_ptr<const Image>, bool, VideoContent::Frame);
- VideoContent::Frame _next_video_frame;
+ VideoDecoder (Decoder* parent, boost::shared_ptr<const Content> c);
+
+ friend struct video_decoder_fill_test1;
+ friend struct video_decoder_fill_test2;
+ friend struct ffmpeg_pts_offset_test;
+ friend void ffmpeg_decoder_sequential_test_one (boost::filesystem::path file, float fps, int gaps, int video_length);
+
+ ContentTime position (boost::shared_ptr<const Film>) const {
+ return _position;
+ }
+
+ void seek ();
+ void emit (boost::shared_ptr<const Film> film, boost::shared_ptr<const ImageProxy>, Frame frame);
+
+ /** @return true if the emitted data was accepted, false if not */
+ boost::signals2::signal<void (ContentVideo)> Data;
+
+private:
+ boost::shared_ptr<const Content> _content;
+ /** Frame of last thing to be emitted */
+ boost::optional<Frame> _last_emitted_frame;
+ boost::optional<Eyes> _last_emitted_eyes;
+ ContentTime _position;