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