[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