Mercurial > libavcodec.hg
comparison mpegvideo.c @ 4327:a9f4d5c92218 libavcodec
skiprd
author | michael |
---|---|
date | Sat, 23 Dec 2006 03:05:36 +0000 |
parents | fb16458e3a86 |
children | 855350bd0daf |
comparison
equal
deleted
inserted
replaced
4326:9af83350d4fd | 4327:a9f4d5c92218 |
---|---|
4328 int skip_dct[8]; | 4328 int skip_dct[8]; |
4329 int dct_offset = s->linesize*8; //default for progressive frames | 4329 int dct_offset = s->linesize*8; //default for progressive frames |
4330 uint8_t *ptr_y, *ptr_cb, *ptr_cr; | 4330 uint8_t *ptr_y, *ptr_cb, *ptr_cr; |
4331 int wrap_y, wrap_c; | 4331 int wrap_y, wrap_c; |
4332 | 4332 |
4333 for(i=0; i<mb_block_count; i++) skip_dct[i]=0; | 4333 for(i=0; i<mb_block_count; i++) skip_dct[i]=s->skipdct; |
4334 | 4334 |
4335 if(s->adaptive_quant){ | 4335 if(s->adaptive_quant){ |
4336 const int last_qp= s->qscale; | 4336 const int last_qp= s->qscale; |
4337 const int mb_xy= mb_x + mb_y*s->mb_stride; | 4337 const int mb_xy= mb_x + mb_y*s->mb_stride; |
4338 | 4338 |
5288 s->mb_intra= 0; | 5288 s->mb_intra= 0; |
5289 ff_mpeg4_set_direct_mv(s, 0, 0); | 5289 ff_mpeg4_set_direct_mv(s, 0, 0); |
5290 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb, | 5290 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb, |
5291 &dmin, &next_block, 0, 0); | 5291 &dmin, &next_block, 0, 0); |
5292 } | 5292 } |
5293 if(!best_s.mb_intra && s->flags2&CODEC_FLAG2_SKIP_RD){ | |
5294 int coded=0; | |
5295 for(i=0; i<6; i++) | |
5296 coded |= s->block_last_index[i]; | |
5297 if(coded){ | |
5298 int mx,my; | |
5299 memcpy(s->mv, best_s.mv, sizeof(s->mv)); | |
5300 if(best_s.mv_dir & MV_DIRECT){ | |
5301 mx=my=0; //FIXME find the one we actually used | |
5302 ff_mpeg4_set_direct_mv(s, mx, my); | |
5303 }else if(best_s.mv_dir&MV_DIR_BACKWARD){ | |
5304 mx= s->mv[1][0][0]; | |
5305 my= s->mv[1][0][1]; | |
5306 }else{ | |
5307 mx= s->mv[0][0][0]; | |
5308 my= s->mv[0][0][1]; | |
5309 } | |
5310 | |
5311 s->mv_dir= best_s.mv_dir; | |
5312 s->mv_type = best_s.mv_type; | |
5313 s->mb_intra= 0; | |
5314 /* s->mv[0][0][0] = best_s.mv[0][0][0]; | |
5315 s->mv[0][0][1] = best_s.mv[0][0][1]; | |
5316 s->mv[1][0][0] = best_s.mv[1][0][0]; | |
5317 s->mv[1][0][1] = best_s.mv[1][0][1];*/ | |
5318 backup_s.dquant= 0; | |
5319 s->skipdct=1; | |
5320 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb, | |
5321 &dmin, &next_block, mx, my); | |
5322 s->skipdct=0; | |
5323 } | |
5324 } | |
5325 | |
5293 s->current_picture.qscale_table[xy]= best_s.qscale; | 5326 s->current_picture.qscale_table[xy]= best_s.qscale; |
5294 | 5327 |
5295 copy_context_after_encode(s, &best_s, -1); | 5328 copy_context_after_encode(s, &best_s, -1); |
5296 | 5329 |
5297 pb_bits_count= put_bits_count(&s->pb); | 5330 pb_bits_count= put_bits_count(&s->pb); |