Implemented TFHD box - fixed TRUN namespace pollution.
This commit is contained in:
		
							parent
							
								
									7492e99628
								
							
						
					
					
						commit
						d9b8f7c7f0
					
				
					 2 changed files with 203 additions and 47 deletions
				
			
		
							
								
								
									
										207
									
								
								lib/mp4.cpp
									
										
									
									
									
								
							
							
						
						
									
										207
									
								
								lib/mp4.cpp
									
										
									
									
									
								
							| 
						 | 
					@ -897,13 +897,13 @@ namespace MP4{
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void TRUN::setDataOffset(long newOffset){
 | 
					  void TRUN::setDataOffset(long newOffset){
 | 
				
			||||||
    if (getFlags() & dataOffset){
 | 
					    if (getFlags() & trundataOffset){
 | 
				
			||||||
      setInt32(newOffset, 8);
 | 
					      setInt32(newOffset, 8);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  long TRUN::getDataOffset(){
 | 
					  long TRUN::getDataOffset(){
 | 
				
			||||||
    if (getFlags() & dataOffset){
 | 
					    if (getFlags() & trundataOffset){
 | 
				
			||||||
      return getInt32(8);
 | 
					      return getInt32(8);
 | 
				
			||||||
    }else{
 | 
					    }else{
 | 
				
			||||||
      return 0;
 | 
					      return 0;
 | 
				
			||||||
| 
						 | 
					@ -911,8 +911,8 @@ namespace MP4{
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void TRUN::setFirstSampleFlags(long newSampleFlags){
 | 
					  void TRUN::setFirstSampleFlags(long newSampleFlags){
 | 
				
			||||||
    if (!(getFlags() & firstSampleFlags)){return;}
 | 
					    if (!(getFlags() & trunfirstSampleFlags)){return;}
 | 
				
			||||||
    if (getFlags() & dataOffset){
 | 
					    if (getFlags() & trundataOffset){
 | 
				
			||||||
      setInt32(newSampleFlags, 12);
 | 
					      setInt32(newSampleFlags, 12);
 | 
				
			||||||
    }else{
 | 
					    }else{
 | 
				
			||||||
      setInt32(newSampleFlags, 8);
 | 
					      setInt32(newSampleFlags, 8);
 | 
				
			||||||
| 
						 | 
					@ -920,8 +920,8 @@ namespace MP4{
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  long TRUN::getFirstSampleFlags(){
 | 
					  long TRUN::getFirstSampleFlags(){
 | 
				
			||||||
    if (!(getFlags() & firstSampleFlags)){return 0;}
 | 
					    if (!(getFlags() & trunfirstSampleFlags)){return 0;}
 | 
				
			||||||
    if (getFlags() & dataOffset){
 | 
					    if (getFlags() & trundataOffset){
 | 
				
			||||||
      return getInt32(12);
 | 
					      return getInt32(12);
 | 
				
			||||||
    }else{
 | 
					    }else{
 | 
				
			||||||
      return getInt32(8);
 | 
					      return getInt32(8);
 | 
				
			||||||
| 
						 | 
					@ -935,27 +935,27 @@ namespace MP4{
 | 
				
			||||||
  void TRUN::setSampleInformation(trunSampleInformation newSample, long no){
 | 
					  void TRUN::setSampleInformation(trunSampleInformation newSample, long no){
 | 
				
			||||||
    long flags = getFlags();
 | 
					    long flags = getFlags();
 | 
				
			||||||
    long sampInfoSize = 0;
 | 
					    long sampInfoSize = 0;
 | 
				
			||||||
    if (flags & sampleDuration){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleDuration){sampInfoSize += 4;}
 | 
				
			||||||
    if (flags & sampleSize){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleSize){sampInfoSize += 4;}
 | 
				
			||||||
    if (flags & sampleFlags){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleFlags){sampInfoSize += 4;}
 | 
				
			||||||
    if (flags & sampleOffsets){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleOffsets){sampInfoSize += 4;}
 | 
				
			||||||
    long offset = 8;
 | 
					    long offset = 8;
 | 
				
			||||||
    if (flags & dataOffset){offset += 4;}
 | 
					    if (flags & trundataOffset){offset += 4;}
 | 
				
			||||||
    if (flags & firstSampleFlags){offset += 4;}
 | 
					    if (flags & trunfirstSampleFlags){offset += 4;}
 | 
				
			||||||
    long innerOffset = 0;
 | 
					    long innerOffset = 0;
 | 
				
			||||||
    if (flags & sampleDuration){
 | 
					    if (flags & trunsampleDuration){
 | 
				
			||||||
      setInt32(newSample.sampleDuration, offset + no*sampInfoSize + innerOffset);
 | 
					      setInt32(newSample.sampleDuration, offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (flags & sampleSize){
 | 
					    if (flags & trunsampleSize){
 | 
				
			||||||
      setInt32(newSample.sampleSize, offset + no*sampInfoSize + innerOffset);
 | 
					      setInt32(newSample.sampleSize, offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (flags & sampleFlags){
 | 
					    if (flags & trunsampleFlags){
 | 
				
			||||||
      setInt32(newSample.sampleFlags, offset + no*sampInfoSize + innerOffset);
 | 
					      setInt32(newSample.sampleFlags, offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (flags & sampleOffsets){
 | 
					    if (flags & trunsampleOffsets){
 | 
				
			||||||
      setInt32(newSample.sampleOffset, offset + no*sampInfoSize + innerOffset);
 | 
					      setInt32(newSample.sampleOffset, offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -973,27 +973,27 @@ namespace MP4{
 | 
				
			||||||
    if (getSampleInformationCount() < no+1){return ret;}
 | 
					    if (getSampleInformationCount() < no+1){return ret;}
 | 
				
			||||||
    long flags = getFlags();
 | 
					    long flags = getFlags();
 | 
				
			||||||
    long sampInfoSize = 0;
 | 
					    long sampInfoSize = 0;
 | 
				
			||||||
    if (flags & sampleDuration){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleDuration){sampInfoSize += 4;}
 | 
				
			||||||
    if (flags & sampleSize){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleSize){sampInfoSize += 4;}
 | 
				
			||||||
    if (flags & sampleFlags){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleFlags){sampInfoSize += 4;}
 | 
				
			||||||
    if (flags & sampleOffsets){sampInfoSize += 4;}
 | 
					    if (flags & trunsampleOffsets){sampInfoSize += 4;}
 | 
				
			||||||
    long offset = 8;
 | 
					    long offset = 8;
 | 
				
			||||||
    if (flags & dataOffset){offset += 4;}
 | 
					    if (flags & trundataOffset){offset += 4;}
 | 
				
			||||||
    if (flags & firstSampleFlags){offset += 4;}
 | 
					    if (flags & trunfirstSampleFlags){offset += 4;}
 | 
				
			||||||
    long innerOffset = 0;
 | 
					    long innerOffset = 0;
 | 
				
			||||||
    if (flags & sampleDuration){
 | 
					    if (flags & trunsampleDuration){
 | 
				
			||||||
      ret.sampleDuration = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
					      ret.sampleDuration = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (flags & sampleSize){
 | 
					    if (flags & trunsampleSize){
 | 
				
			||||||
      ret.sampleSize = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
					      ret.sampleSize = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (flags & sampleFlags){
 | 
					    if (flags & trunsampleFlags){
 | 
				
			||||||
      ret.sampleFlags = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
					      ret.sampleFlags = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (flags & sampleOffsets){
 | 
					    if (flags & trunsampleOffsets){
 | 
				
			||||||
      ret.sampleOffset = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
					      ret.sampleOffset = getInt32(offset + no*sampInfoSize + innerOffset);
 | 
				
			||||||
      innerOffset += 4;
 | 
					      innerOffset += 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -1007,31 +1007,31 @@ namespace MP4{
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    long flags = getFlags();
 | 
					    long flags = getFlags();
 | 
				
			||||||
    r << std::string(indent+1, ' ') << "Flags";
 | 
					    r << std::string(indent+1, ' ') << "Flags";
 | 
				
			||||||
    if (flags & dataOffset){r << " dataOffset";}
 | 
					    if (flags & trundataOffset){r << " dataOffset";}
 | 
				
			||||||
    if (flags & firstSampleFlags){r << " firstSampleFlags";}
 | 
					    if (flags & trunfirstSampleFlags){r << " firstSampleFlags";}
 | 
				
			||||||
    if (flags & sampleDuration){r << " sampleDuration";}
 | 
					    if (flags & trunsampleDuration){r << " sampleDuration";}
 | 
				
			||||||
    if (flags & sampleSize){r << " sampleSize";}
 | 
					    if (flags & trunsampleSize){r << " sampleSize";}
 | 
				
			||||||
    if (flags & sampleFlags){r << " sampleFlags";}
 | 
					    if (flags & trunsampleFlags){r << " sampleFlags";}
 | 
				
			||||||
    if (flags & sampleOffsets){r << " sampleOffsets";}
 | 
					    if (flags & trunsampleOffsets){r << " sampleOffsets";}
 | 
				
			||||||
    r << std::endl;
 | 
					    r << std::endl;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if (flags & dataOffset){r << std::string(indent+1, ' ') << "Data Offset " << getDataOffset() << std::endl;}
 | 
					    if (flags & trundataOffset){r << std::string(indent+1, ' ') << "Data Offset " << getDataOffset() << std::endl;}
 | 
				
			||||||
    if (flags & dataOffset){r << std::string(indent+1, ' ') << "Sample Flags" << prettyFlags(getFirstSampleFlags()) << std::endl;}
 | 
					    if (flags & trundataOffset){r << std::string(indent+1, ' ') << "Sample Flags" << prettySampleFlags(getFirstSampleFlags()) << std::endl;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    r << std::string(indent+1, ' ') << "SampleInformation (" << getSampleInformationCount() << "):" << std::endl;
 | 
					    r << std::string(indent+1, ' ') << "SampleInformation (" << getSampleInformationCount() << "):" << std::endl;
 | 
				
			||||||
    for (int i = 0; i < getSampleInformationCount(); ++i){
 | 
					    for (int i = 0; i < getSampleInformationCount(); ++i){
 | 
				
			||||||
      r << std::string(indent+2, ' ') << "[" << i << "]" << std::endl;
 | 
					      r << std::string(indent+2, ' ') << "[" << i << "]" << std::endl;
 | 
				
			||||||
      trunSampleInformation samp = getSampleInformation(i);
 | 
					      trunSampleInformation samp = getSampleInformation(i);
 | 
				
			||||||
      if (flags & sampleDuration){
 | 
					      if (flags & trunsampleDuration){
 | 
				
			||||||
        r << std::string(indent+2, ' ') << "Duration " << samp.sampleDuration << std::endl;
 | 
					        r << std::string(indent+2, ' ') << "Duration " << samp.sampleDuration << std::endl;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (flags & sampleSize){
 | 
					      if (flags & trunsampleSize){
 | 
				
			||||||
        r << std::string(indent+2, ' ') << "Size " << samp.sampleSize << std::endl;
 | 
					        r << std::string(indent+2, ' ') << "Size " << samp.sampleSize << std::endl;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (flags & sampleFlags){
 | 
					      if (flags & trunsampleFlags){
 | 
				
			||||||
        r << std::string(indent+2, ' ') << "Flags " << prettyFlags(samp.sampleFlags) << std::endl;
 | 
					        r << std::string(indent+2, ' ') << "Flags " << prettySampleFlags(samp.sampleFlags) << std::endl;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (flags & sampleOffsets){
 | 
					      if (flags & trunsampleOffsets){
 | 
				
			||||||
        r << std::string(indent+2, ' ') << "Offset " << samp.sampleOffset << std::endl;
 | 
					        r << std::string(indent+2, ' ') << "Offset " << samp.sampleOffset << std::endl;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -1039,7 +1039,7 @@ namespace MP4{
 | 
				
			||||||
    return r.str();
 | 
					    return r.str();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string TRUN::prettyFlags(long flag){
 | 
					  std::string prettySampleFlags(long flag){
 | 
				
			||||||
    std::stringstream r;
 | 
					    std::stringstream r;
 | 
				
			||||||
    if (flag & noIPicture){r << " noIPicture";}
 | 
					    if (flag & noIPicture){r << " noIPicture";}
 | 
				
			||||||
    if (flag & isIPicture){r << " isIPicture";}
 | 
					    if (flag & isIPicture){r << " isIPicture";}
 | 
				
			||||||
| 
						 | 
					@ -1051,5 +1051,132 @@ namespace MP4{
 | 
				
			||||||
    return r.str();
 | 
					    return r.str();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TFHD::TFHD(){
 | 
				
			||||||
 | 
					    memcpy(data + 4, "tfhd", 4);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void TFHD::setFlags(long newFlags){
 | 
				
			||||||
 | 
					    setInt24(newFlags,1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  long TFHD::getFlags(){
 | 
				
			||||||
 | 
					    return getInt24(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void TFHD::setTrackID(long newID){
 | 
				
			||||||
 | 
					    setInt32(newID,4);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  long TFHD::getTrackID(){
 | 
				
			||||||
 | 
					    return getInt32(4);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void TFHD::setBaseDataOffset(long long newOffset){
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){
 | 
				
			||||||
 | 
					      setInt64(newOffset, 8);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  long long TFHD::getBaseDataOffset(){
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){
 | 
				
			||||||
 | 
					      return getInt64(8);
 | 
				
			||||||
 | 
					    }else{
 | 
				
			||||||
 | 
					      return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  void TFHD::setSampleDescriptionIndex(long newIndex){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleDesc)){return;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    setInt32(newIndex, offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  long TFHD::getSampleDescriptionIndex(){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleDesc)){return 0;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    return getInt32(offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  void TFHD::setDefaultSampleDuration(long newDuration){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleDura)){return;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDesc){offset += 4;}
 | 
				
			||||||
 | 
					    setInt32(newDuration, offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  long TFHD::getDefaultSampleDuration(){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleDura)){return 0;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDesc){offset += 4;}
 | 
				
			||||||
 | 
					    return getInt32(offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  void TFHD::setDefaultSampleSize(long newSize){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleSize)){return;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDesc){offset += 4;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDura){offset += 4;}
 | 
				
			||||||
 | 
					    setInt32(newSize, offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  long TFHD::getDefaultSampleSize(){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleSize)){return 0;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDesc){offset += 4;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDura){offset += 4;}
 | 
				
			||||||
 | 
					    return getInt32(offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  void TFHD::setDefaultSampleFlags(long newFlags){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleFlag)){return;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDesc){offset += 4;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDura){offset += 4;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleSize){offset += 4;}
 | 
				
			||||||
 | 
					    setInt32(newFlags, offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  long TFHD::getDefaultSampleFlags(){
 | 
				
			||||||
 | 
					    if (!(getFlags() & tfhdSampleFlag)){return 0;}
 | 
				
			||||||
 | 
					    int offset = 8;
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdBaseOffset){offset += 8;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDesc){offset += 4;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleDura){offset += 4;}
 | 
				
			||||||
 | 
					    if (getFlags() & tfhdSampleSize){offset += 4;}
 | 
				
			||||||
 | 
					    return getInt32(offset);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  std::string TFHD::toPrettyString(long indent){
 | 
				
			||||||
 | 
					    std::stringstream r;
 | 
				
			||||||
 | 
					    r << std::string(indent, ' ') << "[tfhd] Track Fragment Header" << std::endl;
 | 
				
			||||||
 | 
					    r << std::string(indent+1, ' ') << "Version " << getInt8(0) << std::endl;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    long flags = getFlags();
 | 
				
			||||||
 | 
					    r << std::string(indent+1, ' ') << "Flags";
 | 
				
			||||||
 | 
					    if (flags & tfhdBaseOffset){r << " BaseOffset";}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleDesc){r << " SampleDesc";}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleDura){r << " SampleDura";}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleSize){r << " SampleSize";}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleFlag){r << " SampleFlag";}
 | 
				
			||||||
 | 
					    if (flags & tfhdNoDuration){r << " NoDuration";}
 | 
				
			||||||
 | 
					    r << std::endl;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    r << std::string(indent+1, ' ') << "TrackID " << getTrackID() << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (flags & tfhdBaseOffset){r << std::string(indent+1, ' ') << "Base Offset " << getBaseDataOffset() << std::endl;}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleDesc){r << std::string(indent+1, ' ') << "Sample Description Index " << getSampleDescriptionIndex() << std::endl;}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleDura){r << std::string(indent+1, ' ') << "Default Sample Duration " << getDefaultSampleDuration() << std::endl;}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleSize){r << std::string(indent+1, ' ') << "Default Same Size " << getDefaultSampleSize() << std::endl;}
 | 
				
			||||||
 | 
					    if (flags & tfhdSampleFlag){r << std::string(indent+1, ' ') << "Default Sample Flags " << prettySampleFlags(getDefaultSampleFlags()) << std::endl;}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return r.str();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										43
									
								
								lib/mp4.h
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								lib/mp4.h
									
										
									
									
									
								
							| 
						 | 
					@ -161,12 +161,12 @@ namespace MP4{
 | 
				
			||||||
    long sampleOffset;
 | 
					    long sampleOffset;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  enum trunflags {
 | 
					  enum trunflags {
 | 
				
			||||||
    dataOffset       = 0x000001,
 | 
					    trundataOffset       = 0x000001,
 | 
				
			||||||
    firstSampleFlags = 0x000004,
 | 
					    trunfirstSampleFlags = 0x000004,
 | 
				
			||||||
    sampleDuration   = 0x000100,
 | 
					    trunsampleDuration   = 0x000100,
 | 
				
			||||||
    sampleSize       = 0x000200,
 | 
					    trunsampleSize       = 0x000200,
 | 
				
			||||||
    sampleFlags      = 0x000400,
 | 
					    trunsampleFlags      = 0x000400,
 | 
				
			||||||
    sampleOffsets    = 0x000800
 | 
					    trunsampleOffsets    = 0x000800
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  enum sampleflags {
 | 
					  enum sampleflags {
 | 
				
			||||||
    noIPicture = 0x1000000,
 | 
					    noIPicture = 0x1000000,
 | 
				
			||||||
| 
						 | 
					@ -179,6 +179,7 @@ namespace MP4{
 | 
				
			||||||
    iskeySample = 0x0,
 | 
					    iskeySample = 0x0,
 | 
				
			||||||
    MUST_BE_PRESENT = 0x1
 | 
					    MUST_BE_PRESENT = 0x1
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					  std::string prettySampleFlags(long flag);
 | 
				
			||||||
  class TRUN : public Box {
 | 
					  class TRUN : public Box {
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
      TRUN();
 | 
					      TRUN();
 | 
				
			||||||
| 
						 | 
					@ -192,6 +193,34 @@ namespace MP4{
 | 
				
			||||||
      void setSampleInformation(trunSampleInformation newSample, long no);
 | 
					      void setSampleInformation(trunSampleInformation newSample, long no);
 | 
				
			||||||
      trunSampleInformation getSampleInformation(long no);
 | 
					      trunSampleInformation getSampleInformation(long no);
 | 
				
			||||||
      std::string toPrettyString(long indent = 0);
 | 
					      std::string toPrettyString(long indent = 0);
 | 
				
			||||||
      std::string prettyFlags(long flag);
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  enum tfhdflags {
 | 
				
			||||||
 | 
					    tfhdBaseOffset = 0x000001,
 | 
				
			||||||
 | 
					    tfhdSampleDesc = 0x000002,
 | 
				
			||||||
 | 
					    tfhdSampleDura = 0x000008,
 | 
				
			||||||
 | 
					    tfhdSampleSize = 0x000010,
 | 
				
			||||||
 | 
					    tfhdSampleFlag = 0x000020,
 | 
				
			||||||
 | 
					    tfhdNoDuration = 0x010000,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  class TFHD : public Box {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					      TFHD();
 | 
				
			||||||
 | 
					      void setFlags(long newFlags);
 | 
				
			||||||
 | 
					      long getFlags();
 | 
				
			||||||
 | 
					      void setTrackID(long newID);
 | 
				
			||||||
 | 
					      long getTrackID();
 | 
				
			||||||
 | 
					      void setBaseDataOffset(long long newOffset);
 | 
				
			||||||
 | 
					      long long getBaseDataOffset();
 | 
				
			||||||
 | 
					      void setSampleDescriptionIndex(long newIndex);
 | 
				
			||||||
 | 
					      long getSampleDescriptionIndex();
 | 
				
			||||||
 | 
					      void setDefaultSampleDuration(long newDuration);
 | 
				
			||||||
 | 
					      long getDefaultSampleDuration();
 | 
				
			||||||
 | 
					      void setDefaultSampleSize(long newSize);
 | 
				
			||||||
 | 
					      long getDefaultSampleSize();
 | 
				
			||||||
 | 
					      void setDefaultSampleFlags(long newFlags);
 | 
				
			||||||
 | 
					      long getDefaultSampleFlags();
 | 
				
			||||||
 | 
					      std::string toPrettyString(long indent = 0);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue