[FFmpeg-devel] h264 speed regression after PAFF

Jeff Downs heydowns
Fri Oct 12 21:04:42 CEST 2007


On Fri, 12 Oct 2007, Andreas ?man wrote:
[...]
> Jeff, you mentioned earlier that you was going to address the
> (MB_MBAFF || FIELD_PICTURE) -stuff. Are you working on this
> or are there still remaining bugs that needed to be squashed?

Said patch is attached. Should give a little boost since it basically puts 
all the macroblock-level decoding field tests back to one test (same as 
before PAFF) instead of two.

Suggested commit msg: "Simplify tests for field macroblocks"

	-Jeff
-------------- next part --------------
Index: libavcodec/h264.c
===================================================================
--- libavcodec/h264.c	(revision 10718)
+++ libavcodec/h264.c	(working copy)
@@ -1703,7 +1703,7 @@
     const int full_mx= mx>>2;
     const int full_my= my>>2;
     const int pic_width  = 16*s->mb_width;
-    const int pic_height = 16*s->mb_height >> (MB_MBAFF || FIELD_PICTURE);
+    const int pic_height = 16*s->mb_height >> MB_FIELD;
 
     if(!pic->data[0]) //FIXME this is unacceptable, some senseable error concealment must be done for missing reference frames
         return;
@@ -1727,7 +1727,7 @@
 
     if(ENABLE_GRAY && s->flags&CODEC_FLAG_GRAY) return;
 
-    if(MB_MBAFF || FIELD_PICTURE){
+    if(MB_FIELD){
         // chroma offset when predicting from a field of opposite parity
         my += 2 * ((s->mb_y & 1) - (h->ref_cache[list][scan8[n]] & 1));
         emu |= (my>>3) < 0 || (my>>3) + 8 >= (pic_height>>1);
@@ -1762,7 +1762,7 @@
     dest_cb +=   x_offset +   y_offset*h->mb_uvlinesize;
     dest_cr +=   x_offset +   y_offset*h->mb_uvlinesize;
     x_offset += 8*s->mb_x;
-    y_offset += 8*(s->mb_y >> (MB_MBAFF || FIELD_PICTURE));
+    y_offset += 8*(s->mb_y >> MB_FIELD);
 
     if(list0){
         Picture *ref= &h->ref_list[0][ h->ref_cache[0][ scan8[n] ] ];
@@ -1795,7 +1795,7 @@
     dest_cb +=   x_offset +   y_offset*h->mb_uvlinesize;
     dest_cr +=   x_offset +   y_offset*h->mb_uvlinesize;
     x_offset += 8*s->mb_x;
-    y_offset += 8*(s->mb_y >> (MB_MBAFF || FIELD_PICTURE));
+    y_offset += 8*(s->mb_y >> MB_FIELD);
 
     if(list0 && list1){
         /* don't optimize for luma-only case, since B-frames usually



More information about the ffmpeg-devel mailing list