Fixed width/height issue in TS HEVC
This commit is contained in:
		
							parent
							
								
									8ac88c4612
								
							
						
					
					
						commit
						6bdf3a4ccd
					
				
					 3 changed files with 43 additions and 18 deletions
				
			
		
							
								
								
									
										53
									
								
								lib/h265.cpp
									
										
									
									
									
								
							
							
						
						
									
										53
									
								
								lib/h265.cpp
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -109,11 +109,6 @@ namespace h265{
 | 
			
		|||
    case 34: // pps
 | 
			
		||||
      nalUnits[nalType].insert(data);
 | 
			
		||||
    }
 | 
			
		||||
    INFO_MSG("added nal of type %" PRIu8, nalType);
 | 
			
		||||
    if (nalType == 32){
 | 
			
		||||
      vpsUnit vps(data);
 | 
			
		||||
      std::cout << vps.toPrettyString(0);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool initData::haveRequired(){
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +156,8 @@ namespace h265{
 | 
			
		|||
 | 
			
		||||
  metaInfo initData::getMeta(){
 | 
			
		||||
    metaInfo res;
 | 
			
		||||
    if (!nalUnits.count(33)){return res;}
 | 
			
		||||
    if (!nalUnits.count(33)){
 | 
			
		||||
      return res;}
 | 
			
		||||
    spsUnit sps(*nalUnits[33].begin());
 | 
			
		||||
    sps.getMeta(res);
 | 
			
		||||
    return res;
 | 
			
		||||
| 
						 | 
				
			
			@ -396,28 +392,53 @@ namespace h265{
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  std::string printShortTermRefPicSet(Utils::bitstream &bs, unsigned int idx, size_t indent){
 | 
			
		||||
  std::string printShortTermRefPicSet(Utils::bitstream &bs, uint64_t idx, size_t count, size_t indent){
 | 
			
		||||
    static std::map<int, int> negativePics;
 | 
			
		||||
    static std::map<int, int> positivePics;
 | 
			
		||||
    if (idx == 0){
 | 
			
		||||
      negativePics.clear();
 | 
			
		||||
      positivePics.clear();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::stringstream r;
 | 
			
		||||
    bool interPrediction = false;
 | 
			
		||||
    if (idx != 0){
 | 
			
		||||
      interPrediction = bs.get(1);
 | 
			
		||||
      r << std::string(indent, ' ')
 | 
			
		||||
        << "inter_ref_pic_set_predicition_flag: " << (interPrediction ? 1 : 0) << std::endl;
 | 
			
		||||
        << "inter_ref_pic_set_prediction_flag: " << (interPrediction ? 1 : 0) << std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    if (interPrediction){
 | 
			
		||||
      WARN_MSG("interprediciton not yet handled");
 | 
			
		||||
 | 
			
		||||
      uint64_t deltaIdxMinus1 = 0;
 | 
			
		||||
      if (idx == count){
 | 
			
		||||
        deltaIdxMinus1 = bs.getUExpGolomb();
 | 
			
		||||
        r << std::string(indent, ' ') << "delta_idx_minus_1: " << deltaIdxMinus1 << std::endl;
 | 
			
		||||
      }
 | 
			
		||||
      r << std::string(indent, ' ')
 | 
			
		||||
        << "delta_rps_sign: " << (int)bs.get(1) << std::endl;
 | 
			
		||||
      r << std::string(indent, ' ')
 | 
			
		||||
        << "abs_delta_rps_minus1: " << bs.getUExpGolomb() << std::endl;
 | 
			
		||||
      uint64_t refRpsIdx = idx - deltaIdxMinus1 - 1;
 | 
			
		||||
      uint64_t deltaPocs = negativePics[refRpsIdx] + positivePics[refRpsIdx];
 | 
			
		||||
      for (int j = 0; j < deltaPocs; j++){
 | 
			
		||||
        bool usedByCurrPicFlag = bs.get(1);
 | 
			
		||||
        r << std::string(indent + 1, ' ') << "used_by_curr_pic_flag[" << j << "]: " << usedByCurrPicFlag << std::endl;
 | 
			
		||||
        if (!usedByCurrPicFlag){
 | 
			
		||||
          r << std::string(indent + 1, ' ') << "used_delta_flag[" << j << "]: " << bs.get(1) << std::endl;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }else{
 | 
			
		||||
      uint64_t negativePics = bs.getUExpGolomb();
 | 
			
		||||
      uint64_t positivePics = bs.getUExpGolomb();
 | 
			
		||||
      r << std::string(indent, ' ') << "num_negative_pics: " << negativePics << std::endl;
 | 
			
		||||
      r << std::string(indent, ' ') << "num_positive_pics: " << positivePics << std::endl;
 | 
			
		||||
      for (int i = 0; i < negativePics; i++){
 | 
			
		||||
      negativePics[idx] = bs.getUExpGolomb();
 | 
			
		||||
      positivePics[idx] = bs.getUExpGolomb();
 | 
			
		||||
      r << std::string(indent, ' ') << "num_negative_pics: " << negativePics[idx] << std::endl;
 | 
			
		||||
      r << std::string(indent, ' ') << "num_positive_pics: " << positivePics[idx] << std::endl;
 | 
			
		||||
      for (int i = 0; i < negativePics[idx]; i++){
 | 
			
		||||
        r << std::string(indent + 1, ' ') << "delta_poc_s0_minus1[" << i
 | 
			
		||||
          << "]: " << bs.getUExpGolomb() << std::endl;
 | 
			
		||||
        r << std::string(indent + 1, ' ') << "used_by_curr_pic_s0_flag[" << i << "]: " << bs.get(1)
 | 
			
		||||
          << std::endl;
 | 
			
		||||
      }
 | 
			
		||||
      for (int i = 0; i < positivePics; i++){
 | 
			
		||||
      for (int i = 0; i < positivePics[idx]; i++){
 | 
			
		||||
        r << std::string(indent + 1, ' ') << "delta_poc_s1_minus1[" << i
 | 
			
		||||
          << "]: " << bs.getUExpGolomb() << std::endl;
 | 
			
		||||
        r << std::string(indent + 1, ' ') << "used_by_curr_pic_s1_flag[" << i << "]: " << bs.get(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -639,7 +660,7 @@ namespace h265{
 | 
			
		|||
      << std::endl;
 | 
			
		||||
    for (int i = 0; i < shortTermPicSets; i++){
 | 
			
		||||
      r << std::string(indent, ' ') << "short_term_ref_pic_set(" << i << "):" << std::endl
 | 
			
		||||
        << printShortTermRefPicSet(bs, i, indent + 1);
 | 
			
		||||
        << printShortTermRefPicSet(bs, i, shortTermPicSets, indent + 1);
 | 
			
		||||
    }
 | 
			
		||||
    bool longTermRefPics = bs.get(1);
 | 
			
		||||
    r << std::string(indent, ' ')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,8 +19,8 @@ namespace h265{
 | 
			
		|||
                                    size_t indent);
 | 
			
		||||
 | 
			
		||||
  struct metaInfo{
 | 
			
		||||
    unsigned int width;
 | 
			
		||||
    unsigned int height;
 | 
			
		||||
    uint64_t width;
 | 
			
		||||
    uint64_t height;
 | 
			
		||||
    double fps;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -896,6 +896,10 @@ namespace TS{
 | 
			
		|||
        meta.tracks[mId].codec = "HEVC";
 | 
			
		||||
        meta.tracks[mId].trackID = mId;
 | 
			
		||||
        meta.tracks[mId].init = hevcInfo[it->first].generateHVCC();
 | 
			
		||||
        h265::metaInfo metaInfo = hevcInfo[it->first].getMeta();
 | 
			
		||||
        meta.tracks[mId].width = metaInfo.width;
 | 
			
		||||
        meta.tracks[mId].height = metaInfo.height;
 | 
			
		||||
        meta.tracks[mId].fpks = metaInfo.fps * 1000;
 | 
			
		||||
        int pmtCount = associationTable.getProgramCount();
 | 
			
		||||
        for (int i = 0; i < pmtCount; i++){
 | 
			
		||||
          int pid = associationTable.getProgramPID(i);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue