[vlc-devel] [PATCH 2/8] dash: added resolution interpretation

Christopher Mueller christopher.mueller at itec.aau.at
Sun Feb 5 10:34:50 CET 2012


---
 modules/stream_filter/dash/DASHManager.cpp         |    7 ++-
 modules/stream_filter/dash/DASHManager.h           |    3 +-
 .../adaptationlogic/AbstractAdaptationLogic.cpp    |   10 +++--
 .../dash/adaptationlogic/AbstractAdaptationLogic.h |    5 ++-
 .../adaptationlogic/AdaptationLogicFactory.cpp     |    6 +-
 .../dash/adaptationlogic/AdaptationLogicFactory.h  |    4 +-
 .../adaptationlogic/AlwaysBestAdaptationLogic.cpp  |    3 +-
 .../adaptationlogic/AlwaysBestAdaptationLogic.h    |    2 +-
 .../adaptationlogic/RateBasedAdaptationLogic.cpp   |   16 ++++---
 .../adaptationlogic/RateBasedAdaptationLogic.h     |    7 +++-
 modules/stream_filter/dash/dash.cpp                |   10 ++++-
 modules/stream_filter/dash/mpd/BasicCMManager.cpp  |    7 ++-
 modules/stream_filter/dash/mpd/BasicCMManager.h    |    4 +-
 modules/stream_filter/dash/mpd/IMPDManager.h       |   17 ++++---
 .../stream_filter/dash/mpd/IsoffMainManager.cpp    |   47 +++++++++++++++++++-
 modules/stream_filter/dash/mpd/IsoffMainManager.h  |    4 +-
 modules/stream_filter/dash/mpd/IsoffMainParser.cpp |   21 ++++++---
 modules/stream_filter/dash/mpd/Representation.cpp  |   20 ++++++++-
 modules/stream_filter/dash/mpd/Representation.h    |    6 +++
 19 files changed, 157 insertions(+), 42 deletions(-)

diff --git a/modules/stream_filter/dash/DASHManager.cpp b/modules/stream_filter/dash/DASHManager.cpp
index 4033be7..7060d3e 100644
--- a/modules/stream_filter/dash/DASHManager.cpp
+++ b/modules/stream_filter/dash/DASHManager.cpp
@@ -35,18 +35,19 @@ using namespace dash::mpd;
 using namespace dash::exception;
 
 DASHManager::DASHManager    ( HTTPConnectionManager *conManager, MPD *mpd,
-                              IAdaptationLogic::LogicType type ) :
+                              IAdaptationLogic::LogicType type, stream_t *stream) :
     conManager( conManager ),
     currentChunk( NULL ),
     adaptationLogic( NULL ),
     logicType( type ),
     mpdManager( NULL ),
-    mpd( mpd )
+    mpd( mpd ),
+    stream(stream)
 {
     this->mpdManager        = mpd::MPDManagerFactory::create( mpd );
     if ( this->mpdManager == NULL )
         return ;
-    this->adaptationLogic   = AdaptationLogicFactory::create( this->logicType, this->mpdManager );
+    this->adaptationLogic   = AdaptationLogicFactory::create( this->logicType, this->mpdManager, this->stream);
     if ( this->adaptationLogic == NULL )
         return ;
     this->conManager->attach(this->adaptationLogic);
diff --git a/modules/stream_filter/dash/DASHManager.h b/modules/stream_filter/dash/DASHManager.h
index 1fef884..8fc1c56 100644
--- a/modules/stream_filter/dash/DASHManager.h
+++ b/modules/stream_filter/dash/DASHManager.h
@@ -40,7 +40,7 @@ namespace dash
     {
         public:
             DASHManager( http::HTTPConnectionManager *conManager, mpd::MPD *mpd,
-                         logic::IAdaptationLogic::LogicType type );
+                         logic::IAdaptationLogic::LogicType type, stream_t *stream);
             virtual ~DASHManager    ();
 
             int read( void *p_buffer, size_t len );
@@ -56,6 +56,7 @@ namespace dash
             logic::IAdaptationLogic::LogicType  logicType;
             mpd::IMPDManager                    *mpdManager;
             mpd::MPD                            *mpd;
+            stream_t                            *stream;
     };
 }
 
diff --git a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp
index 5d54848..3945a9f 100644
--- a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp
+++ b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp
@@ -32,11 +32,13 @@ using namespace dash::xml;
 using namespace dash::mpd;
 using namespace dash::exception;
 
-AbstractAdaptationLogic::AbstractAdaptationLogic    (IMPDManager *mpdManager)
+AbstractAdaptationLogic::AbstractAdaptationLogic    (IMPDManager *mpdManager, stream_t *stream) :
+                         bpsAvg                     (-1),
+                         bpsLastChunk               (0),
+                         mpdManager                 (mpdManager),
+                         stream                     (stream)
+
 {
-    this->bpsAvg        = -1;
-    this->bpsLastChunk  = 0;
-    this->mpdManager    = mpdManager;
 }
 AbstractAdaptationLogic::~AbstractAdaptationLogic   ()
 {
diff --git a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h
index 216f7f1..7c46d14 100644
--- a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h
+++ b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h
@@ -35,6 +35,8 @@
 #include "mpd/Segment.h"
 #include "exceptions/EOFException.h"
 
+struct stream_t;
+
 namespace dash
 {
     namespace logic
@@ -42,7 +44,7 @@ namespace dash
         class AbstractAdaptationLogic : public IAdaptationLogic
         {
             public:
-                AbstractAdaptationLogic             (dash::mpd::IMPDManager *mpdManager);
+                AbstractAdaptationLogic             (dash::mpd::IMPDManager *mpdManager, stream_t *stream);
                 virtual ~AbstractAdaptationLogic    ();
 
                 virtual void                downloadRateChanged     (long bpsAvg, long bpsLastChunk);
@@ -54,6 +56,7 @@ namespace dash
                 int                     bpsAvg;
                 long                    bpsLastChunk;
                 dash::mpd::IMPDManager  *mpdManager;
+                stream_t                *stream;
         };
     }
 }
diff --git a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp
index 341c739..066436d 100644
--- a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp
+++ b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.cpp
@@ -32,12 +32,12 @@ using namespace dash::xml;
 using namespace dash::mpd;
 
 IAdaptationLogic* AdaptationLogicFactory::create ( IAdaptationLogic::LogicType logic,
-                                                  IMPDManager *mpdManager )
+                                                  IMPDManager *mpdManager, stream_t *stream)
 {
     switch(logic)
     {
-        case IAdaptationLogic::AlwaysBest:      return new AlwaysBestAdaptationLogic    (mpdManager);
-        case IAdaptationLogic::RateBased:       return new RateBasedAdaptationLogic     (mpdManager);
+        case IAdaptationLogic::AlwaysBest:      return new AlwaysBestAdaptationLogic    (mpdManager, stream);
+        case IAdaptationLogic::RateBased:       return new RateBasedAdaptationLogic     (mpdManager, stream);
         case IAdaptationLogic::Default:
         case IAdaptationLogic::AlwaysLowest:
         default:
diff --git a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h
index f27cf25..440ca09 100644
--- a/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h
+++ b/modules/stream_filter/dash/adaptationlogic/AdaptationLogicFactory.h
@@ -31,6 +31,8 @@
 #include "adaptationlogic/AlwaysBestAdaptationLogic.h"
 #include "adaptationlogic/RateBasedAdaptationLogic.h"
 
+struct stream_t;
+
 namespace dash
 {
     namespace logic
@@ -38,7 +40,7 @@ namespace dash
         class AdaptationLogicFactory
         {
             public:
-                static IAdaptationLogic* create (IAdaptationLogic::LogicType logic, dash::mpd::IMPDManager *mpdManager);
+                static IAdaptationLogic* create (IAdaptationLogic::LogicType logic, dash::mpd::IMPDManager *mpdManager, stream_t *stream);
         };
     }
 }
diff --git a/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.cpp b/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.cpp
index e37c00a..01d7c44 100644
--- a/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.cpp
+++ b/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.cpp
@@ -33,7 +33,8 @@ using namespace dash::http;
 using namespace dash::mpd;
 using namespace dash::exception;
 
-AlwaysBestAdaptationLogic::AlwaysBestAdaptationLogic    (IMPDManager *mpdManager) : AbstractAdaptationLogic(mpdManager)
+AlwaysBestAdaptationLogic::AlwaysBestAdaptationLogic    (IMPDManager *mpdManager, stream_t *stream) :
+                           AbstractAdaptationLogic      (mpdManager, stream)
 {
     this->mpdManager    = mpdManager;
     this->count         = 0;
diff --git a/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.h b/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.h
index bf16de3..3b577f7 100644
--- a/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.h
+++ b/modules/stream_filter/dash/adaptationlogic/AlwaysBestAdaptationLogic.h
@@ -42,7 +42,7 @@ namespace dash
         class AlwaysBestAdaptationLogic : public AbstractAdaptationLogic
         {
             public:
-                AlwaysBestAdaptationLogic           (dash::mpd::IMPDManager *mpdManager);
+                AlwaysBestAdaptationLogic           (dash::mpd::IMPDManager *mpdManager, stream_t *stream);
                 virtual ~AlwaysBestAdaptationLogic  ();
 
                 dash::http::Chunk* getNextChunk() throw(dash::exception::EOFException);
diff --git a/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.cpp b/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.cpp
index 0eb7887..c331e05 100644
--- a/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.cpp
+++ b/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.cpp
@@ -33,12 +33,16 @@ using namespace dash::http;
 using namespace dash::mpd;
 using namespace dash::exception;
 
-RateBasedAdaptationLogic::RateBasedAdaptationLogic  (IMPDManager *mpdManager) :
-    AbstractAdaptationLogic( mpdManager ),
-    mpdManager( mpdManager ),
-    count( 0 ),
-    currentPeriod( mpdManager->getFirstPeriod() )
+RateBasedAdaptationLogic::RateBasedAdaptationLogic  (IMPDManager *mpdManager, stream_t *stream) :
+                          AbstractAdaptationLogic   (mpdManager, stream),
+                          mpdManager                (mpdManager),
+                          count                     (0),
+                          currentPeriod             (mpdManager->getFirstPeriod()),
+                          width                     (0),
+                          height                    (0)
 {
+    this->width  = var_InheritInteger(stream, "dash-prefwidth");
+    this->height = var_InheritInteger(stream, "dash-prefheight");
 }
 
 Chunk*  RateBasedAdaptationLogic::getNextChunk() throw(EOFException)
@@ -51,7 +55,7 @@ Chunk*  RateBasedAdaptationLogic::getNextChunk() throw(EOFException)
 
     long bitrate = this->getBpsAvg();
 
-    Representation *rep = this->mpdManager->getRepresentation(this->currentPeriod, bitrate);
+    Representation *rep = this->mpdManager->getRepresentation(this->currentPeriod, bitrate, this->width, this->height);
 
     if ( rep == NULL )
         throw EOFException();
diff --git a/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.h b/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.h
index 913ec41..44d5be4 100644
--- a/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.h
+++ b/modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.h
@@ -32,6 +32,9 @@
 #include "exceptions/EOFException.h"
 #include "mpd/BasicCMManager.h"
 
+#include <vlc_common.h>
+#include <vlc_stream.h>
+
 namespace dash
 {
     namespace logic
@@ -39,7 +42,7 @@ namespace dash
         class RateBasedAdaptationLogic : public AbstractAdaptationLogic
         {
             public:
-                RateBasedAdaptationLogic            (dash::mpd::IMPDManager *mpdManager);
+                RateBasedAdaptationLogic            (dash::mpd::IMPDManager *mpdManager, stream_t *stream);
 
                 dash::http::Chunk*      getNextChunk() throw(dash::exception::EOFException);
                 const dash::mpd::Representation *getCurrentRepresentation() const;
@@ -48,6 +51,8 @@ namespace dash
                 dash::mpd::IMPDManager  *mpdManager;
                 size_t                  count;
                 dash::mpd::Period       *currentPeriod;
+                int                     width;
+                int                     height;
         };
     }
 }
diff --git a/modules/stream_filter/dash/dash.cpp b/modules/stream_filter/dash/dash.cpp
index fb2c052..3b1ac7a 100644
--- a/modules/stream_filter/dash/dash.cpp
+++ b/modules/stream_filter/dash/dash.cpp
@@ -48,12 +48,20 @@
 static int  Open    (vlc_object_t *);
 static void Close   (vlc_object_t *);
 
+#define DASH_WIDTH_TEXT N_("Preferred Width")
+#define DASH_WIDTH_LONGTEXT N_("Preferred Width")
+
+#define DASH_HEIGHT_TEXT N_("Preferred Height")
+#define DASH_HEIGHT_LONGTEXT N_("Preferred Height")
+
 vlc_module_begin ()
         set_shortname( N_("DASH"))
         set_description( N_("Dynamic Adaptive Streaming over HTTP") )
         set_capability( "stream_filter", 19 )
         set_category( CAT_INPUT )
         set_subcategory( SUBCAT_INPUT_STREAM_FILTER )
+        add_integer( "dash-prefwidth",  480, DASH_WIDTH_TEXT,  DASH_WIDTH_LONGTEXT,  true )
+        add_integer( "dash-prefheight", 360, DASH_HEIGHT_TEXT, DASH_HEIGHT_LONGTEXT, true )
         set_callbacks( Open, Close )
 vlc_module_end ()
 
@@ -106,7 +114,7 @@ static int Open(vlc_object_t *p_obj)
                               new dash::http::HTTPConnectionManager( p_stream );
     dash::DASHManager*p_dashManager =
             new dash::DASHManager( p_conManager, p_sys->p_mpd,
-                                   dash::logic::IAdaptationLogic::RateBased );
+                                   dash::logic::IAdaptationLogic::RateBased, p_stream);
 
     if ( p_dashManager->getMpdManager() == NULL ||
          p_dashManager->getMpdManager()->getMPD() == NULL ||
diff --git a/modules/stream_filter/dash/mpd/BasicCMManager.cpp b/modules/stream_filter/dash/mpd/BasicCMManager.cpp
index 855dc50..8140247 100644
--- a/modules/stream_filter/dash/mpd/BasicCMManager.cpp
+++ b/modules/stream_filter/dash/mpd/BasicCMManager.cpp
@@ -91,7 +91,7 @@ Period*                 BasicCMManager::getFirstPeriod          ()
     return periods.at(0);
 }
 
-Representation*         BasicCMManager::getRepresentation(Period *period, int bitrate )
+Representation*         BasicCMManager::getRepresentation(Period *period, int bitrate ) const
 {
     std::vector<Group *>    groups = period->getGroups();
 
@@ -134,4 +134,7 @@ const MPD*      BasicCMManager::getMPD() const
 {
     return this->mpd;
 }
-
+Representation*         BasicCMManager::getRepresentation (Period *period, int bitrate, int width, int height) const
+{
+    return this->getRepresentation(period, bitrate);
+}
diff --git a/modules/stream_filter/dash/mpd/BasicCMManager.h b/modules/stream_filter/dash/mpd/BasicCMManager.h
index 98fb832..cea9387 100644
--- a/modules/stream_filter/dash/mpd/BasicCMManager.h
+++ b/modules/stream_filter/dash/mpd/BasicCMManager.h
@@ -52,8 +52,10 @@ namespace dash
                 Period*                         getNextPeriod( Period *period );
                 Representation*                 getBestRepresentation( Period *period );
                 std::vector<Segment *>          getSegments( const Representation *rep );
-                Representation*                 getRepresentation( Period *period, int bitrate );
+                Representation*                 getRepresentation( Period *period, int bitrate ) const;
                 const MPD*                      getMPD() const;
+                Representation*                 getRepresentation (Period *period, int bitrate,
+                                                                   int width, int height) const;
 
             private:
                 MPD *mpd;
diff --git a/modules/stream_filter/dash/mpd/IMPDManager.h b/modules/stream_filter/dash/mpd/IMPDManager.h
index eb51b6c..dc8ef12 100644
--- a/modules/stream_filter/dash/mpd/IMPDManager.h
+++ b/modules/stream_filter/dash/mpd/IMPDManager.h
@@ -45,14 +45,17 @@ namespace dash
         class IMPDManager
         {
             public:
-                virtual const std::vector<Period *>&   getPeriods              () const                 = 0;
-                virtual Period*                 getFirstPeriod          ()                              = 0;
-                virtual Period*                 getNextPeriod           (Period *period)                = 0;
-                virtual Representation*         getBestRepresentation   (Period *period)                = 0;
-                virtual std::vector<Segment *>  getSegments( const Representation *rep ) = 0;
-                virtual Representation*         getRepresentation       (Period *period, int bitrate)   = 0;
-                virtual const MPD*              getMPD                  () const = 0;
                 virtual ~IMPDManager(){}
+
+                virtual const std::vector<Period *>&    getPeriods              () const                            = 0;
+                virtual Period*                         getFirstPeriod          ()                                  = 0;
+                virtual Period*                         getNextPeriod           (Period *period)                    = 0;
+                virtual Representation*                 getBestRepresentation   (Period *period)                    = 0;
+                virtual std::vector<Segment *>          getSegments             (const Representation *rep)         = 0;
+                virtual Representation*                 getRepresentation       (Period *period, int bitrate) const = 0;
+                virtual const MPD*                      getMPD                  () const                            = 0;
+                virtual Representation*                 getRepresentation       (Period *period, int bitrate,
+                                                                                 int width, int height) const       = 0;
         };
     }
 }
diff --git a/modules/stream_filter/dash/mpd/IsoffMainManager.cpp b/modules/stream_filter/dash/mpd/IsoffMainManager.cpp
index c55c684..480f9f4 100644
--- a/modules/stream_filter/dash/mpd/IsoffMainManager.cpp
+++ b/modules/stream_filter/dash/mpd/IsoffMainManager.cpp
@@ -87,7 +87,7 @@ Period*                     IsoffMainManager::getFirstPeriod        ()
 
     return periods.at(0);
 }
-Representation*             IsoffMainManager::getRepresentation     (Period *period, int bitrate )
+Representation*             IsoffMainManager::getRepresentation     (Period *period, int bitrate) const
 {
     std::vector<AdaptationSet *> adaptationSets = period->getAdaptationSets();
 
@@ -126,3 +126,48 @@ const MPD*                  IsoffMainManager::getMPD                () const
 {
     return this->mpd;
 }
+Representation*             IsoffMainManager::getRepresentation     (Period *period, int bitrate, int width, int height) const
+{
+    std::vector<AdaptationSet *> adaptationSets = period->getAdaptationSets();
+
+    std::cout << "Searching for best representation with bitrate: " << bitrate << " and resolution: " << width << "x" << height << std::endl;
+
+    std::vector<Representation *> resMatchReps;
+
+    int lowerWidth  = 0;
+    int lowerHeight = 0;
+
+    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++ )
+        {
+            if(reps.at(j)->getWidth() == width && reps.at(j)->getHeight() == height)
+                resMatchReps.push_back(reps.at(j));
+
+            if(reps.at(j)->getHeight() < height)
+            {
+                lowerWidth  = reps.at(j)->getWidth();
+                lowerHeight = reps.at(j)->getHeight();
+            }
+        }
+    }
+
+    if(resMatchReps.size() == 0)
+        return this->getRepresentation(period, bitrate, lowerWidth, lowerHeight);
+
+    Representation  *best = NULL;
+    for( size_t j = 0; j < resMatchReps.size(); j++ )
+    {
+        int currentBitrate = resMatchReps.at(j)->getBandwidth();
+
+        if(best == NULL || (currentBitrate > best->getBandwidth() && currentBitrate < bitrate))
+        {
+            std::cout << "Found a better Representation bandwidth=" << resMatchReps.at(j)->getBandwidth()
+                      << " and resolution: " << resMatchReps.at(j)->getWidth() << "x" << resMatchReps.at(j)->getHeight() << std::endl;
+            best = resMatchReps.at(j);
+        }
+    }
+
+    return best;
+}
diff --git a/modules/stream_filter/dash/mpd/IsoffMainManager.h b/modules/stream_filter/dash/mpd/IsoffMainManager.h
index 933e9f1..bdee2ef 100644
--- a/modules/stream_filter/dash/mpd/IsoffMainManager.h
+++ b/modules/stream_filter/dash/mpd/IsoffMainManager.h
@@ -52,8 +52,10 @@ namespace dash
                 Period*                         getNextPeriod           (Period *period);
                 Representation*                 getBestRepresentation   (Period *period);
                 std::vector<Segment *>          getSegments             (const Representation *rep);
-                Representation*                 getRepresentation       (Period *period, int bitrate);
+                Representation*                 getRepresentation       (Period *period, int bitrate) const;
                 const MPD*                      getMPD                  () const;
+                Representation*                 getRepresentation       (Period *period, int bitrate,
+                                                                         int width, int height) const;
 
             private:
                 MPD *mpd;
diff --git a/modules/stream_filter/dash/mpd/IsoffMainParser.cpp b/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
index 6d8058c..888c347 100644
--- a/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
+++ b/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
@@ -113,12 +113,21 @@ void    IsoffMainParser::setRepresentations (Node *adaptationSetNode, Adaptation
 
     for(size_t i = 0; i < representations.size(); i++)
     {
-        Representation *rep = new Representation;
-        this->currentRepresentation = rep;
-        this->setSegmentBase(representations.at(i), rep);
-        this->setSegmentList(representations.at(i), rep);
-        rep->setBandwidth(atoi(representations.at(i)->getAttributeValue("bandwidth").c_str()));
-        adaptationSet->addRepresentation(rep);
+        this->currentRepresentation = new Representation;
+        Node *repNode = representations.at(i);
+
+        if(repNode->hasAttribute("width"))
+            this->currentRepresentation->setWidth(atoi(repNode->getAttributeValue("width").c_str()));
+
+        if(repNode->hasAttribute("height"))
+            this->currentRepresentation->setHeight(atoi(repNode->getAttributeValue("height").c_str()));
+
+        if(repNode->hasAttribute("bandwidth"))
+            this->currentRepresentation->setBandwidth(atoi(repNode->getAttributeValue("bandwidth").c_str()));
+
+        this->setSegmentBase(repNode, this->currentRepresentation);
+        this->setSegmentList(repNode, this->currentRepresentation);
+        adaptationSet->addRepresentation(this->currentRepresentation);
     }
 }
 void    IsoffMainParser::setSegmentBase     (dash::xml::Node *repNode, Representation *rep)
diff --git a/modules/stream_filter/dash/mpd/Representation.cpp b/modules/stream_filter/dash/mpd/Representation.cpp
index e358e34..9f31f5c 100644
--- a/modules/stream_filter/dash/mpd/Representation.cpp
+++ b/modules/stream_filter/dash/mpd/Representation.cpp
@@ -37,7 +37,9 @@ Representation::Representation  () :
                 trickModeType   ( NULL ),
                 parentGroup     ( NULL ),
                 segmentBase     ( NULL ),
-                segmentList     ( NULL )
+                segmentList     ( NULL ),
+                width           (0),
+                height          (0)
 
 {
 }
@@ -139,3 +141,19 @@ void                Representation::setSegmentBase          (SegmentBase *base)
 {
     this->segmentBase = base;
 }
+void                Representation::setWidth                (int width)
+{
+    this->width = width;
+}
+int                 Representation::getWidth                () const
+{
+    return this->width;
+}
+void                Representation::setHeight               (int height)
+{
+    this->height = height;
+}
+int                 Representation::getHeight               () const
+{
+    return this->height;
+}
diff --git a/modules/stream_filter/dash/mpd/Representation.h b/modules/stream_filter/dash/mpd/Representation.h
index 15cd62d..710e2f4 100644
--- a/modules/stream_filter/dash/mpd/Representation.h
+++ b/modules/stream_filter/dash/mpd/Representation.h
@@ -76,6 +76,10 @@ namespace dash
                 void                setSegmentList          (SegmentList *list);
                 SegmentBase*        getSegmentBase          () const;
                 void                setSegmentBase          (SegmentBase *base);
+                void                setWidth                (int width);
+                int                 getWidth                () const;
+                void                setHeight               (int height);
+                int                 getHeight               () const;
 
             private:
                 int                                 bandwidth;
@@ -87,6 +91,8 @@ namespace dash
                 const Group                         *parentGroup;
                 SegmentBase                         *segmentBase;
                 SegmentList                         *segmentList;
+                int                                 width;
+                int                                 height;
         };
     }
 }
-- 
1.7.0.4




More information about the vlc-devel mailing list