Mercurial > libavcodec.hg
comparison vc1.c @ 3400:84de54d536bd libavcodec
4-MV mode final fixes (now it works for non-exotic modes)
author | kostya |
---|---|
date | Mon, 03 Jul 2006 17:21:18 +0000 |
parents | 3c6f5d05560d |
children | e88c3bc82b15 |
comparison
equal
deleted
inserted
replaced
3399:3c6f5d05560d | 3400:84de54d536bd |
---|---|
1579 px = py = 0; | 1579 px = py = 0; |
1580 } | 1580 } |
1581 /* Pullback MV as specified in 8.3.5.3.4 */ | 1581 /* Pullback MV as specified in 8.3.5.3.4 */ |
1582 { | 1582 { |
1583 int qx, qy, X, Y; | 1583 int qx, qy, X, Y; |
1584 qx = s->mb_x << 6; //FIXME: add real block coords for 4MV mode | 1584 qx = (s->mb_x << 6) + ((n==1 || n==3) ? 32 : 0); |
1585 qy = s->mb_y << 6; | 1585 qy = (s->mb_y << 6) + ((n==2 || n==3) ? 32 : 0); |
1586 X = (s->mb_width << 6) - 4; | 1586 X = (s->mb_width << 6) - 4; |
1587 Y = (s->mb_height << 6) - 4; | 1587 Y = (s->mb_height << 6) - 4; |
1588 if(mv1) { | 1588 if(mv1) { |
1589 if(qx + px < -60) px = -60 - qx; | 1589 if(qx + px < -60) px = -60 - qx; |
1590 if(qy + py < -60) py = -60 - qy; | 1590 if(qy + py < -60) py = -60 - qy; |
2514 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; | 2514 v->a_avail = v->mb_type[0][s->block_index[i] - s->block_wrap[i]]; |
2515 if(i == 1 || i == 3 || s->mb_x) | 2515 if(i == 1 || i == 3 || s->mb_x) |
2516 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; | 2516 v->c_avail = v->mb_type[0][s->block_index[i] - 1]; |
2517 | 2517 |
2518 vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, (i&4)?v->codingset2:v->codingset); | 2518 vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, (i&4)?v->codingset2:v->codingset); |
2519 //s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); | 2519 vc1_inv_trans(block[i], 8, 8); |
2520 for(j = 0; j < 64; j++) block[i][j] += 128; | |
2521 s->dsp.put_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); | |
2520 /* TODO: proper loop filtering */ | 2522 /* TODO: proper loop filtering */ |
2521 if(v->pq >= 9 && v->overlap) { | 2523 if(v->pq >= 9 && v->overlap) { |
2522 if(v->a_avail) | 2524 if(v->a_avail) |
2523 s->dsp.h263_v_loop_filter(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), s->y_dc_scale); | 2525 s->dsp.h263_v_loop_filter(s->dest[dst_idx] + off, s->linesize >> ((i & 4) >> 2), s->y_dc_scale); |
2524 if(v->c_avail) | 2526 if(v->c_avail) |
2526 } | 2528 } |
2527 } else if(is_coded[i]) { | 2529 } else if(is_coded[i]) { |
2528 status = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); | 2530 status = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block); |
2529 if(!v->ttmbf && ttmb < 8) ttmb = -1; | 2531 if(!v->ttmbf && ttmb < 8) ttmb = -1; |
2530 first_block = 0; | 2532 first_block = 0; |
2531 //s->dsp.add_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); | 2533 s->dsp.add_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize); |
2532 } | 2534 } |
2533 } | 2535 } |
2534 return status; | 2536 return status; |
2535 } | 2537 } |
2536 else //Skipped MB | 2538 else //Skipped MB |
2537 { | 2539 { |
2540 s->mb_intra = 0; | |
2541 for (i=0; i<6; i++) v->mb_type[0][s->block_index[i]] = 0; | |
2538 for (i=0; i<4; i++) | 2542 for (i=0; i<4; i++) |
2539 { | 2543 { |
2540 vc1_pred_mv(s, i, 0, 0, 0, v->range_x, v->range_y, v->mb_type[0]); | 2544 vc1_pred_mv(s, i, 0, 0, 0, v->range_x, v->range_y, v->mb_type[0]); |
2541 vc1_mc_4mv_luma(v, i); | 2545 vc1_mc_4mv_luma(v, i); |
2542 } | 2546 } |
2543 vc1_mc_4mv_chroma(v); | 2547 vc1_mc_4mv_chroma(v); |
2544 for(i = 0; i < 6; i++) v->mb_type[0][s->block_index[i]] = 0; | |
2545 s->current_picture.qscale_table[mb_pos] = 0; | 2548 s->current_picture.qscale_table[mb_pos] = 0; |
2546 return 0; | 2549 return 0; |
2547 } | 2550 } |
2548 } | 2551 } |
2549 | 2552 |