[vlc-devel] [PATCH 13/17] dash: added isoffmainmanager
Christopher at mailsrv.uni-klu.ac.at
Christopher at mailsrv.uni-klu.ac.at
Mon Jan 30 14:48:31 CET 2012
From: Christopher Mueller <christopher.mueller at itec.aau.at>
---
.../stream_filter/dash/mpd/IsoffMainManager.cpp | 126 ++++++++++++++++++++
modules/stream_filter/dash/mpd/IsoffMainManager.h | 64 ++++++++++
2 files changed, 190 insertions(+), 0 deletions(-)
create mode 100644 modules/stream_filter/dash/mpd/IsoffMainManager.cpp
create mode 100644 modules/stream_filter/dash/mpd/IsoffMainManager.h
diff --git a/modules/stream_filter/dash/mpd/IsoffMainManager.cpp b/modules/stream_filter/dash/mpd/IsoffMainManager.cpp
new file mode 100644
index 0000000..4ac0b85
--- /dev/null
+++ b/modules/stream_filter/dash/mpd/IsoffMainManager.cpp
@@ -0,0 +1,126 @@
+/*
+ * IsoffMainManager.cpp
+ *****************************************************************************
+ * Copyright (C) 2010 - 2012 Klagenfurt University
+ *
+ * Created on: Jan 27, 2010
+ * Authors: Christopher Mueller <christopher.mueller at itec.uni-klu.ac.at>
+ * Christian Timmerer <christian.timmerer at itec.uni-klu.ac.at>
+ *
+ * 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 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 "IsoffMainManager.h"
+
+using namespace dash::mpd;
+
+IsoffMainManager::IsoffMainManager (MPD *mpd)
+{
+ this->mpd = mpd;
+}
+IsoffMainManager::~IsoffMainManager ()
+{
+ delete this->mpd;
+}
+
+std::vector<Segment*> IsoffMainManager::getSegments (Representation *rep)
+{
+ std::vector<Segment *> retSegments;
+ SegmentList* list= rep->getSegmentList();
+ Segment* initSegment = rep->getSegmentBase()->getInitSegment();
+
+ if(initSegment)
+ retSegments.push_back(initSegment);
+
+ retSegments.insert(retSegments.end(), list->getSegments().begin(), list->getSegments().end());
+ return retSegments;
+}
+const std::vector<Period*>& IsoffMainManager::getPeriods () const
+{
+ return this->mpd->getPeriods();
+}
+Representation* IsoffMainManager::getBestRepresentation (Period *period)
+{
+ std::vector<AdaptationSet *> adaptationSets = period->getAdaptationSets();
+
+ int bitrate = 0;
+ Representation *best = NULL;
+
+ for(size_t i = 0; i < adaptationSets.size(); i++)
+ {
+ std::vector<Representation *> reps = adaptationSets.at(i)->getRepresentations();
+ for(size_t j = 0; j < reps.size(); j++)
+ {
+ int currentBitrate = reps.at(j)->getBandwidth();
+
+ if(currentBitrate > bitrate)
+ {
+ bitrate = currentBitrate;
+ best = reps.at(j);
+ }
+ }
+ }
+ return best;
+}
+Period* IsoffMainManager::getFirstPeriod ()
+{
+ std::vector<Period *> periods = this->mpd->getPeriods();
+
+ if(periods.size() == 0)
+ return NULL;
+
+ return periods.at(0);
+}
+Representation* IsoffMainManager::getRepresentation (Period *period, int bitrate )
+{
+ std::vector<AdaptationSet *> adaptationSets = period->getAdaptationSets();
+
+ Representation *best = NULL;
+ std::cout << "Searching for best representation with bitrate: " << bitrate << std::endl;
+
+ for(size_t i = 0; i < adaptationSets.size(); i++)
+ {
+ std::vector<Representation *> reps = adaptationSets.at(i)->getRepresentations();
+ for( size_t j = 0; j < reps.size(); j++ )
+ {
+ int currentBitrate = reps.at(j)->getBandwidth();
+
+ if(best == NULL || bitrate == -1 ||
+ ( currentBitrate > best->getBandwidth() &&
+ currentBitrate < bitrate ) )
+ {
+ std::cout << "Found a better Representation bandwidth=" << reps.at(j)->getBandwidth() << " in adaptationSet #" << i << std::endl;
+ best = reps.at( j );
+ }
+ }
+ }
+ return best;
+}
+Period* IsoffMainManager::getNextPeriod (Period *period)
+{
+ std::vector<Period *> periods = this->mpd->getPeriods();
+
+ for(size_t i = 0; i < periods.size(); i++)
+ {
+ if(periods.at(i) == period && (i + 1) < periods.size())
+ return periods.at(i + 1);
+ }
+
+ return NULL;
+}
+const MPD* IsoffMainManager::getMPD () const
+{
+ return this->mpd;
+}
diff --git a/modules/stream_filter/dash/mpd/IsoffMainManager.h b/modules/stream_filter/dash/mpd/IsoffMainManager.h
new file mode 100644
index 0000000..6b17795
--- /dev/null
+++ b/modules/stream_filter/dash/mpd/IsoffMainManager.h
@@ -0,0 +1,64 @@
+/*
+ * IsoffMainManager.h
+ *****************************************************************************
+ * Copyright (C) 2010 - 2012 Klagenfurt University
+ *
+ * Created on: Jan 27, 2010
+ * Authors: Christopher Mueller <christopher.mueller at itec.uni-klu.ac.at>
+ * Christian Timmerer <christian.timmerer at itec.uni-klu.ac.at>
+ *
+ * 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 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 ISOFFMAINMANAGER_H_
+#define ISOFFMAINMANAGER_H_
+
+#include <iostream>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mpd/MPD.h"
+#include "mpd/Period.h"
+#include "mpd/AdaptationSet.h"
+#include "mpd/Representation.h"
+#include "mpd/SegmentInfo.h"
+#include "mpd/Segment.h"
+#include "mpd/IMPDManager.h"
+
+namespace dash
+{
+ namespace mpd
+ {
+ class IsoffMainManager : public IMPDManager
+ {
+ public:
+ IsoffMainManager (MPD *mpd);
+ virtual ~IsoffMainManager ();
+
+ const std::vector<Period *>& getPeriods () const;
+ Period* getFirstPeriod ();
+ Period* getNextPeriod (Period *period);
+ Representation* getBestRepresentation (Period *period);
+ std::vector<Segment *> getSegments (Representation *rep);
+ Representation* getRepresentation (Period *period, int bitrate);
+ const MPD* getMPD () const;
+
+ private:
+ MPD *mpd;
+ };
+ }
+}
+
+#endif /* ISOFFMAINMANAGER_H_ */
--
1.7.0.4
More information about the vlc-devel
mailing list