[vlc-commits] stream_filter: dash: get mimeType() from representations

Francois Cartegnie git at videolan.org
Thu Dec 18 22:39:48 CET 2014


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Nov 20 23:01:09 2014 +0100| [c1481178bd3dd312ac57c1a6d43c14640f559cbd] | committer: Francois Cartegnie

stream_filter: dash: get mimeType() from representations

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c1481178bd3dd312ac57c1a6d43c14640f559cbd
---

 modules/stream_filter/dash/mpd/AdaptationSet.cpp          |    8 ++++++++
 modules/stream_filter/dash/mpd/AdaptationSet.h            |    1 +
 modules/stream_filter/dash/mpd/CommonAttributesElements.h |    2 +-
 modules/stream_filter/dash/mpd/IsoffMainParser.cpp        |   12 ++++++++++--
 4 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/modules/stream_filter/dash/mpd/AdaptationSet.cpp b/modules/stream_filter/dash/mpd/AdaptationSet.cpp
index d48fcc5..39123f1 100644
--- a/modules/stream_filter/dash/mpd/AdaptationSet.cpp
+++ b/modules/stream_filter/dash/mpd/AdaptationSet.cpp
@@ -48,6 +48,14 @@ AdaptationSet::~AdaptationSet   ()
     vlc_delete_all( this->representations );
 }
 
+const std::string& AdaptationSet::getMimeType() const
+{
+    if (mimeType.empty() && !representations.empty())
+        return representations.front()->getMimeType();
+    else
+        return mimeType;
+}
+
 bool                AdaptationSet::getSubsegmentAlignmentFlag() const
 {
     return this->subsegmentAlignmentFlag;
diff --git a/modules/stream_filter/dash/mpd/AdaptationSet.h b/modules/stream_filter/dash/mpd/AdaptationSet.h
index 8b48a4b..5e52a8f 100644
--- a/modules/stream_filter/dash/mpd/AdaptationSet.h
+++ b/modules/stream_filter/dash/mpd/AdaptationSet.h
@@ -44,6 +44,7 @@ namespace dash
                 AdaptationSet();
                 virtual ~AdaptationSet();
 
+                virtual const std::string&      getMimeType() const; /*reimpl*/
                 bool                            getSubsegmentAlignmentFlag() const;
                 void                            setSubsegmentAlignmentFlag( bool alignment );
                 std::vector<Representation *>&  getRepresentations      ();
diff --git a/modules/stream_filter/dash/mpd/CommonAttributesElements.h b/modules/stream_filter/dash/mpd/CommonAttributesElements.h
index f39249d..eb42a27 100644
--- a/modules/stream_filter/dash/mpd/CommonAttributesElements.h
+++ b/modules/stream_filter/dash/mpd/CommonAttributesElements.h
@@ -38,7 +38,7 @@ namespace dash
             public:
                 CommonAttributesElements();
                 virtual ~CommonAttributesElements();
-                const std::string&              getMimeType() const;
+                virtual const std::string&      getMimeType() const;
                 void                            setMimeType( const std::string &mimeType );
                 int                             getWidth() const;
                 void                            setWidth( int width );
diff --git a/modules/stream_filter/dash/mpd/IsoffMainParser.cpp b/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
index c82a795..14a6455 100644
--- a/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
+++ b/modules/stream_filter/dash/mpd/IsoffMainParser.cpp
@@ -72,11 +72,16 @@ void    IsoffMainParser::setMPDAttributes   ()
 void    IsoffMainParser::setAdaptationSets  (Node *periodNode, Period *period)
 {
     std::vector<Node *> adaptationSets = DOMHelper::getElementByTagName(periodNode, "AdaptationSet", false);
+    std::vector<Node *>::const_iterator it;
 
-    for(size_t i = 0; i < adaptationSets.size(); i++)
+    for(it = adaptationSets.begin(); it != adaptationSets.end(); it++)
     {
         AdaptationSet *adaptationSet = new AdaptationSet();
-        this->setRepresentations(adaptationSets.at(i), adaptationSet);
+        if(!adaptationSet)
+            continue;
+        if((*it)->hasAttribute("mimeType"))
+            adaptationSet->setMimeType((*it)->getAttributeValue("mimeType"));
+        setRepresentations((*it), adaptationSet);
         period->addAdaptationSet(adaptationSet);
     }
 }
@@ -102,6 +107,9 @@ void    IsoffMainParser::setRepresentations (Node *adaptationSetNode, Adaptation
         if(repNode->hasAttribute("bandwidth"))
             this->currentRepresentation->setBandwidth(atoi(repNode->getAttributeValue("bandwidth").c_str()));
 
+        if(repNode->hasAttribute("mimeType"))
+            currentRepresentation->setMimeType(repNode->getAttributeValue("mimeType"));
+
         this->setSegmentBase(repNode, this->currentRepresentation);
         this->setSegmentList(repNode, this->currentRepresentation);
         adaptationSet->addRepresentation(this->currentRepresentation);



More information about the vlc-commits mailing list