Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: source/libvpx/vp9/encoder/vp9_quantize.c

Issue 812033011: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_quantize.h ('k') | source/libvpx/vp9/encoder/vp9_ratectrl.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 *eob_ptr = eob + 1; 115 *eob_ptr = eob + 1;
116 } 116 }
117 #endif 117 #endif
118 118
119 void vp9_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 119 void vp9_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
120 int skip_block, 120 int skip_block,
121 const int16_t *zbin_ptr, const int16_t *round_ptr, 121 const int16_t *zbin_ptr, const int16_t *round_ptr,
122 const int16_t *quant_ptr, const int16_t *quant_shift_ptr, 122 const int16_t *quant_ptr, const int16_t *quant_shift_ptr,
123 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 123 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
124 const int16_t *dequant_ptr, 124 const int16_t *dequant_ptr,
125 int zbin_oq_value, uint16_t *eob_ptr, 125 uint16_t *eob_ptr,
126 const int16_t *scan, const int16_t *iscan) { 126 const int16_t *scan, const int16_t *iscan) {
127 int i, eob = -1; 127 int i, eob = -1;
128 // TODO(jingning) Decide the need of these arguments after the 128 // TODO(jingning) Decide the need of these arguments after the
129 // quantization process is completed. 129 // quantization process is completed.
130 (void)zbin_ptr; 130 (void)zbin_ptr;
131 (void)quant_shift_ptr; 131 (void)quant_shift_ptr;
132 (void)zbin_oq_value;
133 (void)iscan; 132 (void)iscan;
134 133
135 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 134 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
136 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 135 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
137 136
138 if (!skip_block) { 137 if (!skip_block) {
139 // Quantization pass: All coefficients with index >= zero_flag are 138 // Quantization pass: All coefficients with index >= zero_flag are
140 // skippable. Note: zero_flag can be zero. 139 // skippable. Note: zero_flag can be zero.
141 for (i = 0; i < n_coeffs; i++) { 140 for (i = 0; i < n_coeffs; i++) {
142 const int rc = scan[i]; 141 const int rc = scan[i];
(...skipping 18 matching lines...) Expand all
161 void vp9_highbd_quantize_fp_c(const tran_low_t *coeff_ptr, 160 void vp9_highbd_quantize_fp_c(const tran_low_t *coeff_ptr,
162 intptr_t count, 161 intptr_t count,
163 int skip_block, 162 int skip_block,
164 const int16_t *zbin_ptr, 163 const int16_t *zbin_ptr,
165 const int16_t *round_ptr, 164 const int16_t *round_ptr,
166 const int16_t *quant_ptr, 165 const int16_t *quant_ptr,
167 const int16_t *quant_shift_ptr, 166 const int16_t *quant_shift_ptr,
168 tran_low_t *qcoeff_ptr, 167 tran_low_t *qcoeff_ptr,
169 tran_low_t *dqcoeff_ptr, 168 tran_low_t *dqcoeff_ptr,
170 const int16_t *dequant_ptr, 169 const int16_t *dequant_ptr,
171 int zbin_oq_value,
172 uint16_t *eob_ptr, 170 uint16_t *eob_ptr,
173 const int16_t *scan, 171 const int16_t *scan,
174 const int16_t *iscan) { 172 const int16_t *iscan) {
175 int i; 173 int i;
176 int eob = -1; 174 int eob = -1;
177 // TODO(jingning) Decide the need of these arguments after the 175 // TODO(jingning) Decide the need of these arguments after the
178 // quantization process is completed. 176 // quantization process is completed.
179 (void)zbin_ptr; 177 (void)zbin_ptr;
180 (void)quant_shift_ptr; 178 (void)quant_shift_ptr;
181 (void)zbin_oq_value;
182 (void)iscan; 179 (void)iscan;
183 180
184 vpx_memset(qcoeff_ptr, 0, count * sizeof(*qcoeff_ptr)); 181 vpx_memset(qcoeff_ptr, 0, count * sizeof(*qcoeff_ptr));
185 vpx_memset(dqcoeff_ptr, 0, count * sizeof(*dqcoeff_ptr)); 182 vpx_memset(dqcoeff_ptr, 0, count * sizeof(*dqcoeff_ptr));
186 183
187 if (!skip_block) { 184 if (!skip_block) {
188 // Quantization pass: All coefficients with index >= zero_flag are 185 // Quantization pass: All coefficients with index >= zero_flag are
189 // skippable. Note: zero_flag can be zero. 186 // skippable. Note: zero_flag can be zero.
190 for (i = 0; i < count; i++) { 187 for (i = 0; i < count; i++) {
191 const int rc = scan[i]; 188 const int rc = scan[i];
(...skipping 18 matching lines...) Expand all
210 207
211 // TODO(jingning) Refactor this file and combine functions with similar 208 // TODO(jingning) Refactor this file and combine functions with similar
212 // operations. 209 // operations.
213 void vp9_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 210 void vp9_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
214 int skip_block, 211 int skip_block,
215 const int16_t *zbin_ptr, const int16_t *round_ptr, 212 const int16_t *zbin_ptr, const int16_t *round_ptr,
216 const int16_t *quant_ptr, 213 const int16_t *quant_ptr,
217 const int16_t *quant_shift_ptr, 214 const int16_t *quant_shift_ptr,
218 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 215 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
219 const int16_t *dequant_ptr, 216 const int16_t *dequant_ptr,
220 int zbin_oq_value, uint16_t *eob_ptr, 217 uint16_t *eob_ptr,
221 const int16_t *scan, const int16_t *iscan) { 218 const int16_t *scan, const int16_t *iscan) {
222 int i, eob = -1; 219 int i, eob = -1;
223 (void)zbin_ptr; 220 (void)zbin_ptr;
224 (void)quant_shift_ptr; 221 (void)quant_shift_ptr;
225 (void)zbin_oq_value;
226 (void)iscan; 222 (void)iscan;
227 223
228 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 224 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
229 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 225 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
230 226
231 if (!skip_block) { 227 if (!skip_block) {
232 for (i = 0; i < n_coeffs; i++) { 228 for (i = 0; i < n_coeffs; i++) {
233 const int rc = scan[i]; 229 const int rc = scan[i];
234 const int coeff = coeff_ptr[rc]; 230 const int coeff = coeff_ptr[rc];
235 const int coeff_sign = (coeff >> 31); 231 const int coeff_sign = (coeff >> 31);
(...skipping 18 matching lines...) Expand all
254 #if CONFIG_VP9_HIGHBITDEPTH 250 #if CONFIG_VP9_HIGHBITDEPTH
255 void vp9_highbd_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, 251 void vp9_highbd_quantize_fp_32x32_c(const tran_low_t *coeff_ptr,
256 intptr_t n_coeffs, int skip_block, 252 intptr_t n_coeffs, int skip_block,
257 const int16_t *zbin_ptr, 253 const int16_t *zbin_ptr,
258 const int16_t *round_ptr, 254 const int16_t *round_ptr,
259 const int16_t *quant_ptr, 255 const int16_t *quant_ptr,
260 const int16_t *quant_shift_ptr, 256 const int16_t *quant_shift_ptr,
261 tran_low_t *qcoeff_ptr, 257 tran_low_t *qcoeff_ptr,
262 tran_low_t *dqcoeff_ptr, 258 tran_low_t *dqcoeff_ptr,
263 const int16_t *dequant_ptr, 259 const int16_t *dequant_ptr,
264 int zbin_oq_value, uint16_t *eob_ptr, 260 uint16_t *eob_ptr,
265 const int16_t *scan, const int16_t *iscan) { 261 const int16_t *scan, const int16_t *iscan) {
266 int i, eob = -1; 262 int i, eob = -1;
267 (void)zbin_ptr; 263 (void)zbin_ptr;
268 (void)quant_shift_ptr; 264 (void)quant_shift_ptr;
269 (void)zbin_oq_value;
270 (void)iscan; 265 (void)iscan;
271 266
272 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 267 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
273 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 268 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
274 269
275 if (!skip_block) { 270 if (!skip_block) {
276 for (i = 0; i < n_coeffs; i++) { 271 for (i = 0; i < n_coeffs; i++) {
277 const int rc = scan[i]; 272 const int rc = scan[i];
278 const int coeff = coeff_ptr[rc]; 273 const int coeff = coeff_ptr[rc];
279 const int coeff_sign = (coeff >> 31); 274 const int coeff_sign = (coeff >> 31);
(...skipping 15 matching lines...) Expand all
295 *eob_ptr = eob + 1; 290 *eob_ptr = eob + 1;
296 } 291 }
297 #endif 292 #endif
298 293
299 void vp9_quantize_b_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 294 void vp9_quantize_b_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
300 int skip_block, 295 int skip_block,
301 const int16_t *zbin_ptr, const int16_t *round_ptr, 296 const int16_t *zbin_ptr, const int16_t *round_ptr,
302 const int16_t *quant_ptr, const int16_t *quant_shift_ptr, 297 const int16_t *quant_ptr, const int16_t *quant_shift_ptr,
303 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 298 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
304 const int16_t *dequant_ptr, 299 const int16_t *dequant_ptr,
305 int zbin_oq_value, uint16_t *eob_ptr, 300 uint16_t *eob_ptr,
306 const int16_t *scan, const int16_t *iscan) { 301 const int16_t *scan, const int16_t *iscan) {
307 int i, non_zero_count = (int)n_coeffs, eob = -1; 302 int i, non_zero_count = (int)n_coeffs, eob = -1;
308 const int zbins[2] = { zbin_ptr[0] + zbin_oq_value, 303 const int zbins[2] = {zbin_ptr[0], zbin_ptr[1]};
309 zbin_ptr[1] + zbin_oq_value }; 304 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
310 const int nzbins[2] = { zbins[0] * -1,
311 zbins[1] * -1 };
312 (void)iscan; 305 (void)iscan;
313 306
314 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 307 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
315 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 308 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
316 309
317 if (!skip_block) { 310 if (!skip_block) {
318 // Pre-scan pass 311 // Pre-scan pass
319 for (i = (int)n_coeffs - 1; i >= 0; i--) { 312 for (i = (int)n_coeffs - 1; i >= 0; i--) {
320 const int rc = scan[i]; 313 const int rc = scan[i];
321 const int coeff = coeff_ptr[rc]; 314 const int coeff = coeff_ptr[rc];
(...skipping 26 matching lines...) Expand all
348 } 341 }
349 *eob_ptr = eob + 1; 342 *eob_ptr = eob + 1;
350 } 343 }
351 344
352 #if CONFIG_VP9_HIGHBITDEPTH 345 #if CONFIG_VP9_HIGHBITDEPTH
353 void vp9_highbd_quantize_b_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 346 void vp9_highbd_quantize_b_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
354 int skip_block, const int16_t *zbin_ptr, 347 int skip_block, const int16_t *zbin_ptr,
355 const int16_t *round_ptr, const int16_t *quant_ptr, 348 const int16_t *round_ptr, const int16_t *quant_ptr,
356 const int16_t *quant_shift_ptr, 349 const int16_t *quant_shift_ptr,
357 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 350 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
358 const int16_t *dequant_ptr, int zbin_oq_value, 351 const int16_t *dequant_ptr,
359 uint16_t *eob_ptr, const int16_t *scan, 352 uint16_t *eob_ptr, const int16_t *scan,
360 const int16_t *iscan) { 353 const int16_t *iscan) {
361 int i, non_zero_count = (int)n_coeffs, eob = -1; 354 int i, non_zero_count = (int)n_coeffs, eob = -1;
362 const int zbins[2] = { zbin_ptr[0] + zbin_oq_value, 355 const int zbins[2] = {zbin_ptr[0], zbin_ptr[1]};
363 zbin_ptr[1] + zbin_oq_value }; 356 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
364 const int nzbins[2] = { zbins[0] * -1,
365 zbins[1] * -1 };
366 (void)iscan; 357 (void)iscan;
367 358
368 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 359 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
369 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 360 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
370 361
371 if (!skip_block) { 362 if (!skip_block) {
372 // Pre-scan pass 363 // Pre-scan pass
373 for (i = (int)n_coeffs - 1; i >= 0; i--) { 364 for (i = (int)n_coeffs - 1; i >= 0; i--) {
374 const int rc = scan[i]; 365 const int rc = scan[i];
375 const int coeff = coeff_ptr[rc]; 366 const int coeff = coeff_ptr[rc];
(...skipping 29 matching lines...) Expand all
405 } 396 }
406 #endif 397 #endif
407 398
408 void vp9_quantize_b_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 399 void vp9_quantize_b_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
409 int skip_block, 400 int skip_block,
410 const int16_t *zbin_ptr, const int16_t *round_ptr, 401 const int16_t *zbin_ptr, const int16_t *round_ptr,
411 const int16_t *quant_ptr, 402 const int16_t *quant_ptr,
412 const int16_t *quant_shift_ptr, 403 const int16_t *quant_shift_ptr,
413 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 404 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
414 const int16_t *dequant_ptr, 405 const int16_t *dequant_ptr,
415 int zbin_oq_value, uint16_t *eob_ptr, 406 uint16_t *eob_ptr,
416 const int16_t *scan, const int16_t *iscan) { 407 const int16_t *scan, const int16_t *iscan) {
417 const int zbins[2] = { ROUND_POWER_OF_TWO(zbin_ptr[0] + zbin_oq_value, 1), 408 const int zbins[2] = {ROUND_POWER_OF_TWO(zbin_ptr[0], 1),
418 ROUND_POWER_OF_TWO(zbin_ptr[1] + zbin_oq_value, 1) }; 409 ROUND_POWER_OF_TWO(zbin_ptr[1], 1)};
419 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1}; 410 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
420 411
421 int idx = 0; 412 int idx = 0;
422 int idx_arr[1024]; 413 int idx_arr[1024];
423 int i, eob = -1; 414 int i, eob = -1;
424 (void)iscan; 415 (void)iscan;
425 416
426 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 417 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
427 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 418 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
428 419
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 #if CONFIG_VP9_HIGHBITDEPTH 455 #if CONFIG_VP9_HIGHBITDEPTH
465 void vp9_highbd_quantize_b_32x32_c(const tran_low_t *coeff_ptr, 456 void vp9_highbd_quantize_b_32x32_c(const tran_low_t *coeff_ptr,
466 intptr_t n_coeffs, int skip_block, 457 intptr_t n_coeffs, int skip_block,
467 const int16_t *zbin_ptr, 458 const int16_t *zbin_ptr,
468 const int16_t *round_ptr, 459 const int16_t *round_ptr,
469 const int16_t *quant_ptr, 460 const int16_t *quant_ptr,
470 const int16_t *quant_shift_ptr, 461 const int16_t *quant_shift_ptr,
471 tran_low_t *qcoeff_ptr, 462 tran_low_t *qcoeff_ptr,
472 tran_low_t *dqcoeff_ptr, 463 tran_low_t *dqcoeff_ptr,
473 const int16_t *dequant_ptr, 464 const int16_t *dequant_ptr,
474 int zbin_oq_value, uint16_t *eob_ptr, 465 uint16_t *eob_ptr,
475 const int16_t *scan, const int16_t *iscan) { 466 const int16_t *scan, const int16_t *iscan) {
476 const int zbins[2] = { ROUND_POWER_OF_TWO(zbin_ptr[0] + zbin_oq_value, 1), 467 const int zbins[2] = {ROUND_POWER_OF_TWO(zbin_ptr[0], 1),
477 ROUND_POWER_OF_TWO(zbin_ptr[1] + zbin_oq_value, 1) }; 468 ROUND_POWER_OF_TWO(zbin_ptr[1], 1)};
478 const int nzbins[2] = { zbins[0] * -1, zbins[1] * -1 }; 469 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
479 470
480 int idx = 0; 471 int idx = 0;
481 int idx_arr[1024]; 472 int idx_arr[1024];
482 int i, eob = -1; 473 int i, eob = -1;
483 (void)iscan; 474 (void)iscan;
484 475
485 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 476 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
486 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 477 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
487 478
488 if (!skip_block) { 479 if (!skip_block) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 struct macroblock_plane *p = &x->plane[plane]; 518 struct macroblock_plane *p = &x->plane[plane];
528 struct macroblockd_plane *pd = &xd->plane[plane]; 519 struct macroblockd_plane *pd = &xd->plane[plane];
529 520
530 #if CONFIG_VP9_HIGHBITDEPTH 521 #if CONFIG_VP9_HIGHBITDEPTH
531 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { 522 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
532 vp9_highbd_quantize_b(BLOCK_OFFSET(p->coeff, block), 523 vp9_highbd_quantize_b(BLOCK_OFFSET(p->coeff, block),
533 16, x->skip_block, 524 16, x->skip_block,
534 p->zbin, p->round, p->quant, p->quant_shift, 525 p->zbin, p->round, p->quant, p->quant_shift,
535 BLOCK_OFFSET(p->qcoeff, block), 526 BLOCK_OFFSET(p->qcoeff, block),
536 BLOCK_OFFSET(pd->dqcoeff, block), 527 BLOCK_OFFSET(pd->dqcoeff, block),
537 pd->dequant, p->zbin_extra, &p->eobs[block], 528 pd->dequant, &p->eobs[block],
538 scan, iscan); 529 scan, iscan);
539 return; 530 return;
540 } 531 }
541 #endif 532 #endif
542 vp9_quantize_b(BLOCK_OFFSET(p->coeff, block), 533 vp9_quantize_b(BLOCK_OFFSET(p->coeff, block),
543 16, x->skip_block, 534 16, x->skip_block,
544 p->zbin, p->round, p->quant, p->quant_shift, 535 p->zbin, p->round, p->quant, p->quant_shift,
545 BLOCK_OFFSET(p->qcoeff, block), 536 BLOCK_OFFSET(p->qcoeff, block),
546 BLOCK_OFFSET(pd->dqcoeff, block), 537 BLOCK_OFFSET(pd->dqcoeff, block),
547 pd->dequant, p->zbin_extra, &p->eobs[block], scan, iscan); 538 pd->dequant, &p->eobs[block], scan, iscan);
548 } 539 }
549 540
550 static void invert_quant(int16_t *quant, int16_t *shift, int d) { 541 static void invert_quant(int16_t *quant, int16_t *shift, int d) {
551 unsigned t; 542 unsigned t;
552 int l; 543 int l;
553 t = d; 544 t = d;
554 for (l = 0; t > 1; l++) 545 for (l = 0; t > 1; l++)
555 t >>= 1; 546 t >>= 1;
556 t = 1 + (1 << (16 + l)) / d; 547 t = 1 + (1 << (16 + l)) / d;
557 *quant = (int16_t)(t - (1 << 16)); 548 *quant = (int16_t)(t - (1 << 16));
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 } 625 }
635 } 626 }
636 627
637 void vp9_init_plane_quantizers(VP9_COMP *cpi, MACROBLOCK *x) { 628 void vp9_init_plane_quantizers(VP9_COMP *cpi, MACROBLOCK *x) {
638 const VP9_COMMON *const cm = &cpi->common; 629 const VP9_COMMON *const cm = &cpi->common;
639 MACROBLOCKD *const xd = &x->e_mbd; 630 MACROBLOCKD *const xd = &x->e_mbd;
640 QUANTS *const quants = &cpi->quants; 631 QUANTS *const quants = &cpi->quants;
641 const int segment_id = xd->mi[0].src_mi->mbmi.segment_id; 632 const int segment_id = xd->mi[0].src_mi->mbmi.segment_id;
642 const int qindex = vp9_get_qindex(&cm->seg, segment_id, cm->base_qindex); 633 const int qindex = vp9_get_qindex(&cm->seg, segment_id, cm->base_qindex);
643 const int rdmult = vp9_compute_rd_mult(cpi, qindex + cm->y_dc_delta_q); 634 const int rdmult = vp9_compute_rd_mult(cpi, qindex + cm->y_dc_delta_q);
644 const int zbin = cpi->zbin_mode_boost;
645 int i; 635 int i;
646 636
647 // Y 637 // Y
648 x->plane[0].quant = quants->y_quant[qindex]; 638 x->plane[0].quant = quants->y_quant[qindex];
649 x->plane[0].quant_fp = quants->y_quant_fp[qindex]; 639 x->plane[0].quant_fp = quants->y_quant_fp[qindex];
650 x->plane[0].round_fp = quants->y_round_fp[qindex]; 640 x->plane[0].round_fp = quants->y_round_fp[qindex];
651 x->plane[0].quant_shift = quants->y_quant_shift[qindex]; 641 x->plane[0].quant_shift = quants->y_quant_shift[qindex];
652 x->plane[0].zbin = quants->y_zbin[qindex]; 642 x->plane[0].zbin = quants->y_zbin[qindex];
653 x->plane[0].round = quants->y_round[qindex]; 643 x->plane[0].round = quants->y_round[qindex];
654 x->plane[0].zbin_extra = (int16_t)((cm->y_dequant[qindex][1] * zbin) >> 7);
655 xd->plane[0].dequant = cm->y_dequant[qindex]; 644 xd->plane[0].dequant = cm->y_dequant[qindex];
656 645
657 x->plane[0].quant_thred[0] = (x->plane[0].zbin[0] + x->plane[0].zbin_extra) * 646 x->plane[0].quant_thred[0] = x->plane[0].zbin[0] * x->plane[0].zbin[0];
658 (x->plane[0].zbin[0] + x->plane[0].zbin_extra); 647 x->plane[0].quant_thred[1] = x->plane[0].zbin[1] * x->plane[0].zbin[1];
659 x->plane[0].quant_thred[1] = (x->plane[0].zbin[1] + x->plane[0].zbin_extra) *
660 (x->plane[0].zbin[1] + x->plane[0].zbin_extra);
661 648
662 // UV 649 // UV
663 for (i = 1; i < 3; i++) { 650 for (i = 1; i < 3; i++) {
664 x->plane[i].quant = quants->uv_quant[qindex]; 651 x->plane[i].quant = quants->uv_quant[qindex];
665 x->plane[i].quant_fp = quants->uv_quant_fp[qindex]; 652 x->plane[i].quant_fp = quants->uv_quant_fp[qindex];
666 x->plane[i].round_fp = quants->uv_round_fp[qindex]; 653 x->plane[i].round_fp = quants->uv_round_fp[qindex];
667 x->plane[i].quant_shift = quants->uv_quant_shift[qindex]; 654 x->plane[i].quant_shift = quants->uv_quant_shift[qindex];
668 x->plane[i].zbin = quants->uv_zbin[qindex]; 655 x->plane[i].zbin = quants->uv_zbin[qindex];
669 x->plane[i].round = quants->uv_round[qindex]; 656 x->plane[i].round = quants->uv_round[qindex];
670 x->plane[i].zbin_extra = (int16_t)((cm->uv_dequant[qindex][1] * zbin) >> 7);
671 xd->plane[i].dequant = cm->uv_dequant[qindex]; 657 xd->plane[i].dequant = cm->uv_dequant[qindex];
672 658
673 x->plane[i].quant_thred[0] = 659 x->plane[i].quant_thred[0] = x->plane[i].zbin[0] * x->plane[i].zbin[0];
674 (x->plane[i].zbin[0] + x->plane[i].zbin_extra) * 660 x->plane[i].quant_thred[1] = x->plane[i].zbin[1] * x->plane[i].zbin[1];
675 (x->plane[i].zbin[0] + x->plane[i].zbin_extra);
676 x->plane[i].quant_thred[1] =
677 (x->plane[i].zbin[1] + x->plane[i].zbin_extra) *
678 (x->plane[i].zbin[1] + x->plane[i].zbin_extra);
679 } 661 }
680 662
681 x->skip_block = vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP); 663 x->skip_block = vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP);
682 x->q_index = qindex; 664 x->q_index = qindex;
683 665
684 x->errorperbit = rdmult >> 6; 666 x->errorperbit = rdmult >> 6;
685 x->errorperbit += (x->errorperbit == 0); 667 x->errorperbit += (x->errorperbit == 0);
686 668
687 vp9_initialize_me_consts(cpi, x->q_index); 669 vp9_initialize_me_consts(cpi, x->q_index);
688 } 670 }
689 671
690 void vp9_update_zbin_extra(VP9_COMP *cpi, MACROBLOCK *x) {
691 const int qindex = x->q_index;
692 const int y_zbin_extra = (cpi->common.y_dequant[qindex][1] *
693 cpi->zbin_mode_boost) >> 7;
694 const int uv_zbin_extra = (cpi->common.uv_dequant[qindex][1] *
695 cpi->zbin_mode_boost) >> 7;
696
697 x->plane[0].zbin_extra = (int16_t)y_zbin_extra;
698 x->plane[1].zbin_extra = (int16_t)uv_zbin_extra;
699 x->plane[2].zbin_extra = (int16_t)uv_zbin_extra;
700 }
701
702 void vp9_frame_init_quantizer(VP9_COMP *cpi) { 672 void vp9_frame_init_quantizer(VP9_COMP *cpi) {
703 cpi->zbin_mode_boost = 0;
704 vp9_init_plane_quantizers(cpi, &cpi->td.mb); 673 vp9_init_plane_quantizers(cpi, &cpi->td.mb);
705 } 674 }
706 675
707 void vp9_set_quantizer(VP9_COMMON *cm, int q) { 676 void vp9_set_quantizer(VP9_COMMON *cm, int q) {
708 // quantizer has to be reinitialized with vp9_init_quantizer() if any 677 // quantizer has to be reinitialized with vp9_init_quantizer() if any
709 // delta_q changes. 678 // delta_q changes.
710 cm->base_qindex = q; 679 cm->base_qindex = q;
711 cm->y_dc_delta_q = 0; 680 cm->y_dc_delta_q = 0;
712 cm->uv_dc_delta_q = 0; 681 cm->uv_dc_delta_q = 0;
713 cm->uv_ac_delta_q = 0; 682 cm->uv_ac_delta_q = 0;
(...skipping 18 matching lines...) Expand all
732 701
733 int vp9_qindex_to_quantizer(int qindex) { 702 int vp9_qindex_to_quantizer(int qindex) {
734 int quantizer; 703 int quantizer;
735 704
736 for (quantizer = 0; quantizer < 64; ++quantizer) 705 for (quantizer = 0; quantizer < 64; ++quantizer)
737 if (quantizer_to_qindex[quantizer] >= qindex) 706 if (quantizer_to_qindex[quantizer] >= qindex)
738 return quantizer; 707 return quantizer;
739 708
740 return 63; 709 return 63;
741 } 710 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_quantize.h ('k') | source/libvpx/vp9/encoder/vp9_ratectrl.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698