[FFmpeg-devel] [PATCH] h264 deblocking result doesn'tmatch with SIMD on and off.

Haruhiko Yamagata h.yamagata
Sun May 24 02:35:52 CEST 2009


> On Sun, May 24, 2009 at 12:40:18AM +0900, Haruhiko Yamagata wrote:
>> In h264 decoder, deblocking result doesn't match with SIMD on and off.
>>
>> In h264_loop_filter* (dsputil.c), there are several
>>
>>    if( FFABS( p0 - q0 ) < alpha &&
>>        FFABS( p1 - p0 ) < beta &&
>>        FFABS( q1 - q0 ) < beta )
>>
>> In SIMD optimized functions, this is done in H264_DEBLOCK_MASK 
>> (h264dsp_mmx.c).
>>
>>    if (!(FFABS( p0 - q0 ) > (uint8_t)(alpha -1) ||
>>          FFABS( p1 - p0 ) > (uint8_t)(beta  -1) ||   // beta == 0 ? Oops : 
>> ...
>>          FFABS( q1 - q0 ) > (uint8_t)(beta  -1) ))
>>
>> So the SIMD optimized functions expect alpha and beta not to be zero.
>> OK, let them assume it for performance.
>> The attached patch fixes this issue.
>>
>> The errors are usually invisible, but after a long chain of reference,
>> the errors accumulate and eventually get visible.
>>
>> Best regards,
>> Haruhiko Yamagata
>> ffdshow-tryouts
>>
>
>>  h264.c |    4 ++++
>>  1 file changed, 4 insertions(+)
>> 089aea8ce540d5087b27de54b2a67b7b11e8d707  dont_deblock_if_beta_is_0.patch
>
> This patch adds the checks so they are also done for the C code
> this seems wastefull unless there is some advantage in it?

If the stream has alpha ==0 or beta==0, the performance is better with the patch. 
But it doesn't seem to be common enough.

I inserted #if HAVE_MMX. It also make it clearer that SIMD code requires it.

Best regards,
Haruhiko Yamagata
ffdshow tryouts
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dont_deblock_if_beta_is_0v2.patch
Type: application/octet-stream
Size: 1393 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090524/4dd470af/attachment.obj>



More information about the ffmpeg-devel mailing list