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