comparison h264.c @ 11349:33f8308382f5 libavcodec

Reorder indexes in weight tables. 5 cpu cycles faster.
author michael
date Wed, 03 Mar 2010 21:10:08 +0000
parents 0fd8dca684c7
children 2e9cf41e2c2e
comparison
equal deleted inserted replaced
11348:3c624d573966 11349:33f8308382f5
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][0], h->luma_weight[1][refn1][0], 498 h->luma_weight[refn0][0][0] , h->luma_weight[refn1][1][0],
499 h->luma_weight[0][refn0][1] + h->luma_weight[1][refn1][1]); 499 h->luma_weight[refn0][0][1] + h->luma_weight[refn1][1][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][0], h->chroma_weight[1][refn1][0][0], 501 h->chroma_weight[refn0][0][0][0] , h->chroma_weight[refn1][1][0][0],
502 h->chroma_weight[0][refn0][0][1] + h->chroma_weight[1][refn1][0][1]); 502 h->chroma_weight[refn0][0][0][1] + h->chroma_weight[refn1][1][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][0], h->chroma_weight[1][refn1][1][0], 504 h->chroma_weight[refn0][0][1][0] , h->chroma_weight[refn1][1][1][0],
505 h->chroma_weight[0][refn0][1][1] + h->chroma_weight[1][refn1][1][1]); 505 h->chroma_weight[refn0][0][1][1] + h->chroma_weight[refn1][1][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][0], h->luma_weight[list][refn][1]); 516 h->luma_weight[refn][list][0], h->luma_weight[refn][list][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][0], h->chroma_weight[list][refn][0][1]); 519 h->chroma_weight[refn][list][0][0], h->chroma_weight[refn][list][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][0], h->chroma_weight[list][refn][1][1]); 521 h->chroma_weight[refn][list][1][0], h->chroma_weight[refn][list][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][0]= get_se_golomb(&s->gb); 1371 h->luma_weight[i][list][0]= get_se_golomb(&s->gb);
1372 h->luma_weight[list][i][1]= get_se_golomb(&s->gb); 1372 h->luma_weight[i][list][1]= get_se_golomb(&s->gb);
1373 if( h->luma_weight[list][i][0] != luma_def 1373 if( h->luma_weight[i][list][0] != luma_def
1374 || h->luma_weight[list][i][1] != 0) { 1374 || h->luma_weight[i][list][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][0]= luma_def; 1379 h->luma_weight[i][list][0]= luma_def;
1380 h->luma_weight[list][i][1]= 0; 1380 h->luma_weight[i][list][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][0]= get_se_golomb(&s->gb); 1388 h->chroma_weight[i][list][j][0]= get_se_golomb(&s->gb);
1389 h->chroma_weight[list][i][j][1]= get_se_golomb(&s->gb); 1389 h->chroma_weight[i][list][j][1]= get_se_golomb(&s->gb);
1390 if( h->chroma_weight[list][i][j][0] != chroma_def 1390 if( h->chroma_weight[i][list][j][0] != chroma_def
1391 || h->chroma_weight[list][i][j][1] != 0) { 1391 || h->chroma_weight[i][list][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][0]= chroma_def; 1399 h->chroma_weight[i][list][j][0]= chroma_def;
1400 h->chroma_weight[list][i][j][1]= 0; 1400 h->chroma_weight[i][list][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;