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

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

Issue 478033002: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 4 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_pickmode.c ('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
11 #include <math.h> 11 #include <math.h>
12 12
13 #include "vpx_mem/vpx_mem.h" 13 #include "vpx_mem/vpx_mem.h"
14 14
15 #include "vp9/common/vp9_quant_common.h" 15 #include "vp9/common/vp9_quant_common.h"
16 #include "vp9/common/vp9_seg_common.h" 16 #include "vp9/common/vp9_seg_common.h"
17 17
18 #include "vp9/encoder/vp9_encoder.h" 18 #include "vp9/encoder/vp9_encoder.h"
19 #include "vp9/encoder/vp9_quantize.h" 19 #include "vp9/encoder/vp9_quantize.h"
20 #include "vp9/encoder/vp9_rd.h" 20 #include "vp9/encoder/vp9_rd.h"
21 21
22 void vp9_quantize_dc(const int16_t *coeff_ptr, int skip_block, 22 void vp9_quantize_dc(const int16_t *coeff_ptr, int skip_block,
23 const int16_t *round_ptr, const int16_t quant, 23 const int16_t *round_ptr, const int16_t quant,
24 int16_t *qcoeff_ptr, int16_t *dqcoeff_ptr, 24 int16_t *qcoeff_ptr, int16_t *dqcoeff_ptr,
25 const int16_t dequant_ptr, uint16_t *eob_ptr) { 25 const int16_t dequant_ptr, uint16_t *eob_ptr) {
26 int eob = -1; 26 const int rc = 0;
27 const int coeff = coeff_ptr[rc];
28 const int coeff_sign = (coeff >> 31);
29 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
30 int tmp, eob = -1;
27 31
28 if (!skip_block) { 32 if (!skip_block) {
29 const int rc = 0; 33 tmp = clamp(abs_coeff + round_ptr[rc != 0], INT16_MIN, INT16_MAX);
30 const int coeff = coeff_ptr[rc];
31 const int coeff_sign = (coeff >> 31);
32 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
33
34 int tmp = clamp(abs_coeff + round_ptr[rc != 0], INT16_MIN, INT16_MAX);
35 tmp = (tmp * quant) >> 16; 34 tmp = (tmp * quant) >> 16;
36 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign; 35 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign;
37 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr; 36 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr;
38 if (tmp) 37 if (tmp)
39 eob = 0; 38 eob = 0;
40 } 39 }
41 *eob_ptr = eob + 1; 40 *eob_ptr = eob + 1;
42 } 41 }
43 42
44 void vp9_quantize_dc_32x32(const int16_t *coeff_ptr, int skip_block, 43 void vp9_quantize_dc_32x32(const int16_t *coeff_ptr, int skip_block,
45 const int16_t *round_ptr, const int16_t quant, 44 const int16_t *round_ptr, const int16_t quant,
46 int16_t *qcoeff_ptr, int16_t *dqcoeff_ptr, 45 int16_t *qcoeff_ptr, int16_t *dqcoeff_ptr,
47 const int16_t dequant_ptr, uint16_t *eob_ptr) { 46 const int16_t dequant_ptr, uint16_t *eob_ptr) {
48 int eob = -1; 47 const int rc = 0;
48 const int coeff = coeff_ptr[rc];
49 const int coeff_sign = (coeff >> 31);
50 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
51 int tmp, eob = -1;
49 52
50 if (!skip_block) { 53 if (!skip_block) {
51 const int rc = 0;
52 const int coeff = coeff_ptr[rc];
53 const int coeff_sign = (coeff >> 31);
54 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
55 54
56 int tmp = clamp(abs_coeff + round_ptr[rc != 0], INT16_MIN, INT16_MAX); 55 tmp = clamp(abs_coeff + round_ptr[rc != 0], INT16_MIN, INT16_MAX);
57 tmp = (tmp * quant) >> 15; 56 tmp = (tmp * quant) >> 15;
58 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign; 57 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign;
59 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr / 2; 58 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr / 2;
60 if (tmp) 59 if (tmp)
61 eob = 0; 60 eob = 0;
62 } 61 }
63 *eob_ptr = eob + 1; 62 *eob_ptr = eob + 1;
64 } 63 }
65 64
66 void vp9_quantize_fp_c(const int16_t *coeff_ptr, intptr_t count, 65 void vp9_quantize_fp_c(const int16_t *coeff_ptr, intptr_t count,
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 const int zbin = cpi->zbin_mode_boost; 346 const int zbin = cpi->zbin_mode_boost;
348 int i; 347 int i;
349 348
350 // Y 349 // Y
351 x->plane[0].quant = quants->y_quant[qindex]; 350 x->plane[0].quant = quants->y_quant[qindex];
352 x->plane[0].quant_fp = quants->y_quant_fp[qindex]; 351 x->plane[0].quant_fp = quants->y_quant_fp[qindex];
353 x->plane[0].round_fp = quants->y_round_fp[qindex]; 352 x->plane[0].round_fp = quants->y_round_fp[qindex];
354 x->plane[0].quant_shift = quants->y_quant_shift[qindex]; 353 x->plane[0].quant_shift = quants->y_quant_shift[qindex];
355 x->plane[0].zbin = quants->y_zbin[qindex]; 354 x->plane[0].zbin = quants->y_zbin[qindex];
356 x->plane[0].round = quants->y_round[qindex]; 355 x->plane[0].round = quants->y_round[qindex];
356 x->plane[0].quant_thred[0] = cm->y_dequant[qindex][0] *
357 cm->y_dequant[qindex][0];
358 x->plane[0].quant_thred[1] = cm->y_dequant[qindex][1] *
359 cm->y_dequant[qindex][1];
357 x->plane[0].zbin_extra = (int16_t)((cm->y_dequant[qindex][1] * zbin) >> 7); 360 x->plane[0].zbin_extra = (int16_t)((cm->y_dequant[qindex][1] * zbin) >> 7);
358 xd->plane[0].dequant = cm->y_dequant[qindex]; 361 xd->plane[0].dequant = cm->y_dequant[qindex];
359 362
360 // UV 363 // UV
361 for (i = 1; i < 3; i++) { 364 for (i = 1; i < 3; i++) {
362 x->plane[i].quant = quants->uv_quant[qindex]; 365 x->plane[i].quant = quants->uv_quant[qindex];
363 x->plane[i].quant_fp = quants->uv_quant_fp[qindex]; 366 x->plane[i].quant_fp = quants->uv_quant_fp[qindex];
364 x->plane[i].round_fp = quants->uv_round_fp[qindex]; 367 x->plane[i].round_fp = quants->uv_round_fp[qindex];
365 x->plane[i].quant_shift = quants->uv_quant_shift[qindex]; 368 x->plane[i].quant_shift = quants->uv_quant_shift[qindex];
366 x->plane[i].zbin = quants->uv_zbin[qindex]; 369 x->plane[i].zbin = quants->uv_zbin[qindex];
367 x->plane[i].round = quants->uv_round[qindex]; 370 x->plane[i].round = quants->uv_round[qindex];
371 x->plane[i].quant_thred[0] = cm->y_dequant[qindex][0] *
372 cm->y_dequant[qindex][0];
373 x->plane[i].quant_thred[1] = cm->y_dequant[qindex][1] *
374 cm->y_dequant[qindex][1];
368 x->plane[i].zbin_extra = (int16_t)((cm->uv_dequant[qindex][1] * zbin) >> 7); 375 x->plane[i].zbin_extra = (int16_t)((cm->uv_dequant[qindex][1] * zbin) >> 7);
369 xd->plane[i].dequant = cm->uv_dequant[qindex]; 376 xd->plane[i].dequant = cm->uv_dequant[qindex];
370 } 377 }
371 378
372 x->skip_block = vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP); 379 x->skip_block = vp9_segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP);
373 x->q_index = qindex; 380 x->q_index = qindex;
374 381
375 x->errorperbit = rdmult >> 6; 382 x->errorperbit = rdmult >> 6;
376 x->errorperbit += (x->errorperbit == 0); 383 x->errorperbit += (x->errorperbit == 0);
377 384
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 430
424 int vp9_qindex_to_quantizer(int qindex) { 431 int vp9_qindex_to_quantizer(int qindex) {
425 int quantizer; 432 int quantizer;
426 433
427 for (quantizer = 0; quantizer < 64; ++quantizer) 434 for (quantizer = 0; quantizer < 64; ++quantizer)
428 if (quantizer_to_qindex[quantizer] >= qindex) 435 if (quantizer_to_qindex[quantizer] >= qindex)
429 return quantizer; 436 return quantizer;
430 437
431 return 63; 438 return 63;
432 } 439 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_pickmode.c ('k') | source/libvpx/vp9/encoder/vp9_ratectrl.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698