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 }