mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-27 13:10:37 +00:00
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: Peter Große <pegro@friiks.de> Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
efd2fc41b3
commit
ca9bc9de69
@ -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 ((ret = add_adaptation_set(s, &as, s->streams[i]->codecpar->codec_type)) < 0)
|
||||
return ret;
|
||||
snprintf(as->id, sizeof(as->id), "%d", i);
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user