From d03f5499bdcb8be1416506d46ad9ac7003244f66 Mon Sep 17 00:00:00 2001 From: Alessandro Decina Date: Sun, 14 Oct 2012 11:39:55 +0200 Subject: [PATCH] vc1parse: set duration on output buffers This has the nice side effect of avoiding hanging at EOS with truncated asf clips. Conflicts: gst/videoparsers/gstvc1parse.c --- gst/videoparsers/gstvc1parse.c | 10 +++++++++- gst/videoparsers/gstvc1parse.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gst/videoparsers/gstvc1parse.c b/gst/videoparsers/gstvc1parse.c index 16fd55ccc7..9763f32224 100644 --- a/gst/videoparsers/gstvc1parse.c +++ b/gst/videoparsers/gstvc1parse.c @@ -260,6 +260,7 @@ gst_vc1_parse_reset (GstVC1Parse * vc1parse) vc1parse->width = 0; vc1parse->height = 0; vc1parse->fps_n = vc1parse->fps_d = 0; + vc1parse->frame_duration = GST_CLOCK_TIME_NONE; vc1parse->fps_from_caps = FALSE; vc1parse->par_n = vc1parse->par_d = 0; vc1parse->par_from_caps = FALSE; @@ -609,9 +610,13 @@ gst_vc1_parse_update_caps (GstVC1Parse * vc1parse) g_assert (vc1parse->width != 0 && vc1parse->height != 0); gst_caps_set_simple (caps, "width", G_TYPE_INT, vc1parse->width, "height", G_TYPE_INT, vc1parse->height, NULL); - if (vc1parse->fps_d != 0) + if (vc1parse->fps_d != 0) { gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, vc1parse->fps_n, vc1parse->fps_d, NULL); + + vc1parse->frame_duration = gst_util_uint64_scale (GST_SECOND, + vc1parse->fps_d, vc1parse->fps_n); + } if (vc1parse->par_n != 0 && vc1parse->par_d != 0) gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION, vc1parse->par_n, vc1parse->par_d, NULL); @@ -965,6 +970,9 @@ gst_vc1_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame) return GST_FLOW_ERROR; } + if (GST_CLOCK_TIME_IS_VALID (vc1parse->frame_duration)) + GST_BUFFER_DURATION (buffer) = vc1parse->frame_duration; + /* Might be multiple BDUs here, complex... */ if (vc1parse->profile == GST_VC1_PROFILE_ADVANCED) { gboolean startcodes = FALSE; diff --git a/gst/videoparsers/gstvc1parse.h b/gst/videoparsers/gstvc1parse.h index 73e3b3f8a6..c1abe6e70a 100644 --- a/gst/videoparsers/gstvc1parse.h +++ b/gst/videoparsers/gstvc1parse.h @@ -74,6 +74,7 @@ struct _GstVC1Parse gint fps_n, fps_d; gboolean fps_from_caps; + GstClockTime frame_duration; gint par_n, par_d; gboolean par_from_caps;