flvmux: properly determine final duration

... which can be authoratively obtained from our own written timestamps.
This commit is contained in:
Mark Nauwelaerts 2011-12-16 19:15:38 +01:00
parent fa5c02b211
commit b175d1cbc4

View File

@ -1250,12 +1250,6 @@ gst_flv_mux_determine_duration (GstFlvMux * mux)
} }
} }
if (duration == GST_CLOCK_TIME_NONE) {
GST_DEBUG_OBJECT (mux, "not able to determine duration "
"from pad timestamps, assuming 0");
return 0;
}
return duration; return duration;
} }
@ -1269,6 +1263,7 @@ gst_flv_mux_rewrite_header (GstFlvMux * mux)
GList *l; GList *l;
guint32 index_len, allocate_size; guint32 index_len, allocate_size;
guint32 i, index_skip; guint32 i, index_skip;
GstClockTime dur;
if (mux->streamable) if (mux->streamable)
return GST_FLOW_OK; return GST_FLOW_OK;
@ -1281,9 +1276,12 @@ gst_flv_mux_rewrite_header (GstFlvMux * mux)
return GST_FLOW_OK; return GST_FLOW_OK;
} }
/* if we were not able to determine the duration before, set it now */ /* determine duration now based on our own timestamping,
if (mux->duration == GST_CLOCK_TIME_NONE) * so that it is likely many times better and consistent
mux->duration = gst_flv_mux_determine_duration (mux); * than whatever obtained by some query */
dur = gst_flv_mux_determine_duration (mux);
if (dur != GST_CLOCK_TIME_NONE)
mux->duration = dur;
/* rewrite the duration tag */ /* rewrite the duration tag */
d = gst_guint64_to_gdouble (mux->duration); d = gst_guint64_to_gdouble (mux->duration);