v4l2videodec: only set latency if the frame duration is valid

If the duration of the v4l2object is GST_CLOCK_TIME_NONE, because the
sink did not specify a framerate in the caps and the driver accepts the
framerate, the decoder element uses GST_CLOCK_TIME_NONE to calculate and
set the element latency.

While this is a bug of the capture driver, the decoder element should
not use the invalid duration to calculate a latency, but print a warning
instead.

https://bugzilla.gnome.org/show_bug.cgi?id=779466
This commit is contained in:
Philipp Zabel 2016-03-16 16:24:55 +01:00 committed by Nicolas Dufresne
parent b30dee98e6
commit 1d43f6d852

View file

@ -752,8 +752,14 @@ gst_v4l2_video_dec_decide_allocation (GstVideoDecoder * decoder,
ret = GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder, ret = GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder,
query); query);
latency = self->v4l2capture->min_buffers * self->v4l2capture->duration; if (GST_CLOCK_TIME_IS_VALID (self->v4l2capture->duration)) {
gst_video_decoder_set_latency (decoder, latency, latency); GST_DEBUG_OBJECT (self, "Setting latency: %u * %llu",
self->v4l2capture->min_buffers, self->v4l2capture->duration);
latency = self->v4l2capture->min_buffers * self->v4l2capture->duration;
gst_video_decoder_set_latency (decoder, latency, latency);
} else {
GST_WARNING_OBJECT (self, "Duration invalid, not setting latency");
}
return ret; return ret;
} }