Mercurial > libavcodec.hg
comparison h264.c @ 11339:a82cdda1f507 libavcodec
Merge weight & offset tables, 15 cpu cycles faster.
author | michael |
---|---|
date | Wed, 03 Mar 2010 14:41:43 +0000 |
parents | 444401d150d6 |
children | 0fd8dca684c7 |
comparison
equal
deleted
inserted
replaced
11338:444401d150d6 | 11339:a82cdda1f507 |
---|---|
493 luma_weight_avg( dest_y, tmp_y, h-> mb_linesize, 5, weight0, weight1, 0); | 493 luma_weight_avg( dest_y, tmp_y, h-> mb_linesize, 5, weight0, weight1, 0); |
494 chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize, 5, weight0, weight1, 0); | 494 chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize, 5, weight0, weight1, 0); |
495 chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize, 5, weight0, weight1, 0); | 495 chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize, 5, weight0, weight1, 0); |
496 }else{ | 496 }else{ |
497 luma_weight_avg(dest_y, tmp_y, h->mb_linesize, h->luma_log2_weight_denom, | 497 luma_weight_avg(dest_y, tmp_y, h->mb_linesize, h->luma_log2_weight_denom, |
498 h->luma_weight[0][refn0], h->luma_weight[1][refn1], | 498 h->luma_weight[0][refn0][0], h->luma_weight[1][refn1][0], |
499 h->luma_offset[0][refn0] + h->luma_offset[1][refn1]); | 499 h->luma_weight[0][refn0][1] + h->luma_weight[1][refn1][1]); |
500 chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize, h->chroma_log2_weight_denom, | 500 chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize, h->chroma_log2_weight_denom, |
501 h->chroma_weight[0][refn0][0], h->chroma_weight[1][refn1][0], | 501 h->chroma_weight[0][refn0][0][0], h->chroma_weight[1][refn1][0][0], |
502 h->chroma_offset[0][refn0][0] + h->chroma_offset[1][refn1][0]); | 502 h->chroma_weight[0][refn0][0][1] + h->chroma_weight[1][refn1][0][1]); |
503 chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize, h->chroma_log2_weight_denom, | 503 chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize, h->chroma_log2_weight_denom, |
504 h->chroma_weight[0][refn0][1], h->chroma_weight[1][refn1][1], | 504 h->chroma_weight[0][refn0][1][0], h->chroma_weight[1][refn1][1][0], |
505 h->chroma_offset[0][refn0][1] + h->chroma_offset[1][refn1][1]); | 505 h->chroma_weight[0][refn0][1][1] + h->chroma_weight[1][refn1][1][1]); |
506 } | 506 } |
507 }else{ | 507 }else{ |
508 int list = list1 ? 1 : 0; | 508 int list = list1 ? 1 : 0; |
509 int refn = h->ref_cache[list][ scan8[n] ]; | 509 int refn = h->ref_cache[list][ scan8[n] ]; |
510 Picture *ref= &h->ref_list[list][refn]; | 510 Picture *ref= &h->ref_list[list][refn]; |
511 mc_dir_part(h, ref, n, square, chroma_height, delta, list, | 511 mc_dir_part(h, ref, n, square, chroma_height, delta, list, |
512 dest_y, dest_cb, dest_cr, x_offset, y_offset, | 512 dest_y, dest_cb, dest_cr, x_offset, y_offset, |
513 qpix_put, chroma_put); | 513 qpix_put, chroma_put); |
514 | 514 |
515 luma_weight_op(dest_y, h->mb_linesize, h->luma_log2_weight_denom, | 515 luma_weight_op(dest_y, h->mb_linesize, h->luma_log2_weight_denom, |
516 h->luma_weight[list][refn], h->luma_offset[list][refn]); | 516 h->luma_weight[list][refn][0], h->luma_weight[list][refn][1]); |
517 if(h->use_weight_chroma){ | 517 if(h->use_weight_chroma){ |
518 chroma_weight_op(dest_cb, h->mb_uvlinesize, h->chroma_log2_weight_denom, | 518 chroma_weight_op(dest_cb, h->mb_uvlinesize, h->chroma_log2_weight_denom, |
519 h->chroma_weight[list][refn][0], h->chroma_offset[list][refn][0]); | 519 h->chroma_weight[list][refn][0][0], h->chroma_weight[list][refn][0][1]); |
520 chroma_weight_op(dest_cr, h->mb_uvlinesize, h->chroma_log2_weight_denom, | 520 chroma_weight_op(dest_cr, h->mb_uvlinesize, h->chroma_log2_weight_denom, |
521 h->chroma_weight[list][refn][1], h->chroma_offset[list][refn][1]); | 521 h->chroma_weight[list][refn][1][0], h->chroma_weight[list][refn][1][1]); |
522 } | 522 } |
523 } | 523 } |
524 } | 524 } |
525 | 525 |
526 static inline void mc_part(H264Context *h, int n, int square, int chroma_height, int delta, | 526 static inline void mc_part(H264Context *h, int n, int square, int chroma_height, int delta, |
1366 for(i=0; i<h->ref_count[list]; i++){ | 1366 for(i=0; i<h->ref_count[list]; i++){ |
1367 int luma_weight_flag, chroma_weight_flag; | 1367 int luma_weight_flag, chroma_weight_flag; |
1368 | 1368 |
1369 luma_weight_flag= get_bits1(&s->gb); | 1369 luma_weight_flag= get_bits1(&s->gb); |
1370 if(luma_weight_flag){ | 1370 if(luma_weight_flag){ |
1371 h->luma_weight[list][i]= get_se_golomb(&s->gb); | 1371 h->luma_weight[list][i][0]= get_se_golomb(&s->gb); |
1372 h->luma_offset[list][i]= get_se_golomb(&s->gb); | 1372 h->luma_weight[list][i][1]= get_se_golomb(&s->gb); |
1373 if( h->luma_weight[list][i] != luma_def | 1373 if( h->luma_weight[list][i][0] != luma_def |
1374 || h->luma_offset[list][i] != 0) { | 1374 || h->luma_weight[list][i][1] != 0) { |
1375 h->use_weight= 1; | 1375 h->use_weight= 1; |
1376 h->luma_weight_flag[list]= 1; | 1376 h->luma_weight_flag[list]= 1; |
1377 } | 1377 } |
1378 }else{ | 1378 }else{ |
1379 h->luma_weight[list][i]= luma_def; | 1379 h->luma_weight[list][i][0]= luma_def; |
1380 h->luma_offset[list][i]= 0; | 1380 h->luma_weight[list][i][1]= 0; |
1381 } | 1381 } |
1382 | 1382 |
1383 if(CHROMA){ | 1383 if(CHROMA){ |
1384 chroma_weight_flag= get_bits1(&s->gb); | 1384 chroma_weight_flag= get_bits1(&s->gb); |
1385 if(chroma_weight_flag){ | 1385 if(chroma_weight_flag){ |
1386 int j; | 1386 int j; |
1387 for(j=0; j<2; j++){ | 1387 for(j=0; j<2; j++){ |
1388 h->chroma_weight[list][i][j]= get_se_golomb(&s->gb); | 1388 h->chroma_weight[list][i][j][0]= get_se_golomb(&s->gb); |
1389 h->chroma_offset[list][i][j]= get_se_golomb(&s->gb); | 1389 h->chroma_weight[list][i][j][1]= get_se_golomb(&s->gb); |
1390 if( h->chroma_weight[list][i][j] != chroma_def | 1390 if( h->chroma_weight[list][i][j][0] != chroma_def |
1391 || h->chroma_offset[list][i][j] != 0) { | 1391 || h->chroma_weight[list][i][j][1] != 0) { |
1392 h->use_weight_chroma= 1; | 1392 h->use_weight_chroma= 1; |
1393 h->chroma_weight_flag[list]= 1; | 1393 h->chroma_weight_flag[list]= 1; |
1394 } | 1394 } |
1395 } | 1395 } |
1396 }else{ | 1396 }else{ |
1397 int j; | 1397 int j; |
1398 for(j=0; j<2; j++){ | 1398 for(j=0; j<2; j++){ |
1399 h->chroma_weight[list][i][j]= chroma_def; | 1399 h->chroma_weight[list][i][j][0]= chroma_def; |
1400 h->chroma_offset[list][i][j]= 0; | 1400 h->chroma_weight[list][i][j][1]= 0; |
1401 } | 1401 } |
1402 } | 1402 } |
1403 } | 1403 } |
1404 } | 1404 } |
1405 if(h->slice_type_nos != FF_B_TYPE) break; | 1405 if(h->slice_type_nos != FF_B_TYPE) break; |