X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Fvideo_view.h;h=4a94aa879bf4bc3beddf093b50c7ea8dc7eee3be;hp=8b86b2ba188da5d50ba4753a080e130bec9c073b;hb=9001a63be211fd8e97431f8fc07c66af01554f5a;hpb=c76b1fd7fe41a7e371ae1fe1dad21c87a19839f1 diff --git a/src/wx/video_view.h b/src/wx/video_view.h index 8b86b2ba1..4a94aa879 100644 --- a/src/wx/video_view.h +++ b/src/wx/video_view.h @@ -21,35 +21,95 @@ #ifndef DCPOMATIC_VIDEO_VIEW_H #define DCPOMATIC_VIDEO_VIEW_H +#include "lib/dcpomatic_time.h" +#include "lib/timer.h" #include #include +#include class Image; class wxWindow; class FilmViewer; +class PlayerVideo; class VideoView { public: - VideoView (FilmViewer* viewer) - : _viewer (viewer) -#ifdef DCPOMATIC_VARIANT_SWAROOP - , _in_watermark (false) -#endif - {} - + VideoView (FilmViewer* viewer); virtual ~VideoView () {} virtual void set_image (boost::shared_ptr image) = 0; virtual wxWindow* get () const = 0; + /** Redraw the view after something has changed like content outlining, + * the film being removed, etc. + */ virtual void update () = 0; + virtual void start (); + /* XXX_b: make pure */ + virtual void stop () {} + + void clear (); + boost::signals2::signal Sized; + virtual bool display_next_frame (bool) = 0; + /* XXX_b: to remove */ - virtual void timer () {} + virtual void display_player_video () {} + + int dropped () const { + boost::mutex::scoped_lock lm (_mutex); + return _dropped; + } + + StateTimer const & state_timer () const { + return _state_timer; + } + + dcpomatic::DCPTime position () const { + boost::mutex::scoped_lock lm (_mutex); + return _player_video.second; + } + + void set_video_frame_rate (int r) { + boost::mutex::scoped_lock lm (_mutex); + _video_frame_rate = r; + } + + void set_length (dcpomatic::DCPTime len) { + boost::mutex::scoped_lock lm (_mutex); + _length = len; + } protected: + /* XXX_b: to remove */ + friend class FilmViewer; + + bool get_next_frame (bool non_blocking); + int time_until_next_frame () const; + dcpomatic::DCPTime one_video_frame () const; + + int video_frame_rate () const { + boost::mutex::scoped_lock lm (_mutex); + return _video_frame_rate; + } + + dcpomatic::DCPTime length () const { + boost::mutex::scoped_lock lm (_mutex); + return _length; + } + + std::pair, dcpomatic::DCPTime> player_video () const { + boost::mutex::scoped_lock lm (_mutex); + return _player_video; + } + + void add_dropped () { + boost::mutex::scoped_lock lm (_mutex); + ++_dropped; + } + FilmViewer* _viewer; #ifdef DCPOMATIC_VARIANT_SWAROOP @@ -57,6 +117,19 @@ protected: int _watermark_x; int _watermark_y; #endif + + StateTimer _state_timer; + +private: + /** Mutex protecting all the state in VideoView */ + mutable boost::mutex _mutex; + + std::pair, dcpomatic::DCPTime> _player_video; + int _video_frame_rate; + /** length of the film we are playing, or 0 if there is none */ + dcpomatic::DCPTime _length; + + int _dropped; }; #endif