Index: source/libvpx/vp9/encoder/vp9_rd.c |
=================================================================== |
--- source/libvpx/vp9/encoder/vp9_rd.c (revision 293588) |
+++ source/libvpx/vp9/encoder/vp9_rd.c (working copy) |
@@ -379,7 +379,7 @@ |
*d_q10 = (dist_tab_q10[xq] * b_q10 + dist_tab_q10[xq + 1] * a_q10) >> 10; |
} |
-void vp9_model_rd_from_var_lapndz(unsigned int var, unsigned int n, |
+void vp9_model_rd_from_var_lapndz(unsigned int var, unsigned int n_log2, |
unsigned int qstep, int *rate, |
int64_t *dist) { |
// This function models the rate and distortion for a Laplacian |
@@ -395,10 +395,10 @@ |
int d_q10, r_q10; |
static const uint32_t MAX_XSQ_Q10 = 245727; |
const uint64_t xsq_q10_64 = |
- ((((uint64_t)qstep * qstep * n) << 10) + (var >> 1)) / var; |
+ (((uint64_t)qstep * qstep << (n_log2 + 10)) + (var >> 1)) / var; |
const int xsq_q10 = (int)MIN(xsq_q10_64, MAX_XSQ_Q10); |
model_rd_norm(xsq_q10, &r_q10, &d_q10); |
- *rate = (n * r_q10 + 2) >> 2; |
+ *rate = ((r_q10 << n_log2) + 2) >> 2; |
*dist = (var * (int64_t)d_q10 + 512) >> 10; |
} |
} |
@@ -516,6 +516,20 @@ |
} |
} |
+int vp9_raster_block_offset(BLOCK_SIZE plane_bsize, |
+ int raster_block, int stride) { |
+ const int bw = b_width_log2_lookup[plane_bsize]; |
+ const int y = 4 * (raster_block >> bw); |
+ const int x = 4 * (raster_block & ((1 << bw) - 1)); |
+ return y * stride + x; |
+} |
+ |
+int16_t* vp9_raster_block_offset_int16(BLOCK_SIZE plane_bsize, |
+ int raster_block, int16_t *base) { |
+ const int stride = 4 * num_4x4_blocks_wide_lookup[plane_bsize]; |
+ return base + vp9_raster_block_offset(plane_bsize, raster_block, stride); |
+} |
+ |
const YV12_BUFFER_CONFIG *vp9_get_scaled_ref_frame(const VP9_COMP *cpi, |
int ref_frame) { |
const VP9_COMMON *const cm = &cpi->common; |