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

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

Issue 1124333011: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: only update to last nights LKGR Created 5 years, 7 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
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_psnrhvs.c ('k') | source/libvpx/vp9/encoder/vp9_ratectrl.h » ('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 12 matching lines...) Expand all
23 int n_coeffs, int skip_block, 23 int n_coeffs, int skip_block,
24 const int16_t *round_ptr, const int16_t quant, 24 const int16_t *round_ptr, const int16_t quant,
25 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 25 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
26 const int16_t dequant_ptr, uint16_t *eob_ptr) { 26 const int16_t dequant_ptr, uint16_t *eob_ptr) {
27 const int rc = 0; 27 const int rc = 0;
28 const int coeff = coeff_ptr[rc]; 28 const int coeff = coeff_ptr[rc];
29 const int coeff_sign = (coeff >> 31); 29 const int coeff_sign = (coeff >> 31);
30 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 30 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
31 int tmp, eob = -1; 31 int tmp, eob = -1;
32 32
33 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 33 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
34 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 34 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
35 35
36 if (!skip_block) { 36 if (!skip_block) {
37 tmp = clamp(abs_coeff + round_ptr[rc != 0], INT16_MIN, INT16_MAX); 37 tmp = clamp(abs_coeff + round_ptr[rc != 0], INT16_MIN, INT16_MAX);
38 tmp = (tmp * quant) >> 16; 38 tmp = (tmp * quant) >> 16;
39 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign; 39 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign;
40 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr; 40 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr;
41 if (tmp) 41 if (tmp)
42 eob = 0; 42 eob = 0;
43 } 43 }
44 *eob_ptr = eob + 1; 44 *eob_ptr = eob + 1;
45 } 45 }
46 46
47 #if CONFIG_VP9_HIGHBITDEPTH 47 #if CONFIG_VP9_HIGHBITDEPTH
48 void vp9_highbd_quantize_dc(const tran_low_t *coeff_ptr, 48 void vp9_highbd_quantize_dc(const tran_low_t *coeff_ptr,
49 int n_coeffs, int skip_block, 49 int n_coeffs, int skip_block,
50 const int16_t *round_ptr, const int16_t quant, 50 const int16_t *round_ptr, const int16_t quant,
51 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 51 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
52 const int16_t dequant_ptr, uint16_t *eob_ptr) { 52 const int16_t dequant_ptr, uint16_t *eob_ptr) {
53 int eob = -1; 53 int eob = -1;
54 54
55 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 55 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
56 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 56 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
57 57
58 if (!skip_block) { 58 if (!skip_block) {
59 const int rc = 0; 59 const int rc = 0;
60 const int coeff = coeff_ptr[rc]; 60 const int coeff = coeff_ptr[rc];
61 const int coeff_sign = (coeff >> 31); 61 const int coeff_sign = (coeff >> 31);
62 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 62 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
63 63
64 const int64_t tmp = 64 const int64_t tmp =
65 (clamp(abs_coeff + round_ptr[rc != 0], INT32_MIN, INT32_MAX) * 65 (clamp(abs_coeff + round_ptr[rc != 0], INT32_MIN, INT32_MAX) *
66 quant) >> 16; 66 quant) >> 16;
(...skipping 10 matching lines...) Expand all
77 const int16_t *round_ptr, const int16_t quant, 77 const int16_t *round_ptr, const int16_t quant,
78 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 78 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
79 const int16_t dequant_ptr, uint16_t *eob_ptr) { 79 const int16_t dequant_ptr, uint16_t *eob_ptr) {
80 const int n_coeffs = 1024; 80 const int n_coeffs = 1024;
81 const int rc = 0; 81 const int rc = 0;
82 const int coeff = coeff_ptr[rc]; 82 const int coeff = coeff_ptr[rc];
83 const int coeff_sign = (coeff >> 31); 83 const int coeff_sign = (coeff >> 31);
84 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 84 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
85 int tmp, eob = -1; 85 int tmp, eob = -1;
86 86
87 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 87 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
88 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 88 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
89 89
90 if (!skip_block) { 90 if (!skip_block) {
91 91
92 tmp = clamp(abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], 1), 92 tmp = clamp(abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], 1),
93 INT16_MIN, INT16_MAX); 93 INT16_MIN, INT16_MAX);
94 tmp = (tmp * quant) >> 15; 94 tmp = (tmp * quant) >> 15;
95 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign; 95 qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign;
96 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr / 2; 96 dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr / 2;
97 if (tmp) 97 if (tmp)
98 eob = 0; 98 eob = 0;
99 } 99 }
100 *eob_ptr = eob + 1; 100 *eob_ptr = eob + 1;
101 } 101 }
102 102
103 #if CONFIG_VP9_HIGHBITDEPTH 103 #if CONFIG_VP9_HIGHBITDEPTH
104 void vp9_highbd_quantize_dc_32x32(const tran_low_t *coeff_ptr, 104 void vp9_highbd_quantize_dc_32x32(const tran_low_t *coeff_ptr,
105 int skip_block, 105 int skip_block,
106 const int16_t *round_ptr, 106 const int16_t *round_ptr,
107 const int16_t quant, 107 const int16_t quant,
108 tran_low_t *qcoeff_ptr, 108 tran_low_t *qcoeff_ptr,
109 tran_low_t *dqcoeff_ptr, 109 tran_low_t *dqcoeff_ptr,
110 const int16_t dequant_ptr, 110 const int16_t dequant_ptr,
111 uint16_t *eob_ptr) { 111 uint16_t *eob_ptr) {
112 const int n_coeffs = 1024; 112 const int n_coeffs = 1024;
113 int eob = -1; 113 int eob = -1;
114 114
115 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 115 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
116 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 116 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
117 117
118 if (!skip_block) { 118 if (!skip_block) {
119 const int rc = 0; 119 const int rc = 0;
120 const int coeff = coeff_ptr[rc]; 120 const int coeff = coeff_ptr[rc];
121 const int coeff_sign = (coeff >> 31); 121 const int coeff_sign = (coeff >> 31);
122 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 122 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
123 123
124 const int64_t tmp = 124 const int64_t tmp =
125 (clamp(abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], 1), 125 (clamp(abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], 1),
126 INT32_MIN, INT32_MAX) * quant) >> 15; 126 INT32_MIN, INT32_MAX) * quant) >> 15;
(...skipping 14 matching lines...) Expand all
141 const int16_t *dequant_ptr, 141 const int16_t *dequant_ptr,
142 uint16_t *eob_ptr, 142 uint16_t *eob_ptr,
143 const int16_t *scan, const int16_t *iscan) { 143 const int16_t *scan, const int16_t *iscan) {
144 int i, eob = -1; 144 int i, eob = -1;
145 // TODO(jingning) Decide the need of these arguments after the 145 // TODO(jingning) Decide the need of these arguments after the
146 // quantization process is completed. 146 // quantization process is completed.
147 (void)zbin_ptr; 147 (void)zbin_ptr;
148 (void)quant_shift_ptr; 148 (void)quant_shift_ptr;
149 (void)iscan; 149 (void)iscan;
150 150
151 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 151 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
152 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 152 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
153 153
154 if (!skip_block) { 154 if (!skip_block) {
155 // Quantization pass: All coefficients with index >= zero_flag are 155 // Quantization pass: All coefficients with index >= zero_flag are
156 // skippable. Note: zero_flag can be zero. 156 // skippable. Note: zero_flag can be zero.
157 for (i = 0; i < n_coeffs; i++) { 157 for (i = 0; i < n_coeffs; i++) {
158 const int rc = scan[i]; 158 const int rc = scan[i];
159 const int coeff = coeff_ptr[rc]; 159 const int coeff = coeff_ptr[rc];
160 const int coeff_sign = (coeff >> 31); 160 const int coeff_sign = (coeff >> 31);
161 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 161 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
162 162
(...skipping 25 matching lines...) Expand all
188 const int16_t *scan, 188 const int16_t *scan,
189 const int16_t *iscan) { 189 const int16_t *iscan) {
190 int i; 190 int i;
191 int eob = -1; 191 int eob = -1;
192 // TODO(jingning) Decide the need of these arguments after the 192 // TODO(jingning) Decide the need of these arguments after the
193 // quantization process is completed. 193 // quantization process is completed.
194 (void)zbin_ptr; 194 (void)zbin_ptr;
195 (void)quant_shift_ptr; 195 (void)quant_shift_ptr;
196 (void)iscan; 196 (void)iscan;
197 197
198 vpx_memset(qcoeff_ptr, 0, count * sizeof(*qcoeff_ptr)); 198 memset(qcoeff_ptr, 0, count * sizeof(*qcoeff_ptr));
199 vpx_memset(dqcoeff_ptr, 0, count * sizeof(*dqcoeff_ptr)); 199 memset(dqcoeff_ptr, 0, count * sizeof(*dqcoeff_ptr));
200 200
201 if (!skip_block) { 201 if (!skip_block) {
202 // Quantization pass: All coefficients with index >= zero_flag are 202 // Quantization pass: All coefficients with index >= zero_flag are
203 // skippable. Note: zero_flag can be zero. 203 // skippable. Note: zero_flag can be zero.
204 for (i = 0; i < count; i++) { 204 for (i = 0; i < count; i++) {
205 const int rc = scan[i]; 205 const int rc = scan[i];
206 const int coeff = coeff_ptr[rc]; 206 const int coeff = coeff_ptr[rc];
207 const int coeff_sign = (coeff >> 31); 207 const int coeff_sign = (coeff >> 31);
208 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 208 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
209 209
(...skipping 21 matching lines...) Expand all
231 const int16_t *quant_shift_ptr, 231 const int16_t *quant_shift_ptr,
232 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 232 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
233 const int16_t *dequant_ptr, 233 const int16_t *dequant_ptr,
234 uint16_t *eob_ptr, 234 uint16_t *eob_ptr,
235 const int16_t *scan, const int16_t *iscan) { 235 const int16_t *scan, const int16_t *iscan) {
236 int i, eob = -1; 236 int i, eob = -1;
237 (void)zbin_ptr; 237 (void)zbin_ptr;
238 (void)quant_shift_ptr; 238 (void)quant_shift_ptr;
239 (void)iscan; 239 (void)iscan;
240 240
241 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 241 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
242 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 242 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
243 243
244 if (!skip_block) { 244 if (!skip_block) {
245 for (i = 0; i < n_coeffs; i++) { 245 for (i = 0; i < n_coeffs; i++) {
246 const int rc = scan[i]; 246 const int rc = scan[i];
247 const int coeff = coeff_ptr[rc]; 247 const int coeff = coeff_ptr[rc];
248 const int coeff_sign = (coeff >> 31); 248 const int coeff_sign = (coeff >> 31);
249 int tmp = 0; 249 int tmp = 0;
250 int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 250 int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
251 251
252 if (abs_coeff >= (dequant_ptr[rc != 0] >> 2)) { 252 if (abs_coeff >= (dequant_ptr[rc != 0] >> 2)) {
(...skipping 21 matching lines...) Expand all
274 tran_low_t *qcoeff_ptr, 274 tran_low_t *qcoeff_ptr,
275 tran_low_t *dqcoeff_ptr, 275 tran_low_t *dqcoeff_ptr,
276 const int16_t *dequant_ptr, 276 const int16_t *dequant_ptr,
277 uint16_t *eob_ptr, 277 uint16_t *eob_ptr,
278 const int16_t *scan, const int16_t *iscan) { 278 const int16_t *scan, const int16_t *iscan) {
279 int i, eob = -1; 279 int i, eob = -1;
280 (void)zbin_ptr; 280 (void)zbin_ptr;
281 (void)quant_shift_ptr; 281 (void)quant_shift_ptr;
282 (void)iscan; 282 (void)iscan;
283 283
284 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 284 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
285 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 285 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
286 286
287 if (!skip_block) { 287 if (!skip_block) {
288 for (i = 0; i < n_coeffs; i++) { 288 for (i = 0; i < n_coeffs; i++) {
289 const int rc = scan[i]; 289 const int rc = scan[i];
290 const int coeff = coeff_ptr[rc]; 290 const int coeff = coeff_ptr[rc];
291 const int coeff_sign = (coeff >> 31); 291 const int coeff_sign = (coeff >> 31);
292 int64_t tmp = 0; 292 int64_t tmp = 0;
293 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 293 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
294 294
295 if (abs_coeff >= (dequant_ptr[rc != 0] >> 2)) { 295 if (abs_coeff >= (dequant_ptr[rc != 0] >> 2)) {
(...skipping 18 matching lines...) Expand all
314 const int16_t *quant_ptr, const int16_t *quant_shift_ptr, 314 const int16_t *quant_ptr, const int16_t *quant_shift_ptr,
315 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 315 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
316 const int16_t *dequant_ptr, 316 const int16_t *dequant_ptr,
317 uint16_t *eob_ptr, 317 uint16_t *eob_ptr,
318 const int16_t *scan, const int16_t *iscan) { 318 const int16_t *scan, const int16_t *iscan) {
319 int i, non_zero_count = (int)n_coeffs, eob = -1; 319 int i, non_zero_count = (int)n_coeffs, eob = -1;
320 const int zbins[2] = {zbin_ptr[0], zbin_ptr[1]}; 320 const int zbins[2] = {zbin_ptr[0], zbin_ptr[1]};
321 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1}; 321 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
322 (void)iscan; 322 (void)iscan;
323 323
324 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 324 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
325 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 325 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
326 326
327 if (!skip_block) { 327 if (!skip_block) {
328 // Pre-scan pass 328 // Pre-scan pass
329 for (i = (int)n_coeffs - 1; i >= 0; i--) { 329 for (i = (int)n_coeffs - 1; i >= 0; i--) {
330 const int rc = scan[i]; 330 const int rc = scan[i];
331 const int coeff = coeff_ptr[rc]; 331 const int coeff = coeff_ptr[rc];
332 332
333 if (coeff < zbins[rc != 0] && coeff > nzbins[rc != 0]) 333 if (coeff < zbins[rc != 0] && coeff > nzbins[rc != 0])
334 non_zero_count--; 334 non_zero_count--;
335 else 335 else
(...skipping 30 matching lines...) Expand all
366 const int16_t *quant_shift_ptr, 366 const int16_t *quant_shift_ptr,
367 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 367 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
368 const int16_t *dequant_ptr, 368 const int16_t *dequant_ptr,
369 uint16_t *eob_ptr, const int16_t *scan, 369 uint16_t *eob_ptr, const int16_t *scan,
370 const int16_t *iscan) { 370 const int16_t *iscan) {
371 int i, non_zero_count = (int)n_coeffs, eob = -1; 371 int i, non_zero_count = (int)n_coeffs, eob = -1;
372 const int zbins[2] = {zbin_ptr[0], zbin_ptr[1]}; 372 const int zbins[2] = {zbin_ptr[0], zbin_ptr[1]};
373 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1}; 373 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
374 (void)iscan; 374 (void)iscan;
375 375
376 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 376 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
377 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 377 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
378 378
379 if (!skip_block) { 379 if (!skip_block) {
380 // Pre-scan pass 380 // Pre-scan pass
381 for (i = (int)n_coeffs - 1; i >= 0; i--) { 381 for (i = (int)n_coeffs - 1; i >= 0; i--) {
382 const int rc = scan[i]; 382 const int rc = scan[i];
383 const int coeff = coeff_ptr[rc]; 383 const int coeff = coeff_ptr[rc];
384 384
385 if (coeff < zbins[rc != 0] && coeff > nzbins[rc != 0]) 385 if (coeff < zbins[rc != 0] && coeff > nzbins[rc != 0])
386 non_zero_count--; 386 non_zero_count--;
387 else 387 else
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 const int16_t *scan, const int16_t *iscan) { 424 const int16_t *scan, const int16_t *iscan) {
425 const int zbins[2] = {ROUND_POWER_OF_TWO(zbin_ptr[0], 1), 425 const int zbins[2] = {ROUND_POWER_OF_TWO(zbin_ptr[0], 1),
426 ROUND_POWER_OF_TWO(zbin_ptr[1], 1)}; 426 ROUND_POWER_OF_TWO(zbin_ptr[1], 1)};
427 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1}; 427 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
428 428
429 int idx = 0; 429 int idx = 0;
430 int idx_arr[1024]; 430 int idx_arr[1024];
431 int i, eob = -1; 431 int i, eob = -1;
432 (void)iscan; 432 (void)iscan;
433 433
434 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 434 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
435 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 435 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
436 436
437 if (!skip_block) { 437 if (!skip_block) {
438 // Pre-scan pass 438 // Pre-scan pass
439 for (i = 0; i < n_coeffs; i++) { 439 for (i = 0; i < n_coeffs; i++) {
440 const int rc = scan[i]; 440 const int rc = scan[i];
441 const int coeff = coeff_ptr[rc]; 441 const int coeff = coeff_ptr[rc];
442 442
443 // If the coefficient is out of the base ZBIN range, keep it for 443 // If the coefficient is out of the base ZBIN range, keep it for
444 // quantization. 444 // quantization.
445 if (coeff >= zbins[rc != 0] || coeff <= nzbins[rc != 0]) 445 if (coeff >= zbins[rc != 0] || coeff <= nzbins[rc != 0])
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 const int16_t *scan, const int16_t *iscan) { 483 const int16_t *scan, const int16_t *iscan) {
484 const int zbins[2] = {ROUND_POWER_OF_TWO(zbin_ptr[0], 1), 484 const int zbins[2] = {ROUND_POWER_OF_TWO(zbin_ptr[0], 1),
485 ROUND_POWER_OF_TWO(zbin_ptr[1], 1)}; 485 ROUND_POWER_OF_TWO(zbin_ptr[1], 1)};
486 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1}; 486 const int nzbins[2] = {zbins[0] * -1, zbins[1] * -1};
487 487
488 int idx = 0; 488 int idx = 0;
489 int idx_arr[1024]; 489 int idx_arr[1024];
490 int i, eob = -1; 490 int i, eob = -1;
491 (void)iscan; 491 (void)iscan;
492 492
493 vpx_memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 493 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
494 vpx_memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 494 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));
495 495
496 if (!skip_block) { 496 if (!skip_block) {
497 // Pre-scan pass 497 // Pre-scan pass
498 for (i = 0; i < n_coeffs; i++) { 498 for (i = 0; i < n_coeffs; i++) {
499 const int rc = scan[i]; 499 const int rc = scan[i];
500 const int coeff = coeff_ptr[rc]; 500 const int coeff = coeff_ptr[rc];
501 501
502 // If the coefficient is out of the base ZBIN range, keep it for 502 // If the coefficient is out of the base ZBIN range, keep it for
503 // quantization. 503 // quantization.
504 if (coeff >= zbins[rc != 0] || coeff <= nzbins[rc != 0]) 504 if (coeff >= zbins[rc != 0] || coeff <= nzbins[rc != 0])
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 quants->uv_round[q][i] = quants->uv_round[q][1]; 639 quants->uv_round[q][i] = quants->uv_round[q][1];
640 cpi->uv_dequant[q][i] = cpi->uv_dequant[q][1]; 640 cpi->uv_dequant[q][i] = cpi->uv_dequant[q][1];
641 } 641 }
642 } 642 }
643 } 643 }
644 644
645 void vp9_init_plane_quantizers(VP9_COMP *cpi, MACROBLOCK *x) { 645 void vp9_init_plane_quantizers(VP9_COMP *cpi, MACROBLOCK *x) {
646 const VP9_COMMON *const cm = &cpi->common; 646 const VP9_COMMON *const cm = &cpi->common;
647 MACROBLOCKD *const xd = &x->e_mbd; 647 MACROBLOCKD *const xd = &x->e_mbd;
648 QUANTS *const quants = &cpi->quants; 648 QUANTS *const quants = &cpi->quants;
649 const int segment_id = xd->mi[0].src_mi->mbmi.segment_id; 649 const int segment_id = xd->mi[0]->mbmi.segment_id;
650 const int qindex = vp9_get_qindex(&cm->seg, segment_id, cm->base_qindex); 650 const int qindex = vp9_get_qindex(&cm->seg, segment_id, cm->base_qindex);
651 const int rdmult = vp9_compute_rd_mult(cpi, qindex + cm->y_dc_delta_q); 651 const int rdmult = vp9_compute_rd_mult(cpi, qindex + cm->y_dc_delta_q);
652 int i; 652 int i;
653 653
654 // Y 654 // Y
655 x->plane[0].quant = quants->y_quant[qindex]; 655 x->plane[0].quant = quants->y_quant[qindex];
656 x->plane[0].quant_fp = quants->y_quant_fp[qindex]; 656 x->plane[0].quant_fp = quants->y_quant_fp[qindex];
657 x->plane[0].round_fp = quants->y_round_fp[qindex]; 657 x->plane[0].round_fp = quants->y_round_fp[qindex];
658 x->plane[0].quant_shift = quants->y_quant_shift[qindex]; 658 x->plane[0].quant_shift = quants->y_quant_shift[qindex];
659 x->plane[0].zbin = quants->y_zbin[qindex]; 659 x->plane[0].zbin = quants->y_zbin[qindex];
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 718
719 int vp9_qindex_to_quantizer(int qindex) { 719 int vp9_qindex_to_quantizer(int qindex) {
720 int quantizer; 720 int quantizer;
721 721
722 for (quantizer = 0; quantizer < 64; ++quantizer) 722 for (quantizer = 0; quantizer < 64; ++quantizer)
723 if (quantizer_to_qindex[quantizer] >= qindex) 723 if (quantizer_to_qindex[quantizer] >= qindex)
724 return quantizer; 724 return quantizer;
725 725
726 return 63; 726 return 63;
727 } 727 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_psnrhvs.c ('k') | source/libvpx/vp9/encoder/vp9_ratectrl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698