#include <boost/optional.hpp>
using std::pair;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::optional;
VideoView::VideoView (FilmViewer* viewer)
/** 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 ();
if (e.code == Butler::Error::DIED) {
LOG_ERROR ("Butler died with %1", e.summary());
}
- if (!pv.first && e.code == Butler::Error::AGAIN) {
- return false;
+ 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;
}