Skip to content
Snippets Groups Projects
Commit 38d5c282 authored by Aurelien Jacobs's avatar Aurelien Jacobs
Browse files

makes funnyCode pages executable (for CPU with NX bit)

Originally committed as revision 14626 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
parent a3a5f4d6
No related branches found
No related tags found
No related merge requests found
......@@ -61,6 +61,9 @@ untested special converters
#else
#include <stdlib.h>
#endif
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
#include "swscale.h"
#include "swscale_internal.h"
#include "../cpudetect.h"
......@@ -1999,6 +2002,15 @@ SwsContext *sws_getContext(int srcW, int srcH, int origSrcFormat, int dstW, int
// can't downscale !!!
if(c->canMMX2BeUsed && (flags & SWS_FAST_BILINEAR))
{
#define MAX_FUNNY_CODE_SIZE 10000
#ifdef HAVE_SYS_MMAN_H
c->funnyYCode = (uint8_t*)mmap(NULL, MAX_FUNNY_CODE_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
c->funnyUVCode = (uint8_t*)mmap(NULL, MAX_FUNNY_CODE_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
#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 +2568,16 @@ void sws_freeContext(SwsContext *c){
if(c->hChrFilterPos) free(c->hChrFilterPos);
c->hChrFilterPos = NULL;
#ifdef HAVE_SYS_MMAN_H
if(c->funnyYCode) munmap(c->funnyYCode, MAX_FUNNY_CODE_SIZE);
if(c->funnyUVCode) munmap(c->funnyUVCode, MAX_FUNNY_CODE_SIZE);
#else
if(c->funnyYCode) free(c->funnyYCode);
if(c->funnyUVCode) free(c->funnyUVCode);
#endif
c->funnyYCode=NULL;
c->funnyUVCode=NULL;
if(c->lumMmx2Filter) free(c->lumMmx2Filter);
c->lumMmx2Filter=NULL;
if(c->chrMmx2Filter) free(c->chrMmx2Filter);
......
......@@ -82,8 +82,8 @@ typedef struct SwsContext{
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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment