&& width == new_width && height == new_height);
}
+static void
+_set_latency (GstVaH264Dec * self, const GstH264SPS * sps)
+{
+ GstClockTime duration, min, max;
+ gint fps_d, fps_n;
+ guint32 num_reorder_frames;
+
+ fps_d = self->output_state->info.fps_d;
+ fps_n = self->output_state->info.fps_n;
+
+ /* if 0/1 then 25/1 */
+ if (fps_n == 0) {
+ fps_n = 25;
+ fps_d = 1;
+ }
+
+ num_reorder_frames = 1;
+ if (sps->vui_parameters_present_flag
+ && sps->vui_parameters.bitstream_restriction_flag)
+ num_reorder_frames = sps->vui_parameters.num_reorder_frames;
+ if (num_reorder_frames > self->dpb_size)
+ num_reorder_frames = 1;
+
+ duration = gst_util_uint64_scale_int (GST_SECOND, fps_d, fps_n);
+ min = num_reorder_frames * duration;
+ max = self->dpb_size * duration;
+
+ GST_LOG_OBJECT (self,
+ "latency min %" G_GUINT64_FORMAT " max %" G_GUINT64_FORMAT, min, max);
+
+ gst_video_decoder_set_latency (GST_VIDEO_DECODER (self), min, max);
+}
+
static gboolean
gst_va_h264_dec_new_sequence (GstH264Decoder * decoder, const GstH264SPS * sps,
gint max_dpb_size)
GST_ERROR_OBJECT (self, "Failed to negotiate with downstream");
return FALSE;
}
+
+ _set_latency (self, sps);
}
return TRUE;