[vlc-commits] stream_filter: dash: add alwayslowest bitrate logic
Francois Cartegnie
git at videolan.org
Thu Dec 18 22:39:51 CET 2014
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Nov 27 15:35:53 2014 +0100| [75f7f4f68da9573782bbf9a2edee674ef0d53e1b] | committer: Francois Cartegnie
stream_filter: dash: add alwayslowest bitrate logic
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=75f7f4f68da9573782bbf9a2edee674ef0d53e1b
---
modules/stream_filter/Makefile.am | 2 +
.../adaptationlogic/AdaptationLogicFactory.cpp | 5 +-
.../dash/adaptationlogic/AdaptationLogicFactory.h | 2 -
.../AlwaysLowestAdaptationLogic.cpp | 65 +++++++++++++++++++-
.../AlwaysLowestAdaptationLogic.hpp | 42 +++++++++++--
5 files changed, 108 insertions(+), 8 deletions(-)
diff --git a/modules/stream_filter/Makefile.am b/modules/stream_filter/Makefile.am
index 3c002d1..fff34fb 100644
--- a/modules/stream_filter/Makefile.am
+++ b/modules/stream_filter/Makefile.am
@@ -15,6 +15,8 @@ libdash_plugin_la_SOURCES = \
stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h \
stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.cpp \
stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.h \
+ stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.cpp \
+ stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.hpp \
stream_filter/dash/adaptationlogic/IAdaptationLogic.h \
stream_filter/dash/adaptationlogic/IDownloadRateObserver.h \
stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.h \
diff --git a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp
index 7733960..727bc78 100644
--- a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp
+++ b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp
@@ -26,6 +26,9 @@
#endif
#include "AdaptationLogicFactory.h"
+#include "adaptationlogic/AlwaysBestAdaptationLogic.h"
+#include "adaptationlogic/RateBasedAdaptationLogic.h"
+#include "adaptationlogic/AlwaysLowestAdaptationLogic.hpp"
using namespace dash::logic;
using namespace dash::xml;
@@ -38,8 +41,8 @@ IAdaptationLogic* AdaptationLogicFactory::create ( IAdaptationLogic::LogicType l
{
case IAdaptationLogic::AlwaysBest: return new AlwaysBestAdaptationLogic (mpdManager);
case IAdaptationLogic::RateBased: return new RateBasedAdaptationLogic (mpdManager);
+ case IAdaptationLogic::AlwaysLowest: return new AlwaysLowestAdaptationLogic (mpdManager);
case IAdaptationLogic::Default:
- case IAdaptationLogic::AlwaysLowest:
default:
return NULL;
}
diff --git a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h
index 4f17f8a..855ab9e 100644
--- a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h
+++ b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h
@@ -28,8 +28,6 @@
#include "adaptationlogic/IAdaptationLogic.h"
#include "xml/Node.h"
#include "mpd/MPDManager.hpp"
-#include "adaptationlogic/AlwaysBestAdaptationLogic.h"
-#include "adaptationlogic/RateBasedAdaptationLogic.h"
struct stream_t;
diff --git a/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.cpp b/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.cpp
index c5334f6..38e34c2 100644
--- a/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.cpp
+++ b/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.cpp
@@ -1,5 +1,68 @@
+/*
+ * AlwaysLowestAdaptationLogic.cpp
+ *****************************************************************************
+ * Copyright (C) 2014 - VideoLAN authors
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
#include "AlwaysLowestAdaptationLogic.hpp"
+#include "Representationselectors.hpp"
-AlwaysLowestAdaptationLogic::AlwaysLowestAdaptationLogic()
+using namespace dash::logic;
+using namespace dash::http;
+using namespace dash::mpd;
+
+AlwaysLowestAdaptationLogic::AlwaysLowestAdaptationLogic(dash::mpd::MPDManager *mpdManager):
+ AbstractAdaptationLogic(mpdManager),
+ currentPeriod(mpdManager->getFirstPeriod()),
+ count(0)
+{
+}
+
+Chunk* AlwaysLowestAdaptationLogic::getNextChunk()
+{
+ if(!currentPeriod)
+ return NULL;
+
+ const Representation *rep = getCurrentRepresentation();
+ if ( rep == NULL )
+ return NULL;
+
+ std::vector<ISegment *> segments = rep->getSegments();
+ if ( count == segments.size() )
+ {
+ currentPeriod = mpdManager->getNextPeriod(currentPeriod);
+ count = 0;
+ return getNextChunk();
+ }
+
+ if ( segments.size() > count )
+ {
+ ISegment *seg = segments.at( count );
+ Chunk *chunk = seg->toChunk();
+ //In case of UrlTemplate, we must stay on the same segment.
+ if ( seg->isSingleShot() == true )
+ count++;
+ seg->done();
+ return chunk;
+ }
+ return NULL;
+}
+
+const Representation *AlwaysLowestAdaptationLogic::getCurrentRepresentation() const
{
+ RepresentationSelector selector;
+ return selector.select(currentPeriod, 0);
}
diff --git a/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.hpp b/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.hpp
index 3707b00..b59cff7 100644
--- a/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.hpp
+++ b/modules/stream_filter/dash/adaptationlogic/AlwaysLowestAdaptationLogic.hpp
@@ -1,10 +1,44 @@
+/*
+ * AlwaysLowestAdaptationLogic.hpp
+ *****************************************************************************
+ * Copyright (C) 2014 - VideoLAN authors
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
#ifndef ALWAYSLOWESTADAPTATIONLOGIC_HPP
#define ALWAYSLOWESTADAPTATIONLOGIC_HPP
-class AlwaysLowestAdaptationLogic
+#include "AbstractAdaptationLogic.h"
+
+namespace dash
{
-public:
- AlwaysLowestAdaptationLogic();
-};
+ namespace logic
+ {
+ class AlwaysLowestAdaptationLogic : public AbstractAdaptationLogic
+ {
+ public:
+ AlwaysLowestAdaptationLogic(dash::mpd::MPDManager *mpdManager);
+
+ virtual dash::http::Chunk* getNextChunk ();
+ virtual const dash::mpd::Representation* getCurrentRepresentation() const;
+
+ private:
+ dash::mpd::Period *currentPeriod;
+ size_t count;
+ };
+ }
+}
#endif // ALWAYSLOWESTADAPTATIONLOGIC_HPP
More information about the vlc-commits
mailing list