} else if (c->is_live && pls->fragment_duration) {
num = pls->first_seq_no + (((get_current_time_in_sec() - c->availability_start_time)) * pls->fragment_timescale) / pls->fragment_duration;
} else if (pls->fragment_duration) {
- num = pls->first_seq_no + (c->media_presentation_duration * pls->fragment_timescale) / pls->fragment_duration;
+ num = pls->first_seq_no + av_rescale_rnd(1, c->media_presentation_duration * pls->fragment_timescale, pls->fragment_duration, AV_ROUND_UP);
}
return num;
static int reopen_demux_for_component(AVFormatContext *s, struct representation *pls)
{
DASHContext *c = s->priv_data;
- ff_const59 AVInputFormat *in_fmt = NULL;
+ const AVInputFormat *in_fmt = NULL;
AVDictionary *in_fmt_opts = NULL;
uint8_t *avio_ctx_buffer = NULL;
int ret = 0, i;
static int dash_close(AVFormatContext *s);
+static void move_metadata(AVStream *st, const char *key, char **value)
+{
+ if (*value) {
+ av_dict_set(&st->metadata, key, *value, AV_DICT_DONT_STRDUP_VAL);
+ *value = NULL;
+ }
+}
+
static int dash_read_header(AVFormatContext *s)
{
DASHContext *c = s->priv_data;
rep->assoc_stream = s->streams[rep->stream_index];
if (rep->bandwidth > 0)
av_dict_set_int(&rep->assoc_stream->metadata, "variant_bitrate", rep->bandwidth, 0);
- if (rep->id)
- av_dict_set(&rep->assoc_stream->metadata, "id", rep->id, 0);
+ move_metadata(rep->assoc_stream, "id", &rep->id);
}
for (i = 0; i < c->n_audios; i++) {
rep = c->audios[i];
rep->assoc_stream = s->streams[rep->stream_index];
if (rep->bandwidth > 0)
av_dict_set_int(&rep->assoc_stream->metadata, "variant_bitrate", rep->bandwidth, 0);
- if (rep->id)
- av_dict_set(&rep->assoc_stream->metadata, "id", rep->id, 0);
- if (rep->lang) {
- av_dict_set(&rep->assoc_stream->metadata, "language", rep->lang, 0);
- av_freep(&rep->lang);
- }
+ move_metadata(rep->assoc_stream, "id", &rep->id);
+ move_metadata(rep->assoc_stream, "language", &rep->lang);
}
for (i = 0; i < c->n_subtitles; i++) {
rep = c->subtitles[i];
av_program_add_stream_index(s, 0, rep->stream_index);
rep->assoc_stream = s->streams[rep->stream_index];
- if (rep->id)
- av_dict_set(&rep->assoc_stream->metadata, "id", rep->id, 0);
- if (rep->lang) {
- av_dict_set(&rep->assoc_stream->metadata, "language", rep->lang, 0);
- av_freep(&rep->lang);
- }
+ move_metadata(rep->assoc_stream, "id", &rep->id);
+ move_metadata(rep->assoc_stream, "language", &rep->lang);
}
return 0;
.version = LIBAVUTIL_VERSION_INT,
};
-AVInputFormat ff_dash_demuxer = {
+const AVInputFormat ff_dash_demuxer = {
.name = "dash",
.long_name = NULL_IF_CONFIG_SMALL("Dynamic Adaptive Streaming over HTTP"),
.priv_class = &dash_class,