vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Tue Sep 20 
21:11:21 2016 +0200| [2d35944ba3ead83afc62ea6db0b8db0c1a5082d6] | committer: 
Francois Cartegnie

demux: adaptive: keep representations ordered by bandwidth

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2d35944ba3ead83afc62ea6db0b8db0c1a5082d6
---

 modules/demux/adaptive/playlist/BaseAdaptationSet.cpp  | 8 +++++++-
 modules/demux/adaptive/playlist/BaseRepresentation.cpp | 6 ++++++
 modules/demux/adaptive/playlist/BaseRepresentation.h   | 2 ++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/modules/demux/adaptive/playlist/BaseAdaptationSet.cpp 
b/modules/demux/adaptive/playlist/BaseAdaptationSet.cpp
index 7f7a984..8915cbf 100644
--- a/modules/demux/adaptive/playlist/BaseAdaptationSet.cpp
+++ b/modules/demux/adaptive/playlist/BaseAdaptationSet.cpp
@@ -36,6 +36,8 @@
 #include "BasePeriod.h"
 #include "Inheritables.hpp"
 
+#include <algorithm>
+
 using namespace adaptive;
 using namespace adaptive::playlist;
 
@@ -78,7 +80,11 @@ BaseRepresentation * 
BaseAdaptationSet::getRepresentationByID(const ID &id)
 
 void BaseAdaptationSet::addRepresentation(BaseRepresentation *rep)
 {
-    representations.push_back(rep);
+    representations.insert(std::upper_bound(representations.begin(),
+                                            representations.end(),
+                                            rep,
+                                            BaseRepresentation::bwCompare),
+                           rep);
     childs.push_back(rep);
 }
 
diff --git a/modules/demux/adaptive/playlist/BaseRepresentation.cpp 
b/modules/demux/adaptive/playlist/BaseRepresentation.cpp
index cebc48e..680c410 100644
--- a/modules/demux/adaptive/playlist/BaseRepresentation.cpp
+++ b/modules/demux/adaptive/playlist/BaseRepresentation.cpp
@@ -156,6 +156,12 @@ std::string BaseRepresentation::contextualize(size_t, 
const std::string &compone
     return component;
 }
 
+bool BaseRepresentation::bwCompare(const BaseRepresentation *a,
+                                   const BaseRepresentation *b)
+{
+    return a->getBandwidth() < b->getBandwidth();
+}
+
 bool BaseRepresentation::validateCodec(const std::string &) const
 {
     return true;
diff --git a/modules/demux/adaptive/playlist/BaseRepresentation.h 
b/modules/demux/adaptive/playlist/BaseRepresentation.h
index e2d013c..7de1278 100644
--- a/modules/demux/adaptive/playlist/BaseRepresentation.h
+++ b/modules/demux/adaptive/playlist/BaseRepresentation.h
@@ -73,6 +73,8 @@ namespace adaptive
                 virtual std::string contextualize(size_t, const std::string &,
                                                   const BaseSegmentTemplate *) 
const;
 
+                static bool         bwCompare(const BaseRepresentation *a,
+                                              const BaseRepresentation *b);
             protected:
                 virtual bool        validateCodec(const std::string &) const;
                 BaseAdaptationSet                  *adaptationSet;

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to