MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / encode_mb_internal

Function encode_mb_internal

libavcodec/mpegvideo_enc.c:1489–1780  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1487}
1488
1489static av_always_inline void encode_mb_internal(MpegEncContext *s, int motion_x, int motion_y, int mb_block_height, int mb_block_count)
1490{
1491 int16_t weight[8][64];
1492 DCTELEM orig[8][64];
1493 const int mb_x= s->mb_x;
1494 const int mb_y= s->mb_y;
1495 int i;
1496 int skip_dct[8];
1497 int dct_offset = s->linesize*8; //default for progressive frames
1498 uint8_t *ptr_y, *ptr_cb, *ptr_cr;
1499 int wrap_y, wrap_c;
1500
1501 for(i=0; i<mb_block_count; i++) skip_dct[i]=s->skipdct;
1502
1503 if(s->adaptive_quant){
1504 const int last_qp= s->qscale;
1505 const int mb_xy= mb_x + mb_y*s->mb_stride;
1506
1507 s->lambda= s->lambda_table[mb_xy];
1508 update_qscale(s);
1509
1510 if(!(s->flags&CODEC_FLAG_QP_RD)){
1511 s->qscale= s->current_picture_ptr->qscale_table[mb_xy];
1512 s->dquant= s->qscale - last_qp;
1513
1514 if(s->out_format==FMT_H263){
1515 s->dquant= av_clip(s->dquant, -2, 2);
1516
1517 if(s->codec_id==CODEC_ID_MPEG4){
1518 if(!s->mb_intra){
1519 if(s->pict_type == FF_B_TYPE){
1520 if(s->dquant&1 || s->mv_dir&MV_DIRECT)
1521 s->dquant= 0;
1522 }
1523 if(s->mv_type==MV_TYPE_8X8)
1524 s->dquant=0;
1525 }
1526 }
1527 }
1528 }
1529 ff_set_qscale(s, last_qp + s->dquant);
1530 }else if(s->flags&CODEC_FLAG_QP_RD)
1531 ff_set_qscale(s, s->qscale + s->dquant);
1532
1533 wrap_y = s->linesize;
1534 wrap_c = s->uvlinesize;
1535 ptr_y = s->new_picture.data[0] + (mb_y * 16 * wrap_y) + mb_x * 16;
1536 ptr_cb = s->new_picture.data[1] + (mb_y * mb_block_height * wrap_c) + mb_x * 8;
1537 ptr_cr = s->new_picture.data[2] + (mb_y * mb_block_height * wrap_c) + mb_x * 8;
1538
1539 if(mb_x*16+16 > s->width || mb_y*16+16 > s->height){
1540 uint8_t *ebuf= s->edge_emu_buffer + 32;
1541 ff_emulated_edge_mc(ebuf , ptr_y , wrap_y,16,16,mb_x*16,mb_y*16, s->width , s->height);
1542 ptr_y= ebuf;
1543 ff_emulated_edge_mc(ebuf+18*wrap_y , ptr_cb, wrap_c, 8, mb_block_height, mb_x*8, mb_y*8, s->width>>1, s->height>>1);
1544 ptr_cb= ebuf+18*wrap_y;
1545 ff_emulated_edge_mc(ebuf+18*wrap_y+8, ptr_cr, wrap_c, 8, mb_block_height, mb_x*8, mb_y*8, s->width>>1, s->height>>1);
1546 ptr_cr= ebuf+18*wrap_y+8;

Callers 1

encode_mbFunction · 0.85

Calls 15

update_qscaleFunction · 0.85
av_clipFunction · 0.85
ff_set_qscaleFunction · 0.85
ff_emulated_edge_mcFunction · 0.85
MPV_motionFunction · 0.85
get_visual_weightFunction · 0.85
clip_coeffsFunction · 0.85
mpeg1_encode_mbFunction · 0.85
mpeg4_encode_mbFunction · 0.85
msmpeg4_encode_mbFunction · 0.85
ff_wmv2_encode_mbFunction · 0.85

Tested by

no test coverage detected