Mercurial > libavcodec.hg
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 |