Fixed ogg problems with sintel.ogv. Note that sintel.ogv was already slightly corrupt.
This commit is contained in:
		
							parent
							
								
									fcd697e6bb
								
							
						
					
					
						commit
						8099d035a7
					
				
					 3 changed files with 18 additions and 8 deletions
				
			
		|  | @ -69,7 +69,7 @@ namespace Converters{ | |||
|     std::string pageBuffer; | ||||
|      | ||||
|     while(DTSCFile.getJSON()){ | ||||
|       if(DTSCFile.getJSON()["trackid"].asInt()!=prevID || DTSCFile.getJSON()["granule"].asInt()!=prevGran){ | ||||
|       if(DTSCFile.getJSON()["trackid"].asInt()!=prevID || DTSCFile.getJSON()["granule"].asInt()!=prevGran || DTSCFile.getJSON()["granule"].asInt() == -1){ | ||||
|         curOggPage.clear(); | ||||
|         curOggPage.setVersion(); | ||||
|         if (OggCont){ | ||||
|  | @ -82,7 +82,13 @@ namespace Converters{ | |||
|         curOggPage.setGranulePosition(prevGran); | ||||
|         curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[prevID]); | ||||
|         curOggPage.setPageSequenceNumber(DTSCID2seqNum[prevID]++); | ||||
|         curOggPage.setSegmentTable(curSegTable); | ||||
|         if(!curOggPage.setSegmentTable(curSegTable)){ | ||||
|           std::cerr << "Troubling segTable:"; | ||||
|           for (unsigned int i = 0; i<curSegTable.size(); i++){ | ||||
|             std::cerr << " " << curSegTable[i]; | ||||
|           } | ||||
|           std::cerr << std::endl; | ||||
|         } | ||||
|         curOggPage.setPayload((char*)pageBuffer.c_str(), pageBuffer.size()); | ||||
|         curOggPage.setCRCChecksum(curOggPage.calcChecksum()); | ||||
|         std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize()); | ||||
|  |  | |||
|  | @ -83,7 +83,7 @@ namespace Converters{ | |||
|               DTSCOut["time"] = (long long)trackData[sNum].lastTime ++; | ||||
|               DTSCOut["data"] = std::string(oggPage.getFullPayload()+offset, (*it)); //segment content put in JSON
 | ||||
|               if (trackData[sNum].codec == THEORA){ | ||||
|                 if (trackData[sNum].idHeader.parseGranuleLower(temp) == 0){ //granule mask equals zero when on keyframe
 | ||||
|                 if (trackData[sNum].idHeader.parseGranuleUpper(temp) == 0){ //granule mask equals zero when on keyframe
 | ||||
|                   DTSCOut["keyframe"] = 1; | ||||
|                 }else{ | ||||
|                   DTSCOut["interframe"] = 1; | ||||
|  | @ -133,8 +133,9 @@ namespace Converters{ | |||
|                   break; | ||||
|                 } | ||||
|                 case VORBIS:{ | ||||
|                   std::cerr << "Parsing part of the vorbis header\n"; | ||||
|                   vorbis::header vHead; | ||||
|                     if(vHead.read(oggPage.getFullPayload()+offset, (*it))){//if the current segment is a Theora header part
 | ||||
|                     if(vHead.read(oggPage.getFullPayload()+offset, (*it))){//if the current segment is a Vorbis header part
 | ||||
|                       switch(vHead.getHeaderType()){ | ||||
|                         case 1:{ | ||||
|                           std::cerr << "Vorbis ID header" << std::endl; | ||||
|  | @ -156,8 +157,12 @@ namespace Converters{ | |||
|                           trackData[sNum].parsedHeaders = true; | ||||
|                           break; | ||||
|                         } | ||||
|                         default:{ | ||||
|                           std::cerr << "Unsupported header type for vorbis\n"; | ||||
|                         } | ||||
|                       } | ||||
|                     }else{ | ||||
|                       std::cerr << "Not a header??\n"; | ||||
|                       //buffer vorbis
 | ||||
|                     } | ||||
|                   break; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Oswald Auguste de Bruin
						Oswald Auguste de Bruin