Disable early exit based on distortion in lossless
In lossless coding, distortion is always 0. Early exit based on this metric was incorrect. This CL also changed to use best_rd instead of distortion as the metric for easly exit as requested by Jim. Change-Id: I8ef3e407ac03b4abc3283b273f936a68fad5c2ab
This commit is contained in:
		@@ -1640,7 +1640,8 @@ static void rd_pick_partition(VP9_COMP *cpi, const TileInfo *const tile,
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
      sum_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_dist);
 | 
					      sum_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_dist);
 | 
				
			||||||
      if (sum_rd < best_rd) {
 | 
					      if (sum_rd < best_rd) {
 | 
				
			||||||
        int64_t stop_thresh = 2048;
 | 
					        int64_t stop_thresh = 4096;
 | 
				
			||||||
 | 
					        int64_t stop_thresh_rd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        best_rate = this_rate;
 | 
					        best_rate = this_rate;
 | 
				
			||||||
        best_dist = this_dist;
 | 
					        best_dist = this_dist;
 | 
				
			||||||
@@ -1652,9 +1653,10 @@ static void rd_pick_partition(VP9_COMP *cpi, const TileInfo *const tile,
 | 
				
			|||||||
        stop_thresh >>= 8 - (b_width_log2_lookup[bsize] +
 | 
					        stop_thresh >>= 8 - (b_width_log2_lookup[bsize] +
 | 
				
			||||||
            b_height_log2_lookup[bsize]);
 | 
					            b_height_log2_lookup[bsize]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        stop_thresh_rd = RDCOST(x->rdmult, x->rddiv, 0, stop_thresh);
 | 
				
			||||||
        // If obtained distortion is very small, choose current partition
 | 
					        // If obtained distortion is very small, choose current partition
 | 
				
			||||||
        // and stop splitting.
 | 
					        // and stop splitting.
 | 
				
			||||||
        if (this_dist < stop_thresh) {
 | 
					        if (!x->e_mbd.lossless && best_rd < stop_thresh_rd) {
 | 
				
			||||||
          do_split = 0;
 | 
					          do_split = 0;
 | 
				
			||||||
          do_rect = 0;
 | 
					          do_rect = 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user