| 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 15 matching lines...) Expand all Loading... |
| 26 #include "vp8/common/findnearmv.h" | 26 #include "vp8/common/findnearmv.h" |
| 27 #include <stdio.h> | 27 #include <stdio.h> |
| 28 #include <limits.h> | 28 #include <limits.h> |
| 29 #include "vp8/common/invtrans.h" | 29 #include "vp8/common/invtrans.h" |
| 30 #include "vpx_ports/vpx_timer.h" | 30 #include "vpx_ports/vpx_timer.h" |
| 31 #if CONFIG_REALTIME_ONLY & CONFIG_ONTHEFLY_BITPACKING | 31 #if CONFIG_REALTIME_ONLY & CONFIG_ONTHEFLY_BITPACKING |
| 32 #include "bitstream.h" | 32 #include "bitstream.h" |
| 33 #endif | 33 #endif |
| 34 #include "encodeframe.h" | 34 #include "encodeframe.h" |
| 35 | 35 |
| 36 extern void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t) ; | 36 extern void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCKD *x, TOKENEXTRA **t) ; |
| 37 extern void vp8_calc_ref_frame_costs(int *ref_frame_cost, | 37 extern void vp8_calc_ref_frame_costs(int *ref_frame_cost, |
| 38 int prob_intra, | 38 int prob_intra, |
| 39 int prob_last, | 39 int prob_last, |
| 40 int prob_garf | 40 int prob_garf |
| 41 ); | 41 ); |
| 42 extern void vp8_convert_rfct_to_prob(VP8_COMP *const cpi); | 42 extern void vp8_convert_rfct_to_prob(VP8_COMP *const cpi); |
| 43 extern void vp8cx_initialize_me_consts(VP8_COMP *cpi, int QIndex); | 43 extern void vp8cx_initialize_me_consts(VP8_COMP *cpi, int QIndex); |
| 44 extern void vp8_auto_select_speed(VP8_COMP *cpi); | 44 extern void vp8_auto_select_speed(VP8_COMP *cpi); |
| 45 extern void vp8cx_init_mbrthread_data(VP8_COMP *cpi, | 45 extern void vp8cx_init_mbrthread_data(VP8_COMP *cpi, |
| 46 MACROBLOCK *x, | 46 MACROBLOCK *x, |
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 636 vp8_setup_intra_recon(&cm->yv12_fb[cm->new_fb_idx]); | 636 vp8_setup_intra_recon(&cm->yv12_fb[cm->new_fb_idx]); |
| 637 | 637 |
| 638 vp8_build_block_offsets(x); | 638 vp8_build_block_offsets(x); |
| 639 | 639 |
| 640 xd->mode_info_context->mbmi.mode = DC_PRED; | 640 xd->mode_info_context->mbmi.mode = DC_PRED; |
| 641 xd->mode_info_context->mbmi.uv_mode = DC_PRED; | 641 xd->mode_info_context->mbmi.uv_mode = DC_PRED; |
| 642 | 642 |
| 643 xd->left_context = &cm->left_context; | 643 xd->left_context = &cm->left_context; |
| 644 | 644 |
| 645 vp8_zero(cpi->count_mb_ref_frame_usage) | 645 vp8_zero(cpi->count_mb_ref_frame_usage) |
| 646 vp8_zero(cpi->ymode_count) |
| 647 vp8_zero(cpi->uv_mode_count) |
| 646 | 648 |
| 647 x->mvc = cm->fc.mvc; | 649 x->mvc = cm->fc.mvc; |
| 648 | 650 |
| 649 vpx_memset(cm->above_context, 0, | 651 vpx_memset(cm->above_context, 0, |
| 650 sizeof(ENTROPY_CONTEXT_PLANES) * cm->mb_cols); | 652 sizeof(ENTROPY_CONTEXT_PLANES) * cm->mb_cols); |
| 651 | 653 |
| 652 /* Special case treatment when GF and ARF are not sensible options | 654 /* Special case treatment when GF and ARF are not sensible options |
| 653 * for reference | 655 * for reference |
| 654 */ | 656 */ |
| 655 if (cpi->ref_frame_flags == VP8_LAST_FRAME) | 657 if (cpi->ref_frame_flags == VP8_LAST_FRAME) |
| 656 vp8_calc_ref_frame_costs(x->ref_frame_cost, | 658 vp8_calc_ref_frame_costs(x->ref_frame_cost, |
| 657 cpi->prob_intra_coded,255,128); | 659 cpi->prob_intra_coded,255,128); |
| 658 else if ((cpi->oxcf.number_of_layers > 1) && | 660 else if ((cpi->oxcf.number_of_layers > 1) && |
| 659 (cpi->ref_frame_flags == VP8_GOLD_FRAME)) | 661 (cpi->ref_frame_flags == VP8_GOLD_FRAME)) |
| 660 vp8_calc_ref_frame_costs(x->ref_frame_cost, | 662 vp8_calc_ref_frame_costs(x->ref_frame_cost, |
| 661 cpi->prob_intra_coded,1,255); | 663 cpi->prob_intra_coded,1,255); |
| 662 else if ((cpi->oxcf.number_of_layers > 1) && | 664 else if ((cpi->oxcf.number_of_layers > 1) && |
| 663 (cpi->ref_frame_flags == VP8_ALTR_FRAME)) | 665 (cpi->ref_frame_flags == VP8_ALTR_FRAME)) |
| 664 vp8_calc_ref_frame_costs(x->ref_frame_cost, | 666 vp8_calc_ref_frame_costs(x->ref_frame_cost, |
| 665 cpi->prob_intra_coded,1,1); | 667 cpi->prob_intra_coded,1,1); |
| 666 else | 668 else |
| 667 vp8_calc_ref_frame_costs(x->ref_frame_cost, | 669 vp8_calc_ref_frame_costs(x->ref_frame_cost, |
| 668 cpi->prob_intra_coded, | 670 cpi->prob_intra_coded, |
| 669 cpi->prob_last_coded, | 671 cpi->prob_last_coded, |
| 670 cpi->prob_gf_coded); | 672 cpi->prob_gf_coded); |
| 671 | 673 |
| 672 xd->fullpixel_mask = 0xffffffff; | 674 xd->fullpixel_mask = 0xffffffff; |
| 673 if(cm->full_pixel) | 675 if(cm->full_pixel) |
| 674 xd->fullpixel_mask = 0xfffffff8; | 676 xd->fullpixel_mask = 0xfffffff8; |
| 675 | |
| 676 vp8_zero(x->coef_counts); | |
| 677 vp8_zero(x->ymode_count); | |
| 678 vp8_zero(x->uv_mode_count) | |
| 679 x->prediction_error = 0; | |
| 680 x->intra_error = 0; | |
| 681 } | |
| 682 | |
| 683 static void sum_coef_counts(MACROBLOCK *x, MACROBLOCK *x_thread) | |
| 684 { | |
| 685 int i = 0; | |
| 686 do | |
| 687 { | |
| 688 int j = 0; | |
| 689 do | |
| 690 { | |
| 691 int k = 0; | |
| 692 do | |
| 693 { | |
| 694 /* at every context */ | |
| 695 | |
| 696 /* calc probs and branch cts for this frame only */ | |
| 697 int t = 0; /* token/prob index */ | |
| 698 | |
| 699 do | |
| 700 { | |
| 701 x->coef_counts [i][j][k][t] += | |
| 702 x_thread->coef_counts [i][j][k][t]; | |
| 703 } | |
| 704 while (++t < ENTROPY_NODES); | |
| 705 } | |
| 706 while (++k < PREV_COEF_CONTEXTS); | |
| 707 } | |
| 708 while (++j < COEF_BANDS); | |
| 709 } | |
| 710 while (++i < BLOCK_TYPES); | |
| 711 } | 677 } |
| 712 | 678 |
| 713 void vp8_encode_frame(VP8_COMP *cpi) | 679 void vp8_encode_frame(VP8_COMP *cpi) |
| 714 { | 680 { |
| 715 int mb_row; | 681 int mb_row; |
| 716 MACROBLOCK *const x = & cpi->mb; | 682 MACROBLOCK *const x = & cpi->mb; |
| 717 VP8_COMMON *const cm = & cpi->common; | 683 VP8_COMMON *const cm = & cpi->common; |
| 718 MACROBLOCKD *const xd = & x->e_mbd; | 684 MACROBLOCKD *const xd = & x->e_mbd; |
| 719 TOKENEXTRA *tp = cpi->tok; | 685 TOKENEXTRA *tp = cpi->tok; |
| 720 int segment_counts[MAX_MB_SEGMENTS]; | 686 int segment_counts[MAX_MB_SEGMENTS]; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 744 xd->subpixel_predict16x16 = vp8_sixtap_predict16x16; | 710 xd->subpixel_predict16x16 = vp8_sixtap_predict16x16; |
| 745 } | 711 } |
| 746 else | 712 else |
| 747 { | 713 { |
| 748 xd->subpixel_predict = vp8_bilinear_predict4x4; | 714 xd->subpixel_predict = vp8_bilinear_predict4x4; |
| 749 xd->subpixel_predict8x4 = vp8_bilinear_predict8x4; | 715 xd->subpixel_predict8x4 = vp8_bilinear_predict8x4; |
| 750 xd->subpixel_predict8x8 = vp8_bilinear_predict8x8; | 716 xd->subpixel_predict8x8 = vp8_bilinear_predict8x8; |
| 751 xd->subpixel_predict16x16 = vp8_bilinear_predict16x16; | 717 xd->subpixel_predict16x16 = vp8_bilinear_predict16x16; |
| 752 } | 718 } |
| 753 | 719 |
| 754 cpi->mb.skip_true_count = 0; | 720 cpi->prediction_error = 0; |
| 721 cpi->intra_error = 0; |
| 722 cpi->skip_true_count = 0; |
| 755 cpi->tok_count = 0; | 723 cpi->tok_count = 0; |
| 756 | 724 |
| 757 #if 0 | 725 #if 0 |
| 758 /* Experimental code */ | 726 /* Experimental code */ |
| 759 cpi->frame_distortion = 0; | 727 cpi->frame_distortion = 0; |
| 760 cpi->last_mb_distortion = 0; | 728 cpi->last_mb_distortion = 0; |
| 761 #endif | 729 #endif |
| 762 | 730 |
| 763 xd->mode_info_context = cm->mi; | 731 xd->mode_info_context = cm->mi; |
| 764 | 732 |
| 765 vp8_zero(cpi->mb.MVcount); | 733 vp8_zero(cpi->MVcount); |
| 734 |
| 735 vp8_zero(cpi->coef_counts); |
| 766 | 736 |
| 767 vp8cx_frame_init_quantizer(cpi); | 737 vp8cx_frame_init_quantizer(cpi); |
| 768 | 738 |
| 769 vp8_initialize_rd_consts(cpi, | 739 vp8_initialize_rd_consts(cpi, |
| 770 vp8_dc_quant(cm->base_qindex, cm->y1dc_delta_q)); | 740 vp8_dc_quant(cm->base_qindex, cm->y1dc_delta_q)); |
| 771 | 741 |
| 772 vp8cx_initialize_me_consts(cpi, cm->base_qindex); | 742 vp8cx_initialize_me_consts(cpi, cm->base_qindex); |
| 773 | 743 |
| 774 if(cpi->oxcf.tuning == VP8_TUNE_SSIM) | 744 if(cpi->oxcf.tuning == VP8_TUNE_SSIM) |
| 775 { | 745 { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 860 for (i = 0; i < cpi->encoding_thread_count; i++) | 830 for (i = 0; i < cpi->encoding_thread_count; i++) |
| 861 { | 831 { |
| 862 for (j = 0; j < 4; j++) | 832 for (j = 0; j < 4; j++) |
| 863 segment_counts[j] += cpi->mb_row_ei[i].segment_count
s[j]; | 833 segment_counts[j] += cpi->mb_row_ei[i].segment_count
s[j]; |
| 864 } | 834 } |
| 865 } | 835 } |
| 866 } | 836 } |
| 867 | 837 |
| 868 for (i = 0; i < cpi->encoding_thread_count; i++) | 838 for (i = 0; i < cpi->encoding_thread_count; i++) |
| 869 { | 839 { |
| 870 int mode_count; | |
| 871 int mv_vals; | |
| 872 totalrate += cpi->mb_row_ei[i].totalrate; | 840 totalrate += cpi->mb_row_ei[i].totalrate; |
| 873 | |
| 874 cpi->mb.skip_true_count += cpi->mb_row_ei[i].mb.skip_true_count; | |
| 875 | |
| 876 for(mode_count = 0; mode_count < VP8_YMODES; mode_count++) | |
| 877 cpi->mb.ymode_count[mode_count] += | |
| 878 cpi->mb_row_ei[i].mb.ymode_count[mode_count]; | |
| 879 | |
| 880 for(mode_count = 0; mode_count < VP8_UV_MODES; mode_count++) | |
| 881 cpi->mb.uv_mode_count[mode_count] += | |
| 882 cpi->mb_row_ei[i].mb.uv_mode_count[mode_count]; | |
| 883 | |
| 884 for(mv_vals = 0; mv_vals < MVvals; mv_vals++) | |
| 885 { | |
| 886 cpi->mb.MVcount[0][mv_vals] += | |
| 887 cpi->mb_row_ei[i].mb.MVcount[0][mv_vals]; | |
| 888 cpi->mb.MVcount[1][mv_vals] += | |
| 889 cpi->mb_row_ei[i].mb.MVcount[1][mv_vals]; | |
| 890 } | |
| 891 | |
| 892 cpi->mb.prediction_error += | |
| 893 cpi->mb_row_ei[i].mb.prediction_error; | |
| 894 cpi->mb.intra_error += cpi->mb_row_ei[i].mb.intra_error; | |
| 895 | |
| 896 /* add up counts for each thread */ | |
| 897 sum_coef_counts(x, &cpi->mb_row_ei[i].mb); | |
| 898 } | 841 } |
| 899 | 842 |
| 900 } | 843 } |
| 901 else | 844 else |
| 902 #endif | 845 #endif |
| 903 { | 846 { |
| 904 | |
| 905 /* for each macroblock row in image */ | 847 /* for each macroblock row in image */ |
| 906 for (mb_row = 0; mb_row < cm->mb_rows; mb_row++) | 848 for (mb_row = 0; mb_row < cm->mb_rows; mb_row++) |
| 907 { | 849 { |
| 908 vp8_zero(cm->left_context) | 850 vp8_zero(cm->left_context) |
| 909 | 851 |
| 910 #if CONFIG_REALTIME_ONLY & CONFIG_ONTHEFLY_BITPACKING | 852 #if CONFIG_REALTIME_ONLY & CONFIG_ONTHEFLY_BITPACKING |
| 911 tp = cpi->tok; | 853 tp = cpi->tok; |
| 912 #endif | 854 #endif |
| 913 | 855 |
| 914 encode_mb_row(cpi, cm, mb_row, x, xd, &tp, segment_counts, &tota
lrate); | 856 encode_mb_row(cpi, cm, mb_row, x, xd, &tp, segment_counts, &tota
lrate); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1116 | 1058 |
| 1117 do | 1059 do |
| 1118 { | 1060 { |
| 1119 ++ bct[xd->block[b].bmi.mode]; | 1061 ++ bct[xd->block[b].bmi.mode]; |
| 1120 } | 1062 } |
| 1121 while (++b < 16); | 1063 while (++b < 16); |
| 1122 } | 1064 } |
| 1123 | 1065 |
| 1124 #endif | 1066 #endif |
| 1125 | 1067 |
| 1126 ++x->ymode_count[m]; | 1068 ++cpi->ymode_count[m]; |
| 1127 ++x->uv_mode_count[uvm]; | 1069 ++cpi->uv_mode_count[uvm]; |
| 1128 | 1070 |
| 1129 } | 1071 } |
| 1130 | 1072 |
| 1131 /* Experimental stub function to create a per MB zbin adjustment based on | 1073 /* Experimental stub function to create a per MB zbin adjustment based on |
| 1132 * some previously calculated measure of MB activity. | 1074 * some previously calculated measure of MB activity. |
| 1133 */ | 1075 */ |
| 1134 static void adjust_act_zbin( VP8_COMP *cpi, MACROBLOCK *x ) | 1076 static void adjust_act_zbin( VP8_COMP *cpi, MACROBLOCK *x ) |
| 1135 { | 1077 { |
| 1136 #if USE_ACT_INDEX | 1078 #if USE_ACT_INDEX |
| 1137 x->act_zbin_adj = *(x->mb_activity_ptr); | 1079 x->act_zbin_adj = *(x->mb_activity_ptr); |
| 1138 #else | 1080 #else |
| 1139 int64_t a; | 1081 int64_t a; |
| 1140 int64_t b; | 1082 int64_t b; |
| 1141 int64_t act = *(x->mb_activity_ptr); | 1083 int64_t act = *(x->mb_activity_ptr); |
| 1142 | 1084 |
| 1143 /* Apply the masking to the RD multiplier. */ | 1085 /* Apply the masking to the RD multiplier. */ |
| 1144 a = act + 4*cpi->activity_avg; | 1086 a = act + 4*cpi->activity_avg; |
| 1145 b = 4*act + cpi->activity_avg; | 1087 b = 4*act + cpi->activity_avg; |
| 1146 | 1088 |
| 1147 if ( act > cpi->activity_avg ) | 1089 if ( act > cpi->activity_avg ) |
| 1148 x->act_zbin_adj = (int)(((int64_t)b + (a>>1))/a) - 1; | 1090 x->act_zbin_adj = (int)(((int64_t)b + (a>>1))/a) - 1; |
| 1149 else | 1091 else |
| 1150 x->act_zbin_adj = 1 - (int)(((int64_t)a + (b>>1))/b); | 1092 x->act_zbin_adj = 1 - (int)(((int64_t)a + (b>>1))/b); |
| 1151 #endif | 1093 #endif |
| 1152 } | 1094 } |
| 1153 | 1095 |
| 1154 int vp8cx_encode_intra_macroblock(VP8_COMP *cpi, MACROBLOCK *x, | 1096 int vp8cx_encode_intra_macroblock(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t) |
| 1155 TOKENEXTRA **t) | |
| 1156 { | 1097 { |
| 1157 MACROBLOCKD *xd = &x->e_mbd; | 1098 MACROBLOCKD *xd = &x->e_mbd; |
| 1158 int rate; | 1099 int rate; |
| 1159 | 1100 |
| 1160 if (cpi->sf.RD && cpi->compressor_speed != 2) | 1101 if (cpi->sf.RD && cpi->compressor_speed != 2) |
| 1161 vp8_rd_pick_intra_mode(x, &rate); | 1102 vp8_rd_pick_intra_mode(cpi, x, &rate); |
| 1162 else | 1103 else |
| 1163 vp8_pick_intra_mode(x, &rate); | 1104 vp8_pick_intra_mode(cpi, x, &rate); |
| 1164 | 1105 |
| 1165 if(cpi->oxcf.tuning == VP8_TUNE_SSIM) | 1106 if(cpi->oxcf.tuning == VP8_TUNE_SSIM) |
| 1166 { | 1107 { |
| 1167 adjust_act_zbin( cpi, x ); | 1108 adjust_act_zbin( cpi, x ); |
| 1168 vp8_update_zbin_extra(cpi, x); | 1109 vp8_update_zbin_extra(cpi, x); |
| 1169 } | 1110 } |
| 1170 | 1111 |
| 1171 if (x->e_mbd.mode_info_context->mbmi.mode == B_PRED) | 1112 if (x->e_mbd.mode_info_context->mbmi.mode == B_PRED) |
| 1172 vp8_encode_intra4x4mby(x); | 1113 vp8_encode_intra4x4mby(x); |
| 1173 else | 1114 else |
| 1174 vp8_encode_intra16x16mby(x); | 1115 vp8_encode_intra16x16mby(x); |
| 1175 | 1116 |
| 1176 vp8_encode_intra16x16mbuv(x); | 1117 vp8_encode_intra16x16mbuv(x); |
| 1177 | 1118 |
| 1178 sum_intra_stats(cpi, x); | 1119 sum_intra_stats(cpi, x); |
| 1179 | 1120 |
| 1180 vp8_tokenize_mb(cpi, x, t); | 1121 vp8_tokenize_mb(cpi, &x->e_mbd, t); |
| 1181 | 1122 |
| 1182 if (xd->mode_info_context->mbmi.mode != B_PRED) | 1123 if (xd->mode_info_context->mbmi.mode != B_PRED) |
| 1183 vp8_inverse_transform_mby(xd); | 1124 vp8_inverse_transform_mby(xd); |
| 1184 | 1125 |
| 1185 vp8_dequant_idct_add_uv_block | 1126 vp8_dequant_idct_add_uv_block |
| 1186 (xd->qcoeff+16*16, xd->dequant_uv, | 1127 (xd->qcoeff+16*16, xd->dequant_uv, |
| 1187 xd->dst.u_buffer, xd->dst.v_buffer, | 1128 xd->dst.u_buffer, xd->dst.v_buffer, |
| 1188 xd->dst.uv_stride, xd->eobs+16); | 1129 xd->dst.uv_stride, xd->eobs+16); |
| 1189 return rate; | 1130 return rate; |
| 1190 } | 1131 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1249 /* restore cpi->zbin_mode_boost_enabled */ | 1190 /* restore cpi->zbin_mode_boost_enabled */ |
| 1250 cpi->zbin_mode_boost_enabled = zbin_mode_boost_enabled; | 1191 cpi->zbin_mode_boost_enabled = zbin_mode_boost_enabled; |
| 1251 | 1192 |
| 1252 } | 1193 } |
| 1253 else | 1194 else |
| 1254 { | 1195 { |
| 1255 vp8_pick_inter_mode(cpi, x, recon_yoffset, recon_uvoffset, &rate, | 1196 vp8_pick_inter_mode(cpi, x, recon_yoffset, recon_uvoffset, &rate, |
| 1256 &distortion, &intra_error, mb_row, mb_col); | 1197 &distortion, &intra_error, mb_row, mb_col); |
| 1257 } | 1198 } |
| 1258 | 1199 |
| 1259 x->prediction_error += distortion; | 1200 cpi->prediction_error += distortion; |
| 1260 x->intra_error += intra_error; | 1201 cpi->intra_error += intra_error; |
| 1261 | 1202 |
| 1262 if(cpi->oxcf.tuning == VP8_TUNE_SSIM) | 1203 if(cpi->oxcf.tuning == VP8_TUNE_SSIM) |
| 1263 { | 1204 { |
| 1264 /* Adjust the zbin based on this MB rate. */ | 1205 /* Adjust the zbin based on this MB rate. */ |
| 1265 adjust_act_zbin( cpi, x ); | 1206 adjust_act_zbin( cpi, x ); |
| 1266 } | 1207 } |
| 1267 | 1208 |
| 1268 #if 0 | 1209 #if 0 |
| 1269 /* Experimental RD code */ | 1210 /* Experimental RD code */ |
| 1270 cpi->frame_distortion += distortion; | 1211 cpi->frame_distortion += distortion; |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1356 } | 1297 } |
| 1357 else | 1298 else |
| 1358 vp8_build_inter16x16_predictors_mb(xd, xd->dst.y_buffer, | 1299 vp8_build_inter16x16_predictors_mb(xd, xd->dst.y_buffer, |
| 1359 xd->dst.u_buffer, xd->dst.v_buffer, | 1300 xd->dst.u_buffer, xd->dst.v_buffer, |
| 1360 xd->dst.y_stride, xd->dst.uv_stride); | 1301 xd->dst.y_stride, xd->dst.uv_stride); |
| 1361 | 1302 |
| 1362 } | 1303 } |
| 1363 | 1304 |
| 1364 if (!x->skip) | 1305 if (!x->skip) |
| 1365 { | 1306 { |
| 1366 vp8_tokenize_mb(cpi, x, t); | 1307 vp8_tokenize_mb(cpi, xd, t); |
| 1367 | 1308 |
| 1368 if (xd->mode_info_context->mbmi.mode != B_PRED) | 1309 if (xd->mode_info_context->mbmi.mode != B_PRED) |
| 1369 vp8_inverse_transform_mby(xd); | 1310 vp8_inverse_transform_mby(xd); |
| 1370 | 1311 |
| 1371 vp8_dequant_idct_add_uv_block | 1312 vp8_dequant_idct_add_uv_block |
| 1372 (xd->qcoeff+16*16, xd->dequant_uv, | 1313 (xd->qcoeff+16*16, xd->dequant_uv, |
| 1373 xd->dst.u_buffer, xd->dst.v_buffer, | 1314 xd->dst.u_buffer, xd->dst.v_buffer, |
| 1374 xd->dst.uv_stride, xd->eobs+16); | 1315 xd->dst.uv_stride, xd->eobs+16); |
| 1375 } | 1316 } |
| 1376 else | 1317 else |
| 1377 { | 1318 { |
| 1378 /* always set mb_skip_coeff as it is needed by the loopfilter */ | 1319 /* always set mb_skip_coeff as it is needed by the loopfilter */ |
| 1379 xd->mode_info_context->mbmi.mb_skip_coeff = 1; | 1320 xd->mode_info_context->mbmi.mb_skip_coeff = 1; |
| 1380 | 1321 |
| 1381 if (cpi->common.mb_no_coeff_skip) | 1322 if (cpi->common.mb_no_coeff_skip) |
| 1382 { | 1323 { |
| 1383 x->skip_true_count ++; | 1324 cpi->skip_true_count ++; |
| 1384 vp8_fix_contexts(xd); | 1325 vp8_fix_contexts(xd); |
| 1385 } | 1326 } |
| 1386 else | 1327 else |
| 1387 { | 1328 { |
| 1388 vp8_stuff_mb(cpi, x, t); | 1329 vp8_stuff_mb(cpi, xd, t); |
| 1389 } | 1330 } |
| 1390 } | 1331 } |
| 1391 | 1332 |
| 1392 return rate; | 1333 return rate; |
| 1393 } | 1334 } |
| OLD | NEW |