aboutsummaryrefslogtreecommitdiffstats
path: root/MPD/AdaptationSetStream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'MPD/AdaptationSetStream.cpp')
-rw-r--r--MPD/AdaptationSetStream.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/MPD/AdaptationSetStream.cpp b/MPD/AdaptationSetStream.cpp
new file mode 100644
index 00000000..62bc1912
--- /dev/null
+++ b/MPD/AdaptationSetStream.cpp
@@ -0,0 +1,82 @@
+/*
+ * AdaptationSetStream.cpp
+ *****************************************************************************
+ * Copyright (C) 2012, bitmovin Softwareentwicklung OG, All Rights Reserved
+ *
+ * Email: libdash-dev@vicky.bitmovin.net
+ *
+ * This source code and its use and distribution, is subject to the terms
+ * and conditions of the applicable license agreement.
+ *****************************************************************************/
+
+#include "AdaptationSetStream.h"
+
+using namespace libdash::framework::mpd;
+using namespace dash::mpd;
+
+AdaptationSetStream::AdaptationSetStream(IMPD *mpd, IPeriod *period, IAdaptationSet *adaptationSet) :
+ mpd (mpd),
+ period (period),
+ adaptationSet (adaptationSet)
+{
+ initialize();
+}
+
+AdaptationSetStream::~AdaptationSetStream()
+{
+ std::map<IRepresentation *, IRepresentationStream *>::iterator iter;
+ for (iter = representations.begin(); iter != representations.end(); ++iter)
+ {
+ delete(iter->second);
+ }
+}
+
+IRepresentationStream* AdaptationSetStream::getRepresentationStream(IRepresentation *representation)
+{
+ return this->representations.find(representation)->second;
+}
+
+RepresentationStreamType AdaptationSetStream::determineRepresentationStreamType (IRepresentation *representation)
+{
+ /* check on Representation Level */
+ if (representation->GetSegmentList())
+ return libdash::framework::mpd::SegmentList;
+
+ if (representation->GetSegmentTemplate())
+ return libdash::framework::mpd::SegmentTemplate;
+
+ if (representation->GetSegmentBase() || representation->GetBaseURLs().size() > 0)
+ return libdash::framework::mpd::SingleMediaSegment;
+
+ /* check on AdaptationSet Level */
+ if (this->adaptationSet->GetSegmentList())
+ return libdash::framework::mpd::SegmentList;
+
+ if (this->adaptationSet->GetSegmentTemplate())
+ return libdash::framework::mpd::SegmentTemplate;
+
+ if (this->adaptationSet->GetSegmentBase())
+ return libdash::framework::mpd::SingleMediaSegment;
+
+ /* check on Period Level */
+ if (this->period->GetSegmentList())
+ return libdash::framework::mpd::SegmentList;
+
+ if (this->period->GetSegmentTemplate())
+ return libdash::framework::mpd::SegmentTemplate;
+
+ if (this->period->GetSegmentBase())
+ return libdash::framework::mpd::SingleMediaSegment;
+
+ return libdash::framework::mpd::UNDEFINED;
+}
+
+void AdaptationSetStream::initialize()
+{
+ for (size_t i = 0; i < adaptationSet->GetRepresentation().size(); i++)
+ {
+ IRepresentation *representation = adaptationSet->GetRepresentation().at(i);
+ RepresentationStreamType type = determineRepresentationStreamType(representation);
+ representations[representation] = RepresentationStreamFactory::create(type, mpd, period, adaptationSet, representation);
+ }
+}