From: Enrique Ocaña González Date: Wed, 22 Mar 2017 18:18:40 +0000 (+0000) Subject: qtdemux: distinguish TFDT with value 0 from no TFDT at all X-Git-Tag: 1.12.2~94 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=28a57d0586140e3111801c430bf8f7a181966910;p=platform%2Fupstream%2Fgst-plugins-good.git 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 --- diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index 8d304bd2b..87f8f4281 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -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);