mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 14:06:23 +00:00
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:
parent
9c121b09a5
commit
28a57d0586
1 changed files with 4 additions and 3 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue