Commit ca9bc9de authored by Peter Große's avatar Peter Große Committed by Martin Storsjö

dashenc: default to one AdaptationSet per stream

Previously all mapped streams of a media type (video, audio) where assigned
to a single AdaptationSet. Using the DASH live profile it is mandatory, that
the segments of all representations are aligned, which is currently not
enforced. This leads to problems when using video streams with different
key frame intervals. So to play safe, default to one AdaptationSet per stream,
unless overwritten by explicit assignment.

To get the old assignment scheme, use

  -adaptation_sets "id=0,streams=v id=1,streams=a"
Signed-off-by: 's avatarPeter Große <pegro@friiks.de>
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent efd2fc41
......@@ -524,26 +524,15 @@ static int parse_adaptation_sets(AVFormatContext *s)
enum { new_set, parse_id, parsing_streams } state;
AdaptationSet *as;
int i, n, ret;
enum AVMediaType types[] = { AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_UNKNOWN };
// default: one AdaptationSet for each media type
// default: one AdaptationSet for each stream
if (!p) {
for (n = 0; types[n] != AVMEDIA_TYPE_UNKNOWN; n++) {
int as_idx = 0;
for (i = 0; i < s->nb_streams; i++) {
if (s->streams[i]->codecpar->codec_type != types[n])
continue;
if (!as_idx) {
if ((ret = add_adaptation_set(s, &as, types[n])) < 0)
return ret;
as_idx = c->nb_as;
for (i = 0; i < s->nb_streams; i++) {
if ((ret = add_adaptation_set(s, &as, s->streams[i]->codecpar->codec_type)) < 0)
return ret;
snprintf(as->id, sizeof(as->id), "%d", i);
snprintf(as->id, sizeof(as->id), "%d", i);
}
c->streams[i].as_idx = as_idx;
}
c->streams[i].as_idx = c->nb_as;
}
goto end;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment