mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-08 21:28:45 +00:00
dashdemux: default timescale is 1
default timescale value should be 1, not 0. https://bugzilla.gnome.org/show_bug.cgi?id=752414
This commit is contained in:
parent
8b558d68cb
commit
e12d3d9be2
1 changed files with 11 additions and 24 deletions
|
@ -1129,6 +1129,7 @@ gst_mpdparser_parse_seg_base_type_ext (GstSegmentBaseType ** pointer,
|
||||||
|
|
||||||
/* Initialize values that have defaults */
|
/* Initialize values that have defaults */
|
||||||
seg_base_type->indexRangeExact = FALSE;
|
seg_base_type->indexRangeExact = FALSE;
|
||||||
|
seg_base_type->timescale = 1;
|
||||||
|
|
||||||
/* Inherit attribute values from parent */
|
/* Inherit attribute values from parent */
|
||||||
if (parent) {
|
if (parent) {
|
||||||
|
@ -1145,7 +1146,7 @@ gst_mpdparser_parse_seg_base_type_ext (GstSegmentBaseType ** pointer,
|
||||||
/* We must retrieve each value first to see if it exists. If it does not
|
/* We must retrieve each value first to see if it exists. If it does not
|
||||||
* exist, we do not want to overwrite an inherited value */
|
* exist, we do not want to overwrite an inherited value */
|
||||||
GST_LOG ("attributes of SegmentBaseType extension:");
|
GST_LOG ("attributes of SegmentBaseType extension:");
|
||||||
if (gst_mpdparser_get_xml_prop_unsigned_integer (a_node, "timescale", 0,
|
if (gst_mpdparser_get_xml_prop_unsigned_integer (a_node, "timescale", 1,
|
||||||
&intval)) {
|
&intval)) {
|
||||||
seg_base_type->timescale = intval;
|
seg_base_type->timescale = intval;
|
||||||
}
|
}
|
||||||
|
@ -2765,7 +2766,6 @@ gst_mpd_client_get_segment_duration (GstMpdClient * client,
|
||||||
GstStreamPeriod *stream_period;
|
GstStreamPeriod *stream_period;
|
||||||
GstMultSegmentBaseType *base = NULL;
|
GstMultSegmentBaseType *base = NULL;
|
||||||
GstClockTime duration = 0;
|
GstClockTime duration = 0;
|
||||||
guint timescale;
|
|
||||||
|
|
||||||
g_return_val_if_fail (stream != NULL, GST_CLOCK_TIME_NONE);
|
g_return_val_if_fail (stream != NULL, GST_CLOCK_TIME_NONE);
|
||||||
stream_period = gst_mpdparser_get_stream_period (client);
|
stream_period = gst_mpdparser_get_stream_period (client);
|
||||||
|
@ -2786,10 +2786,7 @@ gst_mpd_client_get_segment_duration (GstMpdClient * client,
|
||||||
duration = base->duration * GST_SECOND;
|
duration = base->duration * GST_SECOND;
|
||||||
if (scale_dur)
|
if (scale_dur)
|
||||||
*scale_dur = duration;
|
*scale_dur = duration;
|
||||||
timescale = base->SegBaseType->timescale;
|
duration /= base->SegBaseType->timescale;
|
||||||
|
|
||||||
if (timescale > 1)
|
|
||||||
duration /= timescale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return duration;
|
return duration;
|
||||||
|
@ -3109,13 +3106,11 @@ gst_mpd_client_setup_representation (GstMpdClient * client,
|
||||||
duration = S->d * GST_SECOND;
|
duration = S->d * GST_SECOND;
|
||||||
timescale =
|
timescale =
|
||||||
stream->cur_segment_list->MultSegBaseType->SegBaseType->timescale;
|
stream->cur_segment_list->MultSegBaseType->SegBaseType->timescale;
|
||||||
if (timescale > 1)
|
duration /= timescale;
|
||||||
duration /= timescale;
|
|
||||||
if (S->t > 0) {
|
if (S->t > 0) {
|
||||||
start = S->t;
|
start = S->t;
|
||||||
start_time = S->t * GST_SECOND;
|
start_time = S->t * GST_SECOND;
|
||||||
if (timescale > 1)
|
start_time /= timescale;
|
||||||
start_time /= timescale;
|
|
||||||
start_time += PeriodStart;
|
start_time += PeriodStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3177,16 +3172,10 @@ gst_mpd_client_setup_representation (GstMpdClient * client,
|
||||||
GST_LOG ("Building media segment list using this template: %s",
|
GST_LOG ("Building media segment list using this template: %s",
|
||||||
stream->cur_seg_template->media);
|
stream->cur_seg_template->media);
|
||||||
|
|
||||||
/* Avoid dividing by zero and avoid overflows */
|
/* Avoid overflows */
|
||||||
if (mult_seg->SegBaseType->timescale) {
|
stream->presentationTimeOffset =
|
||||||
stream->presentationTimeOffset =
|
gst_util_uint64_scale (mult_seg->SegBaseType->presentationTimeOffset,
|
||||||
gst_util_uint64_scale (mult_seg->
|
GST_SECOND, mult_seg->SegBaseType->timescale);
|
||||||
SegBaseType->presentationTimeOffset, GST_SECOND,
|
|
||||||
mult_seg->SegBaseType->timescale);
|
|
||||||
} else {
|
|
||||||
stream->presentationTimeOffset =
|
|
||||||
mult_seg->SegBaseType->presentationTimeOffset * GST_SECOND;
|
|
||||||
}
|
|
||||||
GST_LOG ("Setting stream's presentation time offset to %" GST_TIME_FORMAT,
|
GST_LOG ("Setting stream's presentation time offset to %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (stream->presentationTimeOffset));
|
GST_TIME_ARGS (stream->presentationTimeOffset));
|
||||||
|
|
||||||
|
@ -3206,13 +3195,11 @@ gst_mpd_client_setup_representation (GstMpdClient * client,
|
||||||
G_GUINT64_FORMAT, S->d, S->r, S->t);
|
G_GUINT64_FORMAT, S->d, S->r, S->t);
|
||||||
duration = S->d * GST_SECOND;
|
duration = S->d * GST_SECOND;
|
||||||
timescale = mult_seg->SegBaseType->timescale;
|
timescale = mult_seg->SegBaseType->timescale;
|
||||||
if (timescale > 1)
|
duration /= timescale;
|
||||||
duration /= timescale;
|
|
||||||
if (S->t > 0) {
|
if (S->t > 0) {
|
||||||
start = S->t;
|
start = S->t;
|
||||||
start_time = S->t * GST_SECOND;
|
start_time = S->t * GST_SECOND;
|
||||||
if (timescale > 1)
|
start_time /= timescale;
|
||||||
start_time /= timescale;
|
|
||||||
start_time += PeriodStart;
|
start_time += PeriodStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue