#include "wx_util.h"
#include "film_viewer.h"
#include "lib/butler.h"
+#include "lib/dcpomatic_log.h"
#include <boost/optional.hpp>
using std::pair;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::optional;
VideoView::VideoView (FilmViewer* viewer)
: _viewer (viewer)
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- , _in_watermark (false)
-#endif
, _state_timer ("viewer")
, _video_frame_rate (0)
, _eyes (EYES_LEFT)
/** Could be called from any thread.
* @param non_blocking true to return false quickly if no video is available quickly.
- * @return false if we gave up because it would take too long, otherwise true.
+ * @return FAIL if there's no frame, AGAIN if the method should be called again, or SUCCESS
+ * if there is a frame.
*/
-bool
+VideoView::NextFrameResult
VideoView::get_next_frame (bool non_blocking)
{
if (length() == dcpomatic::DCPTime()) {
- return true;
+ return FAIL;
}
shared_ptr<Butler> butler = _viewer->butler ();
if (!butler) {
- return false;
+ return FAIL;
}
add_get ();
do {
Butler::Error e;
pair<shared_ptr<PlayerVideo>, dcpomatic::DCPTime> pv = butler->get_video (!non_blocking, &e);
- if (!pv.first && e == Butler::AGAIN) {
- return false;
+ if (e.code == Butler::Error::DIED) {
+ LOG_ERROR ("Butler died with %1", e.summary());
+ }
+ if (!pv.first) {
+ return e.code == Butler::Error::AGAIN ? AGAIN : FAIL;
}
_player_video = pv;
} while (
++_errored;
}
- return true;
+ return SUCCESS;
}
dcpomatic::DCPTime
}
bool
-VideoView::refresh_metadata (shared_ptr<const Film> film, dcp::Size video_container_size, dcp::Size film_frame_size)
+VideoView::reset_metadata (shared_ptr<const Film> film, dcp::Size player_video_container_size)
{
pair<shared_ptr<PlayerVideo>, dcpomatic::DCPTime> pv = player_video ();
if (!pv.first) {
return false;
}
- if (!pv.first->reset_metadata (film, video_container_size, film_frame_size)) {
+ if (!pv.first->reset_metadata(film, player_video_container_size)) {
return false;
}