summaryrefslogtreecommitdiff
path: root/src/lib/player_video.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-04-14 22:16:27 +0200
committerCarl Hetherington <cth@carlh.net>2020-04-14 22:16:27 +0200
commit4ab86ef0295bcd6bb9297996a06006f371d22bae (patch)
treefefc1706a67a10f6aa1a7c5d576e5cb8826ce950 /src/lib/player_video.cc
parent3b31d2d8a129ae6d8d267427bd6b5bc444b40b2a (diff)
Ignore and report failures to decode frames during playback (#1593).
Diffstat (limited to 'src/lib/player_video.cc')
-rw-r--r--src/lib/player_video.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/lib/player_video.cc b/src/lib/player_video.cc
index bd643af60..8d55ffb2e 100644
--- a/src/lib/player_video.cc
+++ b/src/lib/player_video.cc
@@ -54,7 +54,8 @@ PlayerVideo::PlayerVideo (
optional<ColourConversion> colour_conversion,
VideoRange video_range,
weak_ptr<Content> content,
- optional<Frame> video_frame
+ optional<Frame> video_frame,
+ bool error
)
: _in (in)
, _crop (crop)
@@ -67,6 +68,7 @@ PlayerVideo::PlayerVideo (
, _video_range (video_range)
, _content (content)
, _video_frame (video_frame)
+ , _error (error)
{
}
@@ -81,6 +83,7 @@ PlayerVideo::PlayerVideo (shared_ptr<cxml::Node> node, shared_ptr<Socket> socket
_eyes = (Eyes) node->number_child<int> ("Eyes");
_part = (Part) node->number_child<int> ("Part");
_video_range = (VideoRange) node->number_child<int>("VideoRange");
+ _error = node->optional_bool_child("Error").get_value_or (false);
/* Assume that the ColourConversion uses the current state version */
_colour_conversion = ColourConversion::from_xml (node, Film::current_state_version);
@@ -133,6 +136,7 @@ PlayerVideo::make_image (function<AVPixelFormat (AVPixelFormat)> pixel_format, b
_image_fade = _fade;
ImageProxy::Result prox = _in->image (_inter_size);
+ _error = prox.error;
Crop total_crop = _crop;
switch (_part) {
@@ -194,6 +198,7 @@ PlayerVideo::add_metadata (xmlpp::Node* node) const
node->add_child("Eyes")->add_child_text (raw_convert<string> (static_cast<int> (_eyes)));
node->add_child("Part")->add_child_text (raw_convert<string> (static_cast<int> (_part)));
node->add_child("VideoRange")->add_child_text(raw_convert<string>(static_cast<int>(_video_range)));
+ node->add_child("Error")->add_child_text(_error ? "1" : "0");
if (_colour_conversion) {
_colour_conversion.get().as_xml (node);
}
@@ -315,7 +320,8 @@ PlayerVideo::shallow_copy () const
_colour_conversion,
_video_range,
_content,
- _video_frame
+ _video_frame,
+ _error
)
);
}