[FFmpeg-devel] [PATCH] avoid mb_xy recalculation in h264
Alexander Strange
astrange
Wed May 7 20:49:20 CEST 2008
On May 7, 2008, at 8:53 AM, Michael Niedermayer wrote:
> On Wed, May 07, 2008 at 03:05:47AM -0400, Alexander Strange wrote:
>> This line appears in a lot of h264.c functions:
>> const int mb_xy= s->mb_x + s->mb_y*s->mb_stride;
>>
>> It only changes once per MB, so we can add it to the context and only
>> recalculate it in decode_slice().
>> I put it at the end of H264Context, but it could be moved up
>> earlier if
>> someone likes it there. The position doesn't seem to affect
>> performance
>> much; it can't be moved next to mb_x/mb_y since that would put it in
>> MpegEncContext, and none of the other codecs use it.
>>
>> Patches:
>> 1- does that, updating it for MBAFF when needed
>> 2- removes some newly unused variables
>> 3- does the same thing to svq3.c
>>
>> Before: avg 8.799s max 8.8s min 8.794s
>> After: avg 8.645s max 8.651s min 8.641s
>
> Knowing the cpu and compiler would also be usefull.
gcc 4.0.1, core 2 x86-32 Darwin
I guess it's about the same as the usual distro compiler, but this
isn't really a sensitive messing-with-the-register-allocator patch.
> [...]
>> @@ -6790,14 +6790,18 @@
>>
>> for(;;){
>> //START_TIMER
>> - int ret = decode_mb_cabac(h);
>> + int ret;
>> int eos;
>> +
>> + h->mb_xy = s->mb_x + s->mb_y * s->mb_stride;
>> + ret = decode_mb_cabac(h);
>> //STOP_TIMER("decode_mb_cabac")
>>
>> if(ret>=0) hl_decode_mb(h);
>>
>> if( ret >= 0 && FRAME_MBAFF ) { //FIXME optimal? or let
>> mb_decode decode 16x32 ?
>> s->mb_y++;
>> + h->mb_xy = s->mb_x + s->mb_y * s->mb_stride;
>>
>> if(ret>=0) ret = decode_mb_cabac(h);
>>
>> @@ -6830,12 +6834,17 @@
>>
>> } else {
>> for(;;){
>> - int ret = decode_mb_cavlc(h);
>> + int ret;
>> +
>> + h->mb_xy = s->mb_x + s->mb_y * s->mb_stride;
>> + ret = decode_mb_cavlc(h);
>>
>> if(ret>=0) hl_decode_mb(h);
>>
>> if(ret>=0 && FRAME_MBAFF){ //FIXME optimal? or let
>> mb_decode decode 16x32 ?
>> s->mb_y++;
>> + h->mb_xy = s->mb_x + s->mb_y * s->mb_stride;
>> +
>> ret = decode_mb_cavlc(h);
>
> the mb_xy init can be moved into decode_mb_ca*()
Done.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1-h264-nombxy2.diff
Type: text/x-diff
Size: 7684 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080507/2af96a52/attachment.diff>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 2-h264-warnings.diff
Type: text/x-diff
Size: 1009 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080507/2af96a52/attachment-0001.diff>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 3-svq3.diff
Type: text/x-diff
Size: 1120 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080507/2af96a52/attachment-0002.diff>
More information about the ffmpeg-devel
mailing list