OLD | NEW |
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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 pt = get_coef_context(nb, token_cache, idx + 1); | 96 pt = get_coef_context(nb, token_cache, idx + 1); |
97 token_cache[scan[idx]] = bak; | 97 token_cache[scan[idx]] = bak; |
98 return pt; | 98 return pt; |
99 } | 99 } |
100 | 100 |
101 static int optimize_b(MACROBLOCK *mb, int plane, int block, | 101 static int optimize_b(MACROBLOCK *mb, int plane, int block, |
102 TX_SIZE tx_size, int ctx) { | 102 TX_SIZE tx_size, int ctx) { |
103 MACROBLOCKD *const xd = &mb->e_mbd; | 103 MACROBLOCKD *const xd = &mb->e_mbd; |
104 struct macroblock_plane *const p = &mb->plane[plane]; | 104 struct macroblock_plane *const p = &mb->plane[plane]; |
105 struct macroblockd_plane *const pd = &xd->plane[plane]; | 105 struct macroblockd_plane *const pd = &xd->plane[plane]; |
106 const int ref = is_inter_block(&xd->mi[0]->mbmi); | 106 const int ref = is_inter_block(&xd->mi[0].src_mi->mbmi); |
107 vp9_token_state tokens[1025][2]; | 107 vp9_token_state tokens[1025][2]; |
108 unsigned best_index[1025][2]; | 108 unsigned best_index[1025][2]; |
109 uint8_t token_cache[1024]; | 109 uint8_t token_cache[1024]; |
110 const int16_t *const coeff = BLOCK_OFFSET(mb->plane[plane].coeff, block); | 110 const tran_low_t *const coeff = BLOCK_OFFSET(mb->plane[plane].coeff, block); |
111 int16_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); | 111 tran_low_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); |
112 int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); | 112 tran_low_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); |
113 const int eob = p->eobs[block]; | 113 const int eob = p->eobs[block]; |
114 const PLANE_TYPE type = pd->plane_type; | 114 const PLANE_TYPE type = pd->plane_type; |
115 const int default_eob = 16 << (tx_size << 1); | 115 const int default_eob = 16 << (tx_size << 1); |
116 const int mul = 1 + (tx_size == TX_32X32); | 116 const int mul = 1 + (tx_size == TX_32X32); |
117 const int16_t *dequant_ptr = pd->dequant; | 117 const int16_t *dequant_ptr = pd->dequant; |
118 const uint8_t *const band_translate = get_band_translate(tx_size); | 118 const uint8_t *const band_translate = get_band_translate(tx_size); |
119 const scan_order *const so = get_scan(xd, tx_size, type, block); | 119 const scan_order *const so = get_scan(xd, tx_size, type, block); |
120 const int16_t *const scan = so->scan; | 120 const int16_t *const scan = so->scan; |
121 const int16_t *const nb = so->neighbors; | 121 const int16_t *const nb = so->neighbors; |
122 int next = eob, sz = 0; | 122 int next = eob, sz = 0; |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 next = tokens[i][best].next; | 287 next = tokens[i][best].next; |
288 best = best_index[i][best]; | 288 best = best_index[i][best]; |
289 } | 289 } |
290 final_eob++; | 290 final_eob++; |
291 | 291 |
292 mb->plane[plane].eobs[block] = final_eob; | 292 mb->plane[plane].eobs[block] = final_eob; |
293 return final_eob; | 293 return final_eob; |
294 } | 294 } |
295 | 295 |
296 static INLINE void fdct32x32(int rd_transform, | 296 static INLINE void fdct32x32(int rd_transform, |
297 const int16_t *src, int16_t *dst, int src_stride) { | 297 const int16_t *src, tran_low_t *dst, |
| 298 int src_stride) { |
298 if (rd_transform) | 299 if (rd_transform) |
299 vp9_fdct32x32_rd(src, dst, src_stride); | 300 vp9_fdct32x32_rd(src, dst, src_stride); |
300 else | 301 else |
301 vp9_fdct32x32(src, dst, src_stride); | 302 vp9_fdct32x32(src, dst, src_stride); |
302 } | 303 } |
303 | 304 |
| 305 #if CONFIG_VP9_HIGHBITDEPTH |
| 306 static INLINE void high_fdct32x32(int rd_transform, const int16_t *src, |
| 307 tran_low_t *dst, int src_stride) { |
| 308 if (rd_transform) |
| 309 vp9_high_fdct32x32_rd(src, dst, src_stride); |
| 310 else |
| 311 vp9_high_fdct32x32(src, dst, src_stride); |
| 312 } |
| 313 #endif |
| 314 |
304 void vp9_xform_quant_fp(MACROBLOCK *x, int plane, int block, | 315 void vp9_xform_quant_fp(MACROBLOCK *x, int plane, int block, |
305 BLOCK_SIZE plane_bsize, TX_SIZE tx_size) { | 316 BLOCK_SIZE plane_bsize, TX_SIZE tx_size) { |
306 MACROBLOCKD *const xd = &x->e_mbd; | 317 MACROBLOCKD *const xd = &x->e_mbd; |
307 const struct macroblock_plane *const p = &x->plane[plane]; | 318 const struct macroblock_plane *const p = &x->plane[plane]; |
308 const struct macroblockd_plane *const pd = &xd->plane[plane]; | 319 const struct macroblockd_plane *const pd = &xd->plane[plane]; |
309 const scan_order *const scan_order = &vp9_default_scan_orders[tx_size]; | 320 const scan_order *const scan_order = &vp9_default_scan_orders[tx_size]; |
310 int16_t *const coeff = BLOCK_OFFSET(p->coeff, block); | 321 tran_low_t *const coeff = BLOCK_OFFSET(p->coeff, block); |
311 int16_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); | 322 tran_low_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); |
312 int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); | 323 tran_low_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); |
313 uint16_t *const eob = &p->eobs[block]; | 324 uint16_t *const eob = &p->eobs[block]; |
314 const int diff_stride = 4 * num_4x4_blocks_wide_lookup[plane_bsize]; | 325 const int diff_stride = 4 * num_4x4_blocks_wide_lookup[plane_bsize]; |
315 int i, j; | 326 int i, j; |
316 const int16_t *src_diff; | 327 const int16_t *src_diff; |
317 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); | 328 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); |
318 src_diff = &p->src_diff[4 * (j * diff_stride + i)]; | 329 src_diff = &p->src_diff[4 * (j * diff_stride + i)]; |
319 | 330 |
320 switch (tx_size) { | 331 switch (tx_size) { |
321 case TX_32X32: | 332 case TX_32X32: |
322 fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride); | 333 fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride); |
(...skipping 27 matching lines...) Expand all Loading... |
350 assert(0); | 361 assert(0); |
351 break; | 362 break; |
352 } | 363 } |
353 } | 364 } |
354 | 365 |
355 void vp9_xform_quant_dc(MACROBLOCK *x, int plane, int block, | 366 void vp9_xform_quant_dc(MACROBLOCK *x, int plane, int block, |
356 BLOCK_SIZE plane_bsize, TX_SIZE tx_size) { | 367 BLOCK_SIZE plane_bsize, TX_SIZE tx_size) { |
357 MACROBLOCKD *const xd = &x->e_mbd; | 368 MACROBLOCKD *const xd = &x->e_mbd; |
358 const struct macroblock_plane *const p = &x->plane[plane]; | 369 const struct macroblock_plane *const p = &x->plane[plane]; |
359 const struct macroblockd_plane *const pd = &xd->plane[plane]; | 370 const struct macroblockd_plane *const pd = &xd->plane[plane]; |
360 int16_t *const coeff = BLOCK_OFFSET(p->coeff, block); | 371 tran_low_t *const coeff = BLOCK_OFFSET(p->coeff, block); |
361 int16_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); | 372 tran_low_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); |
362 int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); | 373 tran_low_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); |
363 uint16_t *const eob = &p->eobs[block]; | 374 uint16_t *const eob = &p->eobs[block]; |
364 const int diff_stride = 4 * num_4x4_blocks_wide_lookup[plane_bsize]; | 375 const int diff_stride = 4 * num_4x4_blocks_wide_lookup[plane_bsize]; |
365 int i, j; | 376 int i, j; |
366 const int16_t *src_diff; | 377 const int16_t *src_diff; |
367 | 378 |
368 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); | 379 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); |
369 src_diff = &p->src_diff[4 * (j * diff_stride + i)]; | 380 src_diff = &p->src_diff[4 * (j * diff_stride + i)]; |
370 | 381 |
371 switch (tx_size) { | 382 switch (tx_size) { |
372 case TX_32X32: | 383 case TX_32X32: |
(...skipping 25 matching lines...) Expand all Loading... |
398 break; | 409 break; |
399 } | 410 } |
400 } | 411 } |
401 | 412 |
402 void vp9_xform_quant(MACROBLOCK *x, int plane, int block, | 413 void vp9_xform_quant(MACROBLOCK *x, int plane, int block, |
403 BLOCK_SIZE plane_bsize, TX_SIZE tx_size) { | 414 BLOCK_SIZE plane_bsize, TX_SIZE tx_size) { |
404 MACROBLOCKD *const xd = &x->e_mbd; | 415 MACROBLOCKD *const xd = &x->e_mbd; |
405 const struct macroblock_plane *const p = &x->plane[plane]; | 416 const struct macroblock_plane *const p = &x->plane[plane]; |
406 const struct macroblockd_plane *const pd = &xd->plane[plane]; | 417 const struct macroblockd_plane *const pd = &xd->plane[plane]; |
407 const scan_order *const scan_order = &vp9_default_scan_orders[tx_size]; | 418 const scan_order *const scan_order = &vp9_default_scan_orders[tx_size]; |
408 int16_t *const coeff = BLOCK_OFFSET(p->coeff, block); | 419 tran_low_t *const coeff = BLOCK_OFFSET(p->coeff, block); |
409 int16_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); | 420 tran_low_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); |
410 int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); | 421 tran_low_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); |
411 uint16_t *const eob = &p->eobs[block]; | 422 uint16_t *const eob = &p->eobs[block]; |
412 const int diff_stride = 4 * num_4x4_blocks_wide_lookup[plane_bsize]; | 423 const int diff_stride = 4 * num_4x4_blocks_wide_lookup[plane_bsize]; |
413 int i, j; | 424 int i, j; |
414 const int16_t *src_diff; | 425 const int16_t *src_diff; |
415 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); | 426 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); |
416 src_diff = &p->src_diff[4 * (j * diff_stride + i)]; | 427 src_diff = &p->src_diff[4 * (j * diff_stride + i)]; |
417 | 428 |
418 switch (tx_size) { | 429 switch (tx_size) { |
419 case TX_32X32: | 430 case TX_32X32: |
420 fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride); | 431 fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride); |
(...skipping 30 matching lines...) Expand all Loading... |
451 } | 462 } |
452 | 463 |
453 static void encode_block(int plane, int block, BLOCK_SIZE plane_bsize, | 464 static void encode_block(int plane, int block, BLOCK_SIZE plane_bsize, |
454 TX_SIZE tx_size, void *arg) { | 465 TX_SIZE tx_size, void *arg) { |
455 struct encode_b_args *const args = arg; | 466 struct encode_b_args *const args = arg; |
456 MACROBLOCK *const x = args->x; | 467 MACROBLOCK *const x = args->x; |
457 MACROBLOCKD *const xd = &x->e_mbd; | 468 MACROBLOCKD *const xd = &x->e_mbd; |
458 struct optimize_ctx *const ctx = args->ctx; | 469 struct optimize_ctx *const ctx = args->ctx; |
459 struct macroblock_plane *const p = &x->plane[plane]; | 470 struct macroblock_plane *const p = &x->plane[plane]; |
460 struct macroblockd_plane *const pd = &xd->plane[plane]; | 471 struct macroblockd_plane *const pd = &xd->plane[plane]; |
461 int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); | 472 tran_low_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); |
462 int i, j; | 473 int i, j; |
463 uint8_t *dst; | 474 uint8_t *dst; |
464 ENTROPY_CONTEXT *a, *l; | 475 ENTROPY_CONTEXT *a, *l; |
465 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); | 476 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); |
466 dst = &pd->dst.buf[4 * j * pd->dst.stride + 4 * i]; | 477 dst = &pd->dst.buf[4 * j * pd->dst.stride + 4 * i]; |
467 a = &ctx->ta[plane][i]; | 478 a = &ctx->ta[plane][i]; |
468 l = &ctx->tl[plane][j]; | 479 l = &ctx->tl[plane][j]; |
469 | 480 |
470 // TODO(jingning): per transformed block zero forcing only enabled for | 481 // TODO(jingning): per transformed block zero forcing only enabled for |
471 // luma component. will integrate chroma components as well. | 482 // luma component. will integrate chroma components as well. |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
531 break; | 542 break; |
532 } | 543 } |
533 } | 544 } |
534 | 545 |
535 static void encode_block_pass1(int plane, int block, BLOCK_SIZE plane_bsize, | 546 static void encode_block_pass1(int plane, int block, BLOCK_SIZE plane_bsize, |
536 TX_SIZE tx_size, void *arg) { | 547 TX_SIZE tx_size, void *arg) { |
537 MACROBLOCK *const x = (MACROBLOCK *)arg; | 548 MACROBLOCK *const x = (MACROBLOCK *)arg; |
538 MACROBLOCKD *const xd = &x->e_mbd; | 549 MACROBLOCKD *const xd = &x->e_mbd; |
539 struct macroblock_plane *const p = &x->plane[plane]; | 550 struct macroblock_plane *const p = &x->plane[plane]; |
540 struct macroblockd_plane *const pd = &xd->plane[plane]; | 551 struct macroblockd_plane *const pd = &xd->plane[plane]; |
541 int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); | 552 tran_low_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); |
542 int i, j; | 553 int i, j; |
543 uint8_t *dst; | 554 uint8_t *dst; |
544 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); | 555 txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &i, &j); |
545 dst = &pd->dst.buf[4 * j * pd->dst.stride + 4 * i]; | 556 dst = &pd->dst.buf[4 * j * pd->dst.stride + 4 * i]; |
546 | 557 |
547 vp9_xform_quant(x, plane, block, plane_bsize, tx_size); | 558 vp9_xform_quant(x, plane, block, plane_bsize, tx_size); |
548 | 559 |
549 if (p->eobs[block] > 0) | 560 if (p->eobs[block] > 0) |
550 x->itxm_add(dqcoeff, dst, pd->dst.stride, p->eobs[block]); | 561 x->itxm_add(dqcoeff, dst, pd->dst.stride, p->eobs[block]); |
551 } | 562 } |
552 | 563 |
553 void vp9_encode_sby_pass1(MACROBLOCK *x, BLOCK_SIZE bsize) { | 564 void vp9_encode_sby_pass1(MACROBLOCK *x, BLOCK_SIZE bsize) { |
554 vp9_subtract_plane(x, bsize, 0); | 565 vp9_subtract_plane(x, bsize, 0); |
555 vp9_foreach_transformed_block_in_plane(&x->e_mbd, bsize, 0, | 566 vp9_foreach_transformed_block_in_plane(&x->e_mbd, bsize, 0, |
556 encode_block_pass1, x); | 567 encode_block_pass1, x); |
557 } | 568 } |
558 | 569 |
559 void vp9_encode_sb(MACROBLOCK *x, BLOCK_SIZE bsize) { | 570 void vp9_encode_sb(MACROBLOCK *x, BLOCK_SIZE bsize) { |
560 MACROBLOCKD *const xd = &x->e_mbd; | 571 MACROBLOCKD *const xd = &x->e_mbd; |
561 struct optimize_ctx ctx; | 572 struct optimize_ctx ctx; |
562 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; | 573 MB_MODE_INFO *mbmi = &xd->mi[0].src_mi->mbmi; |
563 struct encode_b_args arg = {x, &ctx, &mbmi->skip}; | 574 struct encode_b_args arg = {x, &ctx, &mbmi->skip}; |
564 int plane; | 575 int plane; |
565 | 576 |
| 577 mbmi->skip = 1; |
| 578 |
| 579 if (x->skip) |
| 580 return; |
| 581 |
566 for (plane = 0; plane < MAX_MB_PLANE; ++plane) { | 582 for (plane = 0; plane < MAX_MB_PLANE; ++plane) { |
567 if (!x->skip_recode) | 583 if (!x->skip_recode) |
568 vp9_subtract_plane(x, bsize, plane); | 584 vp9_subtract_plane(x, bsize, plane); |
569 | 585 |
570 if (x->optimize && (!x->skip_recode || !x->skip_optimize)) { | 586 if (x->optimize && (!x->skip_recode || !x->skip_optimize)) { |
571 const struct macroblockd_plane* const pd = &xd->plane[plane]; | 587 const struct macroblockd_plane* const pd = &xd->plane[plane]; |
572 const TX_SIZE tx_size = plane ? get_uv_tx_size(mbmi, pd) : mbmi->tx_size; | 588 const TX_SIZE tx_size = plane ? get_uv_tx_size(mbmi, pd) : mbmi->tx_size; |
573 vp9_get_entropy_contexts(bsize, tx_size, pd, | 589 vp9_get_entropy_contexts(bsize, tx_size, pd, |
574 ctx.ta[plane], ctx.tl[plane]); | 590 ctx.ta[plane], ctx.tl[plane]); |
575 } | 591 } |
576 | 592 |
577 vp9_foreach_transformed_block_in_plane(xd, bsize, plane, encode_block, | 593 vp9_foreach_transformed_block_in_plane(xd, bsize, plane, encode_block, |
578 &arg); | 594 &arg); |
579 } | 595 } |
580 } | 596 } |
581 | 597 |
582 static void encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize, | 598 static void encode_block_intra(int plane, int block, BLOCK_SIZE plane_bsize, |
583 TX_SIZE tx_size, void *arg) { | 599 TX_SIZE tx_size, void *arg) { |
584 struct encode_b_args* const args = arg; | 600 struct encode_b_args* const args = arg; |
585 MACROBLOCK *const x = args->x; | 601 MACROBLOCK *const x = args->x; |
586 MACROBLOCKD *const xd = &x->e_mbd; | 602 MACROBLOCKD *const xd = &x->e_mbd; |
587 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; | 603 MB_MODE_INFO *mbmi = &xd->mi[0].src_mi->mbmi; |
588 struct macroblock_plane *const p = &x->plane[plane]; | 604 struct macroblock_plane *const p = &x->plane[plane]; |
589 struct macroblockd_plane *const pd = &xd->plane[plane]; | 605 struct macroblockd_plane *const pd = &xd->plane[plane]; |
590 int16_t *coeff = BLOCK_OFFSET(p->coeff, block); | 606 tran_low_t *coeff = BLOCK_OFFSET(p->coeff, block); |
591 int16_t *qcoeff = BLOCK_OFFSET(p->qcoeff, block); | 607 tran_low_t *qcoeff = BLOCK_OFFSET(p->qcoeff, block); |
592 int16_t *dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); | 608 tran_low_t *dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block); |
593 const scan_order *scan_order; | 609 const scan_order *scan_order; |
594 TX_TYPE tx_type; | 610 TX_TYPE tx_type; |
595 PREDICTION_MODE mode; | 611 PREDICTION_MODE mode; |
596 const int bwl = b_width_log2(plane_bsize); | 612 const int bwl = b_width_log2(plane_bsize); |
597 const int diff_stride = 4 * (1 << bwl); | 613 const int diff_stride = 4 * (1 << bwl); |
598 uint8_t *src, *dst; | 614 uint8_t *src, *dst; |
599 int16_t *src_diff; | 615 int16_t *src_diff; |
600 uint16_t *eob = &p->eobs[block]; | 616 uint16_t *eob = &p->eobs[block]; |
601 const int src_stride = p->src.stride; | 617 const int src_stride = p->src.stride; |
602 const int dst_stride = pd->dst.stride; | 618 const int dst_stride = pd->dst.stride; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 p->quant_shift, qcoeff, dqcoeff, | 678 p->quant_shift, qcoeff, dqcoeff, |
663 pd->dequant, p->zbin_extra, eob, scan_order->scan, | 679 pd->dequant, p->zbin_extra, eob, scan_order->scan, |
664 scan_order->iscan); | 680 scan_order->iscan); |
665 } | 681 } |
666 if (!x->skip_encode && *eob) | 682 if (!x->skip_encode && *eob) |
667 vp9_iht8x8_add(tx_type, dqcoeff, dst, dst_stride, *eob); | 683 vp9_iht8x8_add(tx_type, dqcoeff, dst, dst_stride, *eob); |
668 break; | 684 break; |
669 case TX_4X4: | 685 case TX_4X4: |
670 tx_type = get_tx_type_4x4(pd->plane_type, xd, block); | 686 tx_type = get_tx_type_4x4(pd->plane_type, xd, block); |
671 scan_order = &vp9_scan_orders[TX_4X4][tx_type]; | 687 scan_order = &vp9_scan_orders[TX_4X4][tx_type]; |
672 mode = plane == 0 ? get_y_mode(xd->mi[0], block) : mbmi->uv_mode; | 688 mode = plane == 0 ? get_y_mode(xd->mi[0].src_mi, block) : mbmi->uv_mode; |
673 vp9_predict_intra_block(xd, block, bwl, TX_4X4, mode, | 689 vp9_predict_intra_block(xd, block, bwl, TX_4X4, mode, |
674 x->skip_encode ? src : dst, | 690 x->skip_encode ? src : dst, |
675 x->skip_encode ? src_stride : dst_stride, | 691 x->skip_encode ? src_stride : dst_stride, |
676 dst, dst_stride, i, j, plane); | 692 dst, dst_stride, i, j, plane); |
677 | 693 |
678 if (!x->skip_recode) { | 694 if (!x->skip_recode) { |
679 vp9_subtract_block(4, 4, src_diff, diff_stride, | 695 vp9_subtract_block(4, 4, src_diff, diff_stride, |
680 src, src_stride, dst, dst_stride); | 696 src, src_stride, dst, dst_stride); |
681 if (tx_type != DCT_DCT) | 697 if (tx_type != DCT_DCT) |
682 vp9_fht4x4(src_diff, coeff, diff_stride, tx_type); | 698 vp9_fht4x4(src_diff, coeff, diff_stride, tx_type); |
(...skipping 26 matching lines...) Expand all Loading... |
709 void vp9_encode_block_intra(MACROBLOCK *x, int plane, int block, | 725 void vp9_encode_block_intra(MACROBLOCK *x, int plane, int block, |
710 BLOCK_SIZE plane_bsize, TX_SIZE tx_size, | 726 BLOCK_SIZE plane_bsize, TX_SIZE tx_size, |
711 int8_t *skip) { | 727 int8_t *skip) { |
712 struct encode_b_args arg = {x, NULL, skip}; | 728 struct encode_b_args arg = {x, NULL, skip}; |
713 encode_block_intra(plane, block, plane_bsize, tx_size, &arg); | 729 encode_block_intra(plane, block, plane_bsize, tx_size, &arg); |
714 } | 730 } |
715 | 731 |
716 | 732 |
717 void vp9_encode_intra_block_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) { | 733 void vp9_encode_intra_block_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane) { |
718 const MACROBLOCKD *const xd = &x->e_mbd; | 734 const MACROBLOCKD *const xd = &x->e_mbd; |
719 struct encode_b_args arg = {x, NULL, &xd->mi[0]->mbmi.skip}; | 735 struct encode_b_args arg = {x, NULL, &xd->mi[0].src_mi->mbmi.skip}; |
720 | 736 |
721 vp9_foreach_transformed_block_in_plane(xd, bsize, plane, encode_block_intra, | 737 vp9_foreach_transformed_block_in_plane(xd, bsize, plane, encode_block_intra, |
722 &arg); | 738 &arg); |
723 } | 739 } |
OLD | NEW |