[vlc-commits] demux: adaptive: add new selectors

Francois Cartegnie git at videolan.org
Wed Sep 21 18:52:32 CEST 2016


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue Sep 20 21:42:03 2016 +0200| [ca22f1171378d641dd49a038e21b05b6b1912afc] | committer: Francois Cartegnie

demux: adaptive: add new selectors

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

 .../adaptive/logic/Representationselectors.cpp     | 29 ++++++++++++++++++++++
 .../adaptive/logic/Representationselectors.hpp     |  4 +++
 2 files changed, 33 insertions(+)

diff --git a/modules/demux/adaptive/logic/Representationselectors.cpp b/modules/demux/adaptive/logic/Representationselectors.cpp
index 1e6b36e..07700f3 100644
--- a/modules/demux/adaptive/logic/Representationselectors.cpp
+++ b/modules/demux/adaptive/logic/Representationselectors.cpp
@@ -26,6 +26,7 @@
 #include "../playlist/BaseAdaptationSet.h"
 #include "../playlist/BasePeriod.h"
 #include <limits>
+#include <algorithm>
 
 using namespace adaptive::logic;
 
@@ -37,6 +38,34 @@ RepresentationSelector::~RepresentationSelector()
 {
 }
 
+BaseRepresentation * RepresentationSelector::lowest(BaseAdaptationSet *adaptSet) const
+{
+    std::vector<BaseRepresentation *> reps = adaptSet->getRepresentations();
+    return (reps.empty()) ? NULL : *(reps.begin());
+}
+
+BaseRepresentation * RepresentationSelector::highest(BaseAdaptationSet *adaptSet) const
+{
+    std::vector<BaseRepresentation *> reps = adaptSet->getRepresentations();
+    return (reps.empty()) ? NULL : *reps.rbegin();
+}
+
+BaseRepresentation * RepresentationSelector::higher(BaseAdaptationSet *adaptSet, BaseRepresentation *rep) const
+{
+    std::vector<BaseRepresentation *> reps = adaptSet->getRepresentations();
+    std::vector<BaseRepresentation *>::iterator it = std::upper_bound(reps.begin(), reps.end(), rep,
+                                                                      BaseRepresentation::bwCompare);
+    return (it == reps.end()) ? rep : *it;
+}
+
+BaseRepresentation * RepresentationSelector::lower(BaseAdaptationSet *adaptSet, BaseRepresentation *rep) const
+{
+    std::vector<BaseRepresentation *> reps = adaptSet->getRepresentations();
+    std::vector<BaseRepresentation *>::iterator it = std::lower_bound(reps.begin(), reps.end(), rep,
+                                                                      BaseRepresentation::bwCompare);
+    return (it > reps.begin()) ? *(--it) : rep;
+}
+
 BaseRepresentation * RepresentationSelector::select(BaseAdaptationSet *adaptSet) const
 {
     return select(adaptSet, std::numeric_limits<uint64_t>::max());
diff --git a/modules/demux/adaptive/logic/Representationselectors.hpp b/modules/demux/adaptive/logic/Representationselectors.hpp
index b244b25..b39e07b 100644
--- a/modules/demux/adaptive/logic/Representationselectors.hpp
+++ b/modules/demux/adaptive/logic/Representationselectors.hpp
@@ -40,6 +40,10 @@ namespace adaptive
         public:
             RepresentationSelector();
              ~RepresentationSelector();
+            BaseRepresentation * lowest(BaseAdaptationSet *) const;
+            BaseRepresentation * highest(BaseAdaptationSet *) const;
+            BaseRepresentation * higher(BaseAdaptationSet *, BaseRepresentation *) const;
+            BaseRepresentation * lower(BaseAdaptationSet *, BaseRepresentation *) const;
             BaseRepresentation * select(BaseAdaptationSet *) const;
             BaseRepresentation * select(BaseAdaptationSet *, uint64_t bitrate) const;
             BaseRepresentation * select(BaseAdaptationSet *, uint64_t bitrate,



More information about the vlc-commits mailing list