[SCM] libav/experimental: Load the whole left side of mv&ref only when needed. 30 cpu cycles faster
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sun Jun 30 17:02:29 UTC 2013
The following commit has been merged in the experimental branch:
commit 16b802fe934d5af0d2d388bcf0796dded80a00ed
Author: Michael Niedermayer <michaelni at gmx.at>
Date: Wed Mar 3 01:38:27 2010 +0000
Load the whole left side of mv&ref only when needed.
30 cpu cycles faster
Originally committed as revision 22161 to svn://svn.ffmpeg.org/ffmpeg/trunk
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 1afce71..8383c20 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -995,6 +995,7 @@ static void fill_decode_caches(H264Context *h, int mb_type){
AV_WN32A(&h->ref_cache[list][scan8[0] + 0 - 1*8], ((top_type ? LIST_NOT_USED : PART_NOT_AVAILABLE)&0xFF)*0x01010101);
}
+ if(mb_type & (MB_TYPE_16x8|MB_TYPE_8x8)){
for(i=0; i<2; i++){
int cache_idx = scan8[0] - 1 + i*2*8;
if(USES_LIST(left_type[i], list)){
@@ -1011,6 +1012,17 @@ static void fill_decode_caches(H264Context *h, int mb_type){
h->ref_cache[list][cache_idx+8]= (left_type[i]) ? LIST_NOT_USED : PART_NOT_AVAILABLE;
}
}
+ }else{
+ if(USES_LIST(left_type[0], list)){
+ const int b_xy= h->mb2b_xy[left_xy[0]] + 3;
+ const int b8_xy= 4*left_xy[0] + 1;
+ AV_COPY32(h->mv_cache[list][scan8[0] - 1], s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[0]]);
+ h->ref_cache[list][scan8[0] - 1]= s->current_picture.ref_index[list][b8_xy + (left_block[0]&~1)];
+ }else{
+ AV_ZERO32(h->mv_cache [list][scan8[0] - 1]);
+ h->ref_cache[list][scan8[0] - 1]= left_type[0] ? LIST_NOT_USED : PART_NOT_AVAILABLE;
+ }
+ }
if(USES_LIST(topright_type, list)){
const int b_xy= h->mb2b_xy[topright_xy] + 3*h->b_stride;
--
Libav/FFmpeg packaging
More information about the pkg-multimedia-commits
mailing list