qtdemux: distinguish TFDT with value 0 from no TFDT at all

TFDTs with time 0 are being ignored since commit 1fc3d42f. They're
mistaken with the case of not having TFDT, but those two cases
must be distinguished in some way.

This patch passes an extra boolean flag when the TFDT is present.
This is now the condition being evaluated, instead of checking for
0 time.

https://bugzilla.gnome.org/show_bug.cgi?id=780410
This commit is contained in:
Enrique Ocaña González 2017-03-22 18:18:40 +00:00 committed by Jan Schmidt
parent 9c121b09a5
commit 28a57d0586

View file

@ -3039,7 +3039,8 @@ static gboolean
qtdemux_parse_trun (GstQTDemux * qtdemux, GstByteReader * trun,
QtDemuxStream * stream, guint32 d_sample_duration, guint32 d_sample_size,
guint32 d_sample_flags, gint64 moof_offset, gint64 moof_length,
gint64 * base_offset, gint64 * running_offset, gint64 decode_ts)
gint64 * base_offset, gint64 * running_offset, gint64 decode_ts,
gboolean has_tfdt)
{
GstClockTime gst_ts = GST_CLOCK_TIME_NONE;
guint64 timestamp;
@ -3200,7 +3201,7 @@ qtdemux_parse_trun (GstQTDemux * qtdemux, GstByteReader * trun,
/* If this is a GST_FORMAT_BYTES stream and there's a significant
* difference (1 sec.) between decode_ts and timestamp, prefer the
* former */
if (decode_ts != 0 && !qtdemux->upstream_format_is_time
if (has_tfdt && !qtdemux->upstream_format_is_time
&& ABSDIFF (decode_ts, timestamp) >
MAX (stream->duration_last_moof / 2,
GSTTIME_TO_QTSTREAMTIME (stream, GST_SECOND))) {
@ -3919,7 +3920,7 @@ qtdemux_parse_moof (GstQTDemux * qtdemux, const guint8 * buffer, guint length,
while (trun_node) {
qtdemux_parse_trun (qtdemux, &trun_data, stream,
ds_duration, ds_size, ds_flags, moof_offset, length, &base_offset,
&running_offset, decode_time);
&running_offset, decode_time, (tfdt_node != NULL));
/* iterate all siblings */
trun_node = qtdemux_tree_get_sibling_by_type_full (trun_node, FOURCC_trun,
&trun_data);