ffmpeg and mmap

Andriy Gapon avg at freebsd.org
Fri Dec 17 17:02:23 UTC 2010


on 17/12/2010 19:01 Andriy Gapon said the following:
> 
> Martin,
> 
> apologies - my report was incomplete.  I really meant to include the following new
> information at that time, but somehow I forgot about it and the
> _BSD_VISIBLE/POSIX_C_SOURCE discussion that followed distracted me.

And a more formal patch:
--- libswscale/utils.c.orig	2010-12-17 18:58:26.307218801 +0200
+++ libswscale/utils.c	2010-12-17 19:00:13.409221287 +0200
@@ -955,8 +955,8 @@
             c->chrMmx2FilterCodeSize = initMMX2HScaler(c->chrDstW, c->chrXInc,
NULL, NULL, NULL, 4);

 #ifdef MAP_ANONYMOUS
-            c->lumMmx2FilterCode = mmap(NULL, c->lumMmx2FilterCodeSize, PROT_READ
| PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
-            c->chrMmx2FilterCode = mmap(NULL, c->chrMmx2FilterCodeSize, PROT_READ
| PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
+            c->lumMmx2FilterCode = mmap(NULL, c->lumMmx2FilterCodeSize, PROT_READ
| PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+            c->chrMmx2FilterCode = mmap(NULL, c->chrMmx2FilterCodeSize, PROT_READ
| PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
 #elif HAVE_VIRTUALALLOC
             c->lumMmx2FilterCode = VirtualAlloc(NULL, c->lumMmx2FilterCodeSize,
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
             c->chrMmx2FilterCode = VirtualAlloc(NULL, c->chrMmx2FilterCodeSize,
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
@@ -965,7 +965,11 @@
             c->chrMmx2FilterCode = av_malloc(c->chrMmx2FilterCodeSize);
 #endif

+#ifdef MAP_ANONYMOUS
+            if (c->lumMmx2FilterCode == MAP_FAILED || c->chrMmx2FilterCode ==
MAP_FAILED)
+#else
             if (!c->lumMmx2FilterCode || !c->chrMmx2FilterCode)
+#endif
                 goto fail;
             FF_ALLOCZ_OR_GOTO(c, c->hLumFilter   , (dstW
/8+8)*sizeof(int16_t), fail);
             FF_ALLOCZ_OR_GOTO(c, c->hChrFilter   , (c->chrDstW
/4+8)*sizeof(int16_t), fail);


-- 
Andriy Gapon


More information about the freebsd-multimedia mailing list