[vlc-devel] [PATCH 19/27] dash: added resolution interpretation
Hugo Beauzée-Luyssen
beauze.h at gmail.com
Sat Feb 4 14:17:11 CET 2012
On Sat, Feb 4, 2012 at 2:16 PM, Hugo Beauzée-Luyssen <beauze.h at gmail.com> wrote:
> On Fri, Feb 3, 2012 at 11:57 AM, Christopher Mueller
> <christopher.mueller at itec.aau.at> wrote:
>> Signed-off-by: Christopher Mueller <christopher.mueller at itec.aau.at>
>> ---
>> 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 | 6 ++-
>> 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 | 18 ++++++--
>> modules/stream_filter/dash/mpd/Representation.cpp | 20 ++++++++-
>> modules/stream_filter/dash/mpd/Representation.h | 6 +++
>> 19 files changed, 156 insertions(+), 39 deletions(-)
>>
>> diff --git a/modules/stream_filter/dash/DASHManager.cpp b/modules/stream_filter/dash/DASHManager.cpp
>> index f14e1f7..9af2620 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 860eee2..928fbd3 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 );
>> @@ -55,6 +55,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 dab9019..67600b9 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 9187ea8..18d9615 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 bafd05d..d608bbf 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 27282c9..e8775d6 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 1833d05..8f6f984 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 58d3740..f41bdc2 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);
>>
>> @@ -47,6 +50,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 ab3acee..7c0ec9f 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 8b3c519..04c6d70 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,3 +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 fec5cec..8b27e90 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( 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 8a9d4e0..b08f2f8 100644
>> --- a/modules/stream_filter/dash/mpd/IMPDManager.h
>> +++ b/modules/stream_filter/dash/mpd/IMPDManager.h
>> @@ -28,14 +28,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(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 (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 e4a3b42..f6e067d 100644
>> --- a/modules/stream_filter/dash/mpd/IsoffMainManager.cpp
>> +++ b/modules/stream_filter/dash/mpd/IsoffMainManager.cpp
>> @@ -83,7 +83,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();
>>
>> @@ -122,3 +122,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 6b17795..ec90a9c 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 (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 646edac..5cf9677 100644
>> --- a/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
>> +++ b/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
>> @@ -108,10 +108,20 @@ void IsoffMainParser::setRepresentations (Node *adaptationSetNode, Adaptation
>>
>> for(size_t i = 0; i < representations.size(); i++)
>> {
>> - Representation *rep = new Representation;
>> - this->setSegmentBase(representations.at(i), rep);
>> - this->setSegmentList(representations.at(i), rep);
>> - rep->setBandwidth(atoi(representations.at(i)->getAttributeValue("bandwidth").c_str()));
>> + Representation *rep = new Representation;
>> + Node *repNode = representations.at(i);
>> +
>> + if(repNode->hasAttribute("width"))
>> + rep->setWidth(atoi(repNode->getAttributeValue("width").c_str()));
>> +
>> + if(repNode->hasAttribute("height"))
>> + rep->setHeight(atoi(repNode->getAttributeValue("height").c_str()));
>> +
>> + if(repNode->hasAttribute("bandwidth"))
>> + rep->setBandwidth(atoi(repNode->getAttributeValue("bandwidth").c_str()));
>> +
>> + this->setSegmentBase(repNode, rep);
>> + this->setSegmentList(repNode, rep);
>> adaptationSet->addRepresentation(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 89845d2..da0d4f5 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
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> http://mailman.videolan.org/listinfo/vlc-devel
>
Oops, wrong mail... 18/27 was applied. This one doesn't apply.
--
Hugo Beauzée-Luyssen
More information about the vlc-devel
mailing list