comparison vc1.c @ 3449:ec6096b1ab04 libavcodec

Use s->first_slice_line in checks instead of s->mb_y
author kostya
date Sun, 09 Jul 2006 02:44:05 +0000
parents d0e85690841d
children 906c58dcb6ea
comparison
equal deleted inserted replaced
3448:f94d61396915 3449:ec6096b1ab04
1696 a = dc_val[ - wrap]; 1696 a = dc_val[ - wrap];
1697 1697
1698 if (pq < 9 || !overlap) 1698 if (pq < 9 || !overlap)
1699 { 1699 {
1700 /* Set outer values */ 1700 /* Set outer values */
1701 if (!s->mb_y && (n!=2 && n!=3)) b=a=dcpred[scale]; 1701 if (s->first_slice_line && (n!=2 && n!=3)) b=a=dcpred[scale];
1702 if (s->mb_x == 0 && (n!=1 && n!=3)) b=c=dcpred[scale]; 1702 if (s->mb_x == 0 && (n!=1 && n!=3)) b=c=dcpred[scale];
1703 } 1703 }
1704 else 1704 else
1705 { 1705 {
1706 /* Set outer values */ 1706 /* Set outer values */
1707 if (!s->mb_y && (n!=2 && n!=3)) b=a=0; 1707 if (s->first_slice_line && (n!=2 && n!=3)) b=a=0;
1708 if (s->mb_x == 0 && (n!=1 && n!=3)) b=c=0; 1708 if (s->mb_x == 0 && (n!=1 && n!=3)) b=c=0;
1709 } 1709 }
1710 1710
1711 if (abs(a - b) <= abs(b - c)) { 1711 if (abs(a - b) <= abs(b - c)) {
1712 pred = c; 1712 pred = c;
2436 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); 2436 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize);
2437 v->mb_type[0][s->block_index[i]] = s->mb_intra; 2437 v->mb_type[0][s->block_index[i]] = s->mb_intra;
2438 if(s->mb_intra) { 2438 if(s->mb_intra) {
2439 /* check if prediction blocks A and C are available */ 2439 /* check if prediction blocks A and C are available */
2440 v->a_avail = v->c_avail = 0; 2440 v->a_avail = v->c_avail = 0;
2441 if(i == 2 || i == 3 || s->mb_y) 2441 if(i == 2 || i == 3 || !s->first_slice_line)
2442 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; 2442 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]];
2443 if(i == 1 || i == 3 || s->mb_x) 2443 if(i == 1 || i == 3 || s->mb_x)
2444 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; 2444 v->c_avail = v->mb_type[0][s->block_index[i] - 1];
2445 2445
2446 vc1_decode_intra_block(v, block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset); 2446 vc1_decode_intra_block(v, block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset);
2513 /* test if block is intra and has pred */ 2513 /* test if block is intra and has pred */
2514 { 2514 {
2515 int intrapred = 0; 2515 int intrapred = 0;
2516 for(i=0; i<6; i++) 2516 for(i=0; i<6; i++)
2517 if(is_intra[i]) { 2517 if(is_intra[i]) {
2518 if(((s->mb_y || (i==2 || i==3)) && v->mb_type[0][s->block_index[i] - s->block_wrap[i]]) 2518 if(((!s->first_slice_line || (i==2 || i==3)) && v->mb_type[0][s->block_index[i] - s->block_wrap[i]])
2519 || ((s->mb_x || (i==1 || i==3)) && v->mb_type[0][s->block_index[i] - 1])) { 2519 || ((s->mb_x || (i==1 || i==3)) && v->mb_type[0][s->block_index[i] - 1])) {
2520 intrapred = 1; 2520 intrapred = 1;
2521 break; 2521 break;
2522 } 2522 }
2523 } 2523 }
2524 if(intrapred)s->ac_pred = get_bits(gb, 1); 2524 if(intrapred)s->ac_pred = get_bits(gb, 1);
2532 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); 2532 off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize);
2533 s->mb_intra = is_intra[i]; 2533 s->mb_intra = is_intra[i];
2534 if (is_intra[i]) { 2534 if (is_intra[i]) {
2535 /* check if prediction blocks A and C are available */ 2535 /* check if prediction blocks A and C are available */
2536 v->a_avail = v->c_avail = 0; 2536 v->a_avail = v->c_avail = 0;
2537 if(i == 2 || i == 3 || s->mb_y) 2537 if(i == 2 || i == 3 || !s->first_slice_line)
2538 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; 2538 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]];
2539 if(i == 1 || i == 3 || s->mb_x) 2539 if(i == 1 || i == 3 || s->mb_x)
2540 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; 2540 v->c_avail = v->mb_type[0][s->block_index[i] - 1];
2541 2541
2542 vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, (i&4)?v->codingset2:v->codingset); 2542 vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, (i&4)?v->codingset2:v->codingset);
2618 s->c_dc_scale = s->c_dc_scale_table[v->pq]; 2618 s->c_dc_scale = s->c_dc_scale_table[v->pq];
2619 2619
2620 //do frame decode 2620 //do frame decode
2621 s->mb_x = s->mb_y = 0; 2621 s->mb_x = s->mb_y = 0;
2622 s->mb_intra = 1; 2622 s->mb_intra = 1;
2623 s->first_slice_line = 1;
2623 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END)); 2624 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
2624 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { 2625 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) {
2625 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) { 2626 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) {
2626 ff_init_block_index(s); 2627 ff_init_block_index(s);
2627 ff_update_block_index(s); 2628 ff_update_block_index(s);
2676 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); 2677 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits);
2677 return; 2678 return;
2678 } 2679 }
2679 } 2680 }
2680 ff_draw_horiz_band(s, s->mb_y * 16, 16); 2681 ff_draw_horiz_band(s, s->mb_y * 16, 16);
2682 s->first_slice_line = 0;
2681 } 2683 }
2682 } 2684 }
2683 2685
2684 static void vc1_decode_p_blocks(VC1Context *v) 2686 static void vc1_decode_p_blocks(VC1Context *v)
2685 { 2687 {