vlc/vlc-1.2 | branch: master | Hugo Beauzée-Luyssen <beauz...@gmail.com> | Wed 
Dec 28 17:30:13 2011 +0100| [41f7cecbe29a0c91480fd2ea8859d927b43f66ec] | 
committer: Jean-Baptiste Kempf

dash: Try to fetch mimeType attribute from the parent element.

Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org>
(cherry picked from commit 9caf4cee157920d0f27fda86d9fe411a625a3173)

Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org>

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

 modules/stream_filter/dash/mpd/BasicCMParser.cpp |   15 ++++++++++-----
 modules/stream_filter/dash/mpd/BasicCMParser.h   |    4 +++-
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/modules/stream_filter/dash/mpd/BasicCMParser.cpp 
b/modules/stream_filter/dash/mpd/BasicCMParser.cpp
index dde4c9d..c1db5ad 100644
--- a/modules/stream_filter/dash/mpd/BasicCMParser.cpp
+++ b/modules/stream_filter/dash/mpd/BasicCMParser.cpp
@@ -150,7 +150,7 @@ void    BasicCMParser::setGroups            (Node *root, 
Period *period)
     for(size_t i = 0; i < groups.size(); i++)
     {
         Group *group = new Group(groups.at(i)->getAttributes());
-        if ( this->parseCommonAttributesElements( groups.at( i ), group ) == 
false )
+        if ( this->parseCommonAttributesElements( groups.at( i ), group, NULL 
) == false )
         {
             delete group;
             continue ;
@@ -169,7 +169,7 @@ void    BasicCMParser::setRepresentations   (Node *root, 
Group *group)
         const std::map<std::string, std::string>    attributes = 
representations.at(i)->getAttributes();
 
         Representation *rep = new Representation( attributes );
-        if ( this->parseCommonAttributesElements( representations.at( i ), rep 
) == false )
+        if ( this->parseCommonAttributesElements( representations.at( i ), 
rep, group ) == false )
         {
             delete rep;
             continue ;
@@ -351,7 +351,7 @@ void BasicCMParser::parseContentDescriptor(Node *node, 
const std::string &name,
     }
 }
 
-bool    BasicCMParser::parseCommonAttributesElements( Node *node, 
CommonAttributesElements *common) const
+bool    BasicCMParser::parseCommonAttributesElements( Node *node, 
CommonAttributesElements *common, CommonAttributesElements *parent ) const
 {
     const std::map<std::string, std::string>                &attr = 
node->getAttributes();
     std::map<std::string, std::string>::const_iterator      it;
@@ -359,8 +359,13 @@ bool    BasicCMParser::parseCommonAttributesElements( Node 
*node, CommonAttribut
     it = attr.find( "mimeType" );
     if ( it == attr.end() )
     {
-        std::cerr << "Missing mandatory attribute: @mimeType" << std::endl;
-        return false;
+        if ( parent && parent->getMimeType().empty() == false )
+            common->setMimeType( parent->getMimeType() );
+        else
+        {
+            std::cerr << "Missing mandatory attribute: @mimeType" << std::endl;
+            return false;
+        }
     }
     common->setMimeType( it->second );
     //Everything else is optionnal.
diff --git a/modules/stream_filter/dash/mpd/BasicCMParser.h 
b/modules/stream_filter/dash/mpd/BasicCMParser.h
index 9033e13..fbf808d 100644
--- a/modules/stream_filter/dash/mpd/BasicCMParser.h
+++ b/modules/stream_filter/dash/mpd/BasicCMParser.h
@@ -67,7 +67,9 @@ namespace dash
                 void    parseContentDescriptor( xml::Node *node, const 
std::string &name,
                                                 void 
(CommonAttributesElements::*addPtr)(ContentDescription*),
                                                 CommonAttributesElements *self 
) const;
-                bool    parseCommonAttributesElements( dash::xml::Node *node, 
CommonAttributesElements *common ) const;
+                bool    parseCommonAttributesElements( dash::xml::Node *node,
+                                                       
CommonAttributesElements *common,
+                                                       
CommonAttributesElements *parent ) const;
                 bool    parseSegment( Segment *seg, const 
std::map<std::string, std::string> &attr );
                 ProgramInformation*     parseProgramInformation();
         };

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
http://mailman.videolan.org/listinfo/vlc-commits

Reply via email to