comparison vp8.c @ 12288:6bdbab1d9ed4 libavcodec

save some copies by moving some fields out of proba[2]
author skal
date Tue, 27 Jul 2010 22:21:49 +0000
parents b805a2660a00
children bc679bd1c66d
comparison
equal deleted inserted replaced
12287:67cb57c918b6 12288:6bdbab1d9ed4
121 121
122 int chroma_pred_mode; ///< 8x8c pred mode of the current macroblock 122 int chroma_pred_mode; ///< 8x8c pred mode of the current macroblock
123 int segment; ///< segment of the current macroblock 123 int segment; ///< segment of the current macroblock
124 124
125 int mbskip_enabled; 125 int mbskip_enabled;
126 uint8_t mbskip_proba;
127 uint8_t intra_proba;
128 uint8_t last_proba;
129 uint8_t golden_proba;
126 int sign_bias[4]; ///< one state [0, 1] per ref frame type 130 int sign_bias[4]; ///< one state [0, 1] per ref frame type
127 int ref_count[3]; 131 int ref_count[3];
128 132
129 /** 133 /**
130 * Base parameters for segmentation, i.e. per-macroblock parameters. 134 * Base parameters for segmentation, i.e. per-macroblock parameters.
186 * for an interframe to desync if a prior frame's header was corrupt 190 * for an interframe to desync if a prior frame's header was corrupt
187 * or missing outright! 191 * or missing outright!
188 */ 192 */
189 struct { 193 struct {
190 uint8_t segmentid[3]; 194 uint8_t segmentid[3];
191 uint8_t mbskip;
192 uint8_t intra;
193 uint8_t last;
194 uint8_t golden;
195 uint8_t pred16x16[4]; 195 uint8_t pred16x16[4];
196 uint8_t pred8x8c[3]; 196 uint8_t pred8x8c[3];
197 uint8_t token[4][8][3][NUM_DCT_TOKENS-1]; 197 uint8_t token[4][8][3][NUM_DCT_TOKENS-1];
198 uint8_t mvc[2][19]; 198 uint8_t mvc[2][19];
199 } prob[2]; 199 } prob[2];
497 for (l = 0; l < NUM_DCT_TOKENS-1; l++) 497 for (l = 0; l < NUM_DCT_TOKENS-1; l++)
498 if (vp56_rac_get_prob_branchy(c, vp8_token_update_probs[i][j][k][l])) 498 if (vp56_rac_get_prob_branchy(c, vp8_token_update_probs[i][j][k][l]))
499 s->prob->token[i][j][k][l] = vp8_rac_get_uint(c, 8); 499 s->prob->token[i][j][k][l] = vp8_rac_get_uint(c, 8);
500 500
501 if ((s->mbskip_enabled = vp8_rac_get(c))) 501 if ((s->mbskip_enabled = vp8_rac_get(c)))
502 s->prob->mbskip = vp8_rac_get_uint(c, 8); 502 s->mbskip_proba = vp8_rac_get_uint(c, 8);
503 503
504 if (!s->keyframe) { 504 if (!s->keyframe) {
505 s->prob->intra = vp8_rac_get_uint(c, 8); 505 s->intra_proba = vp8_rac_get_uint(c, 8);
506 s->prob->last = vp8_rac_get_uint(c, 8); 506 s->last_proba = vp8_rac_get_uint(c, 8);
507 s->prob->golden = vp8_rac_get_uint(c, 8); 507 s->golden_proba = vp8_rac_get_uint(c, 8);
508 508
509 if (vp8_rac_get(c)) 509 if (vp8_rac_get(c))
510 for (i = 0; i < 4; i++) 510 for (i = 0; i < 4; i++)
511 s->prob->pred16x16[i] = vp8_rac_get_uint(c, 8); 511 s->prob->pred16x16[i] = vp8_rac_get_uint(c, 8);
512 if (vp8_rac_get(c)) 512 if (vp8_rac_get(c))
723 723
724 if (s->segmentation.update_map) 724 if (s->segmentation.update_map)
725 *segment = vp8_rac_get_tree(c, vp8_segmentid_tree, s->prob->segmentid); 725 *segment = vp8_rac_get_tree(c, vp8_segmentid_tree, s->prob->segmentid);
726 s->segment = *segment; 726 s->segment = *segment;
727 727
728 mb->skip = s->mbskip_enabled ? vp56_rac_get_prob(c, s->prob->mbskip) : 0; 728 mb->skip = s->mbskip_enabled ? vp56_rac_get_prob(c, s->mbskip_proba) : 0;
729 729
730 if (s->keyframe) { 730 if (s->keyframe) {
731 mb->mode = vp8_rac_get_tree(c, vp8_pred16x16_tree_intra, vp8_pred16x16_prob_intra); 731 mb->mode = vp8_rac_get_tree(c, vp8_pred16x16_tree_intra, vp8_pred16x16_prob_intra);
732 732
733 if (mb->mode == MODE_I4x4) { 733 if (mb->mode == MODE_I4x4) {
735 } else 735 } else
736 fill_rectangle(intra4x4, 4, 4, s->b4_stride, vp8_pred4x4_mode[mb->mode], 1); 736 fill_rectangle(intra4x4, 4, 4, s->b4_stride, vp8_pred4x4_mode[mb->mode], 1);
737 737
738 s->chroma_pred_mode = vp8_rac_get_tree(c, vp8_pred8x8c_tree, vp8_pred8x8c_prob_intra); 738 s->chroma_pred_mode = vp8_rac_get_tree(c, vp8_pred8x8c_tree, vp8_pred8x8c_prob_intra);
739 mb->ref_frame = VP56_FRAME_CURRENT; 739 mb->ref_frame = VP56_FRAME_CURRENT;
740 } else if (vp56_rac_get_prob_branchy(c, s->prob->intra)) { 740 } else if (vp56_rac_get_prob_branchy(c, s->intra_proba)) {
741 VP56mv near[2], best; 741 VP56mv near[2], best;
742 uint8_t cnt[4] = { 0 }; 742 uint8_t cnt[4] = { 0 };
743 uint8_t p[4]; 743 uint8_t p[4];
744 744
745 // inter MB, 16.2 745 // inter MB, 16.2
746 if (vp56_rac_get_prob_branchy(c, s->prob->last)) 746 if (vp56_rac_get_prob_branchy(c, s->last_proba))
747 mb->ref_frame = vp56_rac_get_prob(c, s->prob->golden) ? 747 mb->ref_frame = vp56_rac_get_prob(c, s->golden_proba) ?
748 VP56_FRAME_GOLDEN2 /* altref */ : VP56_FRAME_GOLDEN; 748 VP56_FRAME_GOLDEN2 /* altref */ : VP56_FRAME_GOLDEN;
749 else 749 else
750 mb->ref_frame = VP56_FRAME_PREVIOUS; 750 mb->ref_frame = VP56_FRAME_PREVIOUS;
751 s->ref_count[mb->ref_frame-1]++; 751 s->ref_count[mb->ref_frame-1]++;
752 752