Mercurial > libavcodec.hg
comparison vp8.c @ 12290:2a09b276db12 libavcodec
b0rk3d FATE + black helicopters hissing -> rolling back to r24556 and sleeping
author | skal |
---|---|
date | Tue, 27 Jul 2010 23:09:13 +0000 |
parents | bc679bd1c66d |
children | 3ce688a83319 |
comparison
equal
deleted
inserted
replaced
12289:bc679bd1c66d | 12290:2a09b276db12 |
---|---|
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; | |
130 int sign_bias[4]; ///< one state [0, 1] per ref frame type | 126 int sign_bias[4]; ///< one state [0, 1] per ref frame type |
131 int ref_count[3]; | 127 int ref_count[3]; |
132 | 128 |
133 /** | 129 /** |
134 * Base parameters for segmentation, i.e. per-macroblock parameters. | 130 * Base parameters for segmentation, i.e. per-macroblock parameters. |
190 * for an interframe to desync if a prior frame's header was corrupt | 186 * for an interframe to desync if a prior frame's header was corrupt |
191 * or missing outright! | 187 * or missing outright! |
192 */ | 188 */ |
193 struct { | 189 struct { |
194 uint8_t segmentid[3]; | 190 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]; |
341 base_qi = yac_qi; | 341 base_qi = yac_qi; |
342 | 342 |
343 s->qmat[i].luma_qmul[0] = vp8_dc_qlookup[av_clip(base_qi + ydc_delta , 0, 127)]; | 343 s->qmat[i].luma_qmul[0] = vp8_dc_qlookup[av_clip(base_qi + ydc_delta , 0, 127)]; |
344 s->qmat[i].luma_qmul[1] = vp8_ac_qlookup[av_clip(base_qi , 0, 127)]; | 344 s->qmat[i].luma_qmul[1] = vp8_ac_qlookup[av_clip(base_qi , 0, 127)]; |
345 s->qmat[i].luma_dc_qmul[0] = 2 * vp8_dc_qlookup[av_clip(base_qi + y2dc_delta, 0, 127)]; | 345 s->qmat[i].luma_dc_qmul[0] = 2 * vp8_dc_qlookup[av_clip(base_qi + y2dc_delta, 0, 127)]; |
346 s->qmat[i].luma_dc_qmul[1] = 155 * vp8_ac_qlookup[av_clip(base_qi + y2ac_delta, 2, 127)] / 100; | 346 s->qmat[i].luma_dc_qmul[1] = 155 * vp8_ac_qlookup[av_clip(base_qi + y2ac_delta, 0, 127)] / 100; |
347 s->qmat[i].chroma_qmul[0] = vp8_dc_qlookup[av_clip(base_qi + uvdc_delta, 0, 117)]; | 347 s->qmat[i].chroma_qmul[0] = vp8_dc_qlookup[av_clip(base_qi + uvdc_delta, 0, 127)]; |
348 s->qmat[i].chroma_qmul[1] = vp8_ac_qlookup[av_clip(base_qi + uvac_delta, 0, 127)]; | 348 s->qmat[i].chroma_qmul[1] = vp8_ac_qlookup[av_clip(base_qi + uvac_delta, 0, 127)]; |
349 | |
350 s->qmat[i].luma_dc_qmul[1] = FFMAX(s->qmat[i].luma_dc_qmul[1], 8); | |
351 s->qmat[i].chroma_qmul[0] = FFMIN(s->qmat[i].chroma_qmul[0], 132); | |
349 } | 352 } |
350 } | 353 } |
351 | 354 |
352 /** | 355 /** |
353 * Determine which buffers golden and altref should be updated with after this frame. | 356 * Determine which buffers golden and altref should be updated with after this frame. |
494 for (l = 0; l < NUM_DCT_TOKENS-1; l++) | 497 for (l = 0; l < NUM_DCT_TOKENS-1; l++) |
495 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])) |
496 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); |
497 | 500 |
498 if ((s->mbskip_enabled = vp8_rac_get(c))) | 501 if ((s->mbskip_enabled = vp8_rac_get(c))) |
499 s->mbskip_proba = vp8_rac_get_uint(c, 8); | 502 s->prob->mbskip = vp8_rac_get_uint(c, 8); |
500 | 503 |
501 if (!s->keyframe) { | 504 if (!s->keyframe) { |
502 s->intra_proba = vp8_rac_get_uint(c, 8); | 505 s->prob->intra = vp8_rac_get_uint(c, 8); |
503 s->last_proba = vp8_rac_get_uint(c, 8); | 506 s->prob->last = vp8_rac_get_uint(c, 8); |
504 s->golden_proba = vp8_rac_get_uint(c, 8); | 507 s->prob->golden = vp8_rac_get_uint(c, 8); |
505 | 508 |
506 if (vp8_rac_get(c)) | 509 if (vp8_rac_get(c)) |
507 for (i = 0; i < 4; i++) | 510 for (i = 0; i < 4; i++) |
508 s->prob->pred16x16[i] = vp8_rac_get_uint(c, 8); | 511 s->prob->pred16x16[i] = vp8_rac_get_uint(c, 8); |
509 if (vp8_rac_get(c)) | 512 if (vp8_rac_get(c)) |
720 | 723 |
721 if (s->segmentation.update_map) | 724 if (s->segmentation.update_map) |
722 *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); |
723 s->segment = *segment; | 726 s->segment = *segment; |
724 | 727 |
725 mb->skip = s->mbskip_enabled ? vp56_rac_get_prob(c, s->mbskip_proba) : 0; | 728 mb->skip = s->mbskip_enabled ? vp56_rac_get_prob(c, s->prob->mbskip) : 0; |
726 | 729 |
727 if (s->keyframe) { | 730 if (s->keyframe) { |
728 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); |
729 | 732 |
730 if (mb->mode == MODE_I4x4) { | 733 if (mb->mode == MODE_I4x4) { |
732 } else | 735 } else |
733 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); |
734 | 737 |
735 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); |
736 mb->ref_frame = VP56_FRAME_CURRENT; | 739 mb->ref_frame = VP56_FRAME_CURRENT; |
737 } else if (vp56_rac_get_prob_branchy(c, s->intra_proba)) { | 740 } else if (vp56_rac_get_prob_branchy(c, s->prob->intra)) { |
738 VP56mv near[2], best; | 741 VP56mv near[2], best; |
739 uint8_t cnt[4] = { 0 }; | 742 uint8_t cnt[4] = { 0 }; |
740 uint8_t p[4]; | 743 uint8_t p[4]; |
741 | 744 |
742 // inter MB, 16.2 | 745 // inter MB, 16.2 |
743 if (vp56_rac_get_prob_branchy(c, s->last_proba)) | 746 if (vp56_rac_get_prob_branchy(c, s->prob->last)) |
744 mb->ref_frame = vp56_rac_get_prob(c, s->golden_proba) ? | 747 mb->ref_frame = vp56_rac_get_prob(c, s->prob->golden) ? |
745 VP56_FRAME_GOLDEN2 /* altref */ : VP56_FRAME_GOLDEN; | 748 VP56_FRAME_GOLDEN2 /* altref */ : VP56_FRAME_GOLDEN; |
746 else | 749 else |
747 mb->ref_frame = VP56_FRAME_PREVIOUS; | 750 mb->ref_frame = VP56_FRAME_PREVIOUS; |
748 s->ref_count[mb->ref_frame-1]++; | 751 s->ref_count[mb->ref_frame-1]++; |
749 | 752 |