X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Fvideo_view.h;h=d3a15d38c3e9573a252acecf49134333120be24a;hp=f9e0670435ed13edaa2e919cc373e11d12a0a48d;hb=bb949ec65adf95f4a2c7dd5ee7e97b9daaaf3d3f;hpb=89e92b3e7effafd2ca3aa1e9300777f2d2fb6183 diff --git a/src/wx/video_view.h b/src/wx/video_view.h index f9e067043..d3a15d38c 100644 --- a/src/wx/video_view.h +++ b/src/wx/video_view.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2019 Carl Hetherington + Copyright (C) 2019-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,29 +18,35 @@ */ + #ifndef DCPOMATIC_VIDEO_VIEW_H #define DCPOMATIC_VIDEO_VIEW_H + #include "lib/dcpomatic_time.h" #include "lib/timer.h" #include "lib/types.h" #include "lib/exception_store.h" -#include #include #include -#include + class Image; class wxWindow; class FilmViewer; +class Player; class PlayerVideo; -class VideoView : public ExceptionStore, public boost::noncopyable + +class VideoView : public ExceptionStore { public: VideoView (FilmViewer* viewer); virtual ~VideoView () {} + VideoView (VideoView const&) = delete; + VideoView& operator= (VideoView const&) = delete; + /** @return the thing displaying the image */ virtual wxWindow* get () const = 0; /** Re-make and display the image from the current _player_video */ @@ -49,11 +55,18 @@ public: virtual void start (); /** Called when playback stops */ virtual void stop () {} + + enum NextFrameResult { + FAIL, + AGAIN, + SUCCESS + }; + /** Get the next frame and display it; used after seek */ - virtual bool display_next_frame (bool) = 0; + virtual NextFrameResult display_next_frame (bool) = 0; void clear (); - bool refresh_metadata (boost::shared_ptr film, dcp::Size video_container_size, dcp::Size film_frame_size); + bool reset_metadata (std::shared_ptr film, dcp::Size player_video_container_size); /** Emitted from the GUI thread when our display changes in size */ boost::signals2::signal Sized; @@ -66,6 +79,11 @@ public: return _dropped; } + int errored () const { + boost::mutex::scoped_lock lm (_mutex); + return _errored; + } + int gets () const { boost::mutex::scoped_lock lm (_mutex); return _gets; @@ -106,7 +124,7 @@ public: } protected: - bool get_next_frame (bool non_blocking); + NextFrameResult get_next_frame (bool non_blocking); boost::optional time_until_next_frame () const; dcpomatic::DCPTime one_video_frame () const; @@ -120,7 +138,7 @@ protected: return _length; } - std::pair, dcpomatic::DCPTime> player_video () const { + std::pair, dcpomatic::DCPTime> player_video () const { boost::mutex::scoped_lock lm (_mutex); return _player_video; } @@ -137,27 +155,23 @@ protected: FilmViewer* _viewer; -#ifdef DCPOMATIC_VARIANT_SWAROOP - bool _in_watermark; - int _watermark_x; - int _watermark_y; -#endif - StateTimer _state_timer; private: /** Mutex protecting all the state in this class */ mutable boost::mutex _mutex; - std::pair, dcpomatic::DCPTime> _player_video; - int _video_frame_rate; + std::pair, dcpomatic::DCPTime> _player_video; + int _video_frame_rate = 0; /** length of the film we are playing, or 0 if there is none */ dcpomatic::DCPTime _length; - Eyes _eyes; - bool _three_d; + Eyes _eyes = Eyes::LEFT; + bool _three_d = false; - int _dropped; - int _gets; + int _dropped = 0; + int _errored = 0; + int _gets = 0; }; + #endif