Module: libav
Branch: master
Commit: ca9bc9de690258d4761a19b0df6e9c9113b80115

Author:    Peter Große <[email protected]>
Committer: Martin Storsjö <[email protected]>
Date:      Sun Jan 29 15:26:29 2017 +0100

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 <[email protected]>
Signed-off-by: Martin Storsjö <[email protected]>

---

 libavformat/dashenc.c | 23 ++++++-----------------
 1 file changed, 6 insertions(+), 17 deletions(-)

diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
index 12e6f9b..286b24d 100644
--- a/libavformat/dashenc.c
+++ b/libavformat/dashenc.c
@@ -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;
     }

_______________________________________________
libav-commits mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to