Language support for MP4
This commit is contained in:
		
							parent
							
								
									3844dac4fd
								
							
						
					
					
						commit
						0a2a749566
					
				
					 3 changed files with 33 additions and 8 deletions
				
			
		|  | @ -2241,20 +2241,43 @@ namespace MP4 { | ||||||
| 
 | 
 | ||||||
|   void MDHD::setLanguage(uint16_t newLanguage) { |   void MDHD::setLanguage(uint16_t newLanguage) { | ||||||
|     if (getVersion() == 0) { |     if (getVersion() == 0) { | ||||||
|       setInt16(newLanguage & 0x7F, 20); |       setInt16(newLanguage & 0x7FFF, 20); | ||||||
|     } else { |     } else { | ||||||
|       setInt16(newLanguage & 0x7F, 32); |       setInt16(newLanguage & 0x7FFF, 32); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   uint16_t MDHD::getLanguage() { |   uint16_t MDHD::getLanguageInt() { | ||||||
|     if (getVersion() == 0) { |     if (getVersion() == 0) { | ||||||
|       return getInt16(20) & 0x7F; |       return getInt16(20) & 0x7FFF; | ||||||
|     } else { |     } else { | ||||||
|       return getInt16(32) & 0x7F; |       return getInt16(32) & 0x7FFF; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   void MDHD::setLanguage(const std::string & newLanguage) { | ||||||
|  |     if (newLanguage.size() != 3){ | ||||||
|  |       setLanguage("und"); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     uint16_t newLang = 0; | ||||||
|  |     newLang += (newLanguage[0] - 0x60) & 0x1F; | ||||||
|  |     newLang <<= 5; | ||||||
|  |     newLang += (newLanguage[1] - 0x60) & 0x1F; | ||||||
|  |     newLang <<= 5; | ||||||
|  |     newLang += (newLanguage[2] - 0x60) & 0x1F; | ||||||
|  |     setLanguage(newLang); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   std::string MDHD::getLanguage() { | ||||||
|  |     uint16_t lInt = getLanguageInt(); | ||||||
|  |     std::string ret; | ||||||
|  |     ret += (char)(((lInt & 0x7C00) >> 10) + 0x60); | ||||||
|  |     ret += (char)(((lInt & 0x3E0) >> 5) + 0x60); | ||||||
|  |     ret += (char)((lInt & 0x1F) + 0x60); | ||||||
|  |     return ret; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   std::string MDHD::toPrettyString(uint32_t indent) { |   std::string MDHD::toPrettyString(uint32_t indent) { | ||||||
|     std::stringstream r; |     std::stringstream r; | ||||||
|     r << std::string(indent, ' ') << "[mdhd] Media Header Box (" << boxedSize() << ")" << std::endl; |     r << std::string(indent, ' ') << "[mdhd] Media Header Box (" << boxedSize() << ")" << std::endl; | ||||||
|  | @ -2263,7 +2286,7 @@ namespace MP4 { | ||||||
|     r << std::string(indent + 1, ' ') << "ModificationTime: " << getModificationTime() << std::endl; |     r << std::string(indent + 1, ' ') << "ModificationTime: " << getModificationTime() << std::endl; | ||||||
|     r << std::string(indent + 1, ' ') << "TimeScale: " << getTimeScale() << std::endl; |     r << std::string(indent + 1, ' ') << "TimeScale: " << getTimeScale() << std::endl; | ||||||
|     r << std::string(indent + 1, ' ') << "Duration: " << getDuration() << std::endl; |     r << std::string(indent + 1, ' ') << "Duration: " << getDuration() << std::endl; | ||||||
|     r << std::string(indent + 1, ' ') << "Language: 0x" << std::hex << getLanguage() << std::dec << std::endl; |     r << std::string(indent + 1, ' ') << "Language: " << getLanguage() << std::endl; | ||||||
|     return r.str(); |     return r.str(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -463,9 +463,10 @@ namespace MP4 { | ||||||
|       uint32_t getTimeScale(); |       uint32_t getTimeScale(); | ||||||
|       void setDuration(uint64_t newDuration); |       void setDuration(uint64_t newDuration); | ||||||
|       uint64_t getDuration(); |       uint64_t getDuration(); | ||||||
|       ///\todo return language properly
 |  | ||||||
|       void setLanguage(uint16_t newLanguage); |       void setLanguage(uint16_t newLanguage); | ||||||
|       uint16_t getLanguage(); |       uint16_t getLanguageInt(); | ||||||
|  |       void setLanguage(const std::string & newLanguage); | ||||||
|  |       std::string getLanguage(); | ||||||
|       std::string toPrettyString(uint32_t indent = 0); |       std::string toPrettyString(uint32_t indent = 0); | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -70,6 +70,7 @@ namespace Mist { | ||||||
|           unsigned int mdiaOffset = 0; |           unsigned int mdiaOffset = 0; | ||||||
|           { |           { | ||||||
|             MP4::MDHD mdhdBox(thisTrack.lastms - thisTrack.firstms); |             MP4::MDHD mdhdBox(thisTrack.lastms - thisTrack.firstms); | ||||||
|  |             mdhdBox.setLanguage(thisTrack.lang); | ||||||
|             mdiaBox.setContent(mdhdBox, mdiaOffset++); |             mdiaBox.setContent(mdhdBox, mdiaOffset++); | ||||||
|           }//MDHD box
 |           }//MDHD box
 | ||||||
|           { |           { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma