Index: postproc/swscale.c =================================================================== RCS file: /cvsroot/mplayer/main/postproc/swscale.c,v retrieving revision 1.148 diff -u -r1.148 swscale.c --- postproc/swscale.c 21 Jan 2005 16:48:18 -0000 1.148 +++ postproc/swscale.c 24 Jan 2005 13:52:24 -0000 @@ -61,6 +61,14 @@ #else #include #endif +#ifdef HAVE_SYS_MMAN_H +#include +#include +#include /* for PAGESIZE */ +#ifndef PAGESIZE +#define PAGESIZE 4096 +#endif +#endif #include "swscale.h" #include "swscale_internal.h" #include "../cpudetect.h" @@ -1999,6 +2007,21 @@ // can't downscale !!! if(c->canMMX2BeUsed && (flags & SWS_FAST_BILINEAR)) { +#define MAX_FUNNY_CODE_SIZE 10000 +#ifdef HAVE_SYS_MMAN_H +#define MAX_FUNNY_CODE_SIZE_ALIGNED ((MAX_FUNNY_CODE_SIZE + PAGESIZE-1) & ~(PAGESIZE-1)) + c->funnyYCode = (uint8_t*)memalign(PAGESIZE, MAX_FUNNY_CODE_SIZE_ALIGNED); + c->funnyUVCode = (uint8_t*)memalign(PAGESIZE, MAX_FUNNY_CODE_SIZE_ALIGNED); + if (mprotect(c->funnyYCode, MAX_FUNNY_CODE_SIZE_ALIGNED, + PROT_EXEC | PROT_READ | PROT_WRITE) || + mprotect(c->funnyUVCode, MAX_FUNNY_CODE_SIZE_ALIGNED, + PROT_EXEC | PROT_READ | PROT_WRITE)) + MSG_ERR("swScaler: generated code may be NX\n"); +#else + c->funnyYCode = (uint8_t*)memalign(32, MAX_FUNNY_CODE_SIZE); + c->funnyUVCode = (uint8_t*)memalign(32, MAX_FUNNY_CODE_SIZE); +#endif + c->lumMmx2Filter = (int16_t*)memalign(8, (dstW /8+8)*sizeof(int16_t)); c->chrMmx2Filter = (int16_t*)memalign(8, (c->chrDstW /4+8)*sizeof(int16_t)); c->lumMmx2FilterPos= (int32_t*)memalign(8, (dstW /2/8+8)*sizeof(int32_t)); @@ -2556,6 +2579,10 @@ if(c->hChrFilterPos) free(c->hChrFilterPos); c->hChrFilterPos = NULL; + if(c->funnyYCode) free(c->funnyYCode); + c->funnyYCode=NULL; + if(c->funnyUVCode) free(c->funnyUVCode); + c->funnyUVCode=NULL; if(c->lumMmx2Filter) free(c->lumMmx2Filter); c->lumMmx2Filter=NULL; if(c->chrMmx2Filter) free(c->chrMmx2Filter); Index: postproc/swscale_internal.h =================================================================== RCS file: /cvsroot/mplayer/main/postproc/swscale_internal.h,v retrieving revision 1.11 diff -u -r1.11 swscale_internal.h --- postproc/swscale_internal.h 5 Oct 2004 19:11:00 -0000 1.11 +++ postproc/swscale_internal.h 24 Jan 2005 13:52:24 -0000 @@ -82,8 +82,8 @@ int vLumBufSize; int vChrBufSize; - uint8_t __attribute__((aligned(32))) funnyYCode[10000]; - uint8_t __attribute__((aligned(32))) funnyUVCode[10000]; + uint8_t *funnyYCode; + uint8_t *funnyUVCode; int32_t *lumMmx2FilterPos; int32_t *chrMmx2FilterPos; int16_t *lumMmx2Filter;