[Ffmpeg-devel] swscale and 64 bit problem (mmx code)
Reimar Döffinger
Reimar.Doeffinger
Thu Mar 1 13:17:10 CET 2007
Hello,
On Thu, Mar 01, 2007 at 01:18:12PM +0000, Giancarlo Formicuccia wrote:
> libswscale seems to be unsafe on 64 bit platforms. The problem is
> the 32-bit chrMmxFilter array of SwsContext, because it stores
> pointers to allocated memory (lumMmxFilter has probably the same
> issue).
[...]
> Fixing the code is not trivial, due to the many hardcoded values in the asm code...
> Ideas?
Well, the non-SWS_ACCURATE_RND case is trivial to fix I think, see attached
patch.
Greetings,
Reimar D?ffinger
-------------- next part --------------
Index: libswscale/swscale_template.c
===================================================================
--- libswscale/swscale_template.c (revision 22381)
+++ libswscale/swscale_template.c (working copy)
@@ -3168,14 +3168,16 @@
}else{
for(i=0; i<vLumFilterSize; i++)
{
- lumMmxFilter[4*i+0]= (int32_t)lumSrcPtr[i];
+ lumMmxFilter[4*i+0]= (uintptr_t)lumSrcPtr[i];
+ lumMmxFilter[4*i+1]= (uintptr_t)lumSrcPtr[i] >> 32;
lumMmxFilter[4*i+2]=
lumMmxFilter[4*i+3]=
((uint16_t)vLumFilter[dstY*vLumFilterSize + i])*0x10001;
}
for(i=0; i<vChrFilterSize; i++)
{
- chrMmxFilter[4*i+0]= (int32_t)chrSrcPtr[i];
+ chrMmxFilter[4*i+0]= (uintptr_t)chrSrcPtr[i];
+ chrMmxFilter[4*i+1]= (uintptr_t)chrSrcPtr[i] >> 32;
chrMmxFilter[4*i+2]=
chrMmxFilter[4*i+3]=
((uint16_t)vChrFilter[chrDstY*vChrFilterSize + i])*0x10001;
More information about the ffmpeg-devel
mailing list