Mercurial > libavcodec.hg
comparison vc1.c @ 3476:33a177588139 libavcodec
Don't pass block[6][64] parameter to decode_p_mb as we always use s->block
author | kostya |
---|---|
date | Sun, 16 Jul 2006 03:50:00 +0000 |
parents | 4e06affe9974 |
children | e0996476198b |
comparison
equal
deleted
inserted
replaced
3475:4e06affe9974 | 3476:33a177588139 |
---|---|
2381 | 2381 |
2382 /** Decode one P-frame MB (in Simple/Main profile) | 2382 /** Decode one P-frame MB (in Simple/Main profile) |
2383 * @todo TODO: Extend to AP | 2383 * @todo TODO: Extend to AP |
2384 * @fixme FIXME: DC value for inter blocks not set | 2384 * @fixme FIXME: DC value for inter blocks not set |
2385 */ | 2385 */ |
2386 static int vc1_decode_p_mb(VC1Context *v, DCTELEM block[6][64]) | 2386 static int vc1_decode_p_mb(VC1Context *v) |
2387 { | 2387 { |
2388 MpegEncContext *s = &v->s; | 2388 MpegEncContext *s = &v->s; |
2389 GetBitContext *gb = &s->gb; | 2389 GetBitContext *gb = &s->gb; |
2390 int i, j; | 2390 int i, j; |
2391 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; | 2391 int mb_pos = s->mb_x + s->mb_y * s->mb_stride; |
2464 if(i == 2 || i == 3 || !s->first_slice_line) | 2464 if(i == 2 || i == 3 || !s->first_slice_line) |
2465 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; | 2465 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; |
2466 if(i == 1 || i == 3 || s->mb_x) | 2466 if(i == 1 || i == 3 || s->mb_x) |
2467 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; | 2467 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; |
2468 | 2468 |
2469 vc1_decode_intra_block(v, block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset); | 2469 vc1_decode_intra_block(v, s->block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset); |
2470 vc1_inv_trans(block[i], 8, 8); | 2470 vc1_inv_trans(s->block[i], 8, 8); |
2471 for(j = 0; j < 64; j++) block[i][j] += 128; | 2471 for(j = 0; j < 64; j++) s->block[i][j] += 128; |
2472 s->dsp.put_pixels_clamped(block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2472 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); |
2473 /* TODO: proper loop filtering */ | 2473 /* TODO: proper loop filtering */ |
2474 if(v->pq >= 9 && v->overlap) { | 2474 if(v->pq >= 9 && v->overlap) { |
2475 if(v->a_avail) | 2475 if(v->a_avail) |
2476 vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2476 vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); |
2477 if(v->c_avail) | 2477 if(v->c_avail) |
2478 vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2478 vc1_h_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); |
2479 } | 2479 } |
2480 } else if(val) { | 2480 } else if(val) { |
2481 vc1_decode_p_block(v, block[i], i, mquant, ttmb, first_block); | 2481 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); |
2482 if(!v->ttmbf && ttmb < 8) ttmb = -1; | 2482 if(!v->ttmbf && ttmb < 8) ttmb = -1; |
2483 first_block = 0; | 2483 first_block = 0; |
2484 s->dsp.add_pixels_clamped(block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); | 2484 s->dsp.add_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); |
2485 } | 2485 } |
2486 } | 2486 } |
2487 } | 2487 } |
2488 else //Skipped | 2488 else //Skipped |
2489 { | 2489 { |
2529 if(i == 4) vc1_mc_4mv_chroma(v); | 2529 if(i == 4) vc1_mc_4mv_chroma(v); |
2530 v->mb_type[0][s->block_index[i]] = is_intra[i]; | 2530 v->mb_type[0][s->block_index[i]] = is_intra[i]; |
2531 if(!coded_inter) coded_inter = !is_intra[i] & is_coded[i]; | 2531 if(!coded_inter) coded_inter = !is_intra[i] & is_coded[i]; |
2532 } | 2532 } |
2533 // if there are no coded blocks then don't do anything more | 2533 // if there are no coded blocks then don't do anything more |
2534 if(!intra_count && !coded_inter) return 0; | 2534 if(!intra_count && !coded_inter) return; |
2535 dst_idx = 0; | 2535 dst_idx = 0; |
2536 GET_MQUANT(); | 2536 GET_MQUANT(); |
2537 s->current_picture.qscale_table[mb_pos] = mquant; | 2537 s->current_picture.qscale_table[mb_pos] = mquant; |
2538 /* test if block is intra and has pred */ | 2538 /* test if block is intra and has pred */ |
2539 { | 2539 { |
2563 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; | 2563 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; |
2564 if(i == 1 || i == 3 || s->mb_x) | 2564 if(i == 1 || i == 3 || s->mb_x) |
2565 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; | 2565 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; |
2566 | 2566 |
2567 vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, (i&4)?v->codingset2:v->codingset); | 2567 vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, (i&4)?v->codingset2:v->codingset); |
2568 vc1_inv_trans(block[i], 8, 8); | 2568 vc1_inv_trans(s->block[i], 8, 8); |
2569 for(j = 0; j < 64; j++) block[i][j] += 128; | 2569 for(j = 0; j < 64; j++) s->block[i][j] += 128; |
2570 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); | 2570 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); |
2571 /* TODO: proper loop filtering */ | 2571 /* TODO: proper loop filtering */ |
2572 if(v->pq >= 9 && v->overlap) { | 2572 if(v->pq >= 9 && v->overlap) { |
2573 if(v->a_avail) | 2573 if(v->a_avail) |
2574 vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); | 2574 vc1_v_overlap(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2)); |
2743 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) { | 2743 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) { |
2744 ff_init_block_index(s); | 2744 ff_init_block_index(s); |
2745 ff_update_block_index(s); | 2745 ff_update_block_index(s); |
2746 s->dsp.clear_blocks(s->block[0]); | 2746 s->dsp.clear_blocks(s->block[0]); |
2747 | 2747 |
2748 vc1_decode_p_mb(v, s->block); | 2748 vc1_decode_p_mb(v); |
2749 if(get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { | 2749 if(get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { |
2750 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", get_bits_count(&s->gb), v->bits,s->mb_x,s->mb_y); | 2750 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", get_bits_count(&s->gb), v->bits,s->mb_x,s->mb_y); |
2751 return; | 2751 return; |
2752 } | 2752 } |
2753 } | 2753 } |