mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
x86: mmx2 ---> mmxext in variable names
This commit is contained in:
parent
652f518594
commit
a65bdceb06
@ -307,12 +307,12 @@ typedef struct SwsContext {
|
||||
int vChrFilterSize; ///< Vertical filter size for chroma pixels.
|
||||
//@}
|
||||
|
||||
int lumMmx2FilterCodeSize; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code size for luma/alpha planes.
|
||||
int chrMmx2FilterCodeSize; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code size for chroma planes.
|
||||
uint8_t *lumMmx2FilterCode; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code for luma/alpha planes.
|
||||
uint8_t *chrMmx2FilterCode; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code for chroma planes.
|
||||
int lumMmxextFilterCodeSize; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code size for luma/alpha planes.
|
||||
int chrMmxextFilterCodeSize; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code size for chroma planes.
|
||||
uint8_t *lumMmxextFilterCode; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code for luma/alpha planes.
|
||||
uint8_t *chrMmxextFilterCode; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code for chroma planes.
|
||||
|
||||
int canMMX2BeUsed;
|
||||
int canMMXEXTBeUsed;
|
||||
|
||||
int dstY; ///< Last destination vertical line output from last slice.
|
||||
int flags; ///< Flags passed by the user to select scaler algorithm, optimizations, subsampling, etc...
|
||||
|
@ -1001,18 +1001,18 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
|
||||
(FFALIGN(srcW, 16) * 2 * FFALIGN(c->srcBpc, 8) >> 3) + 16,
|
||||
fail);
|
||||
if (INLINE_MMXEXT(cpu_flags) && c->srcBpc == 8 && c->dstBpc <= 10) {
|
||||
c->canMMX2BeUsed = (dstW >= srcW && (dstW & 31) == 0 &&
|
||||
(srcW & 15) == 0) ? 1 : 0;
|
||||
if (!c->canMMX2BeUsed && dstW >= srcW && (srcW & 15) == 0
|
||||
c->canMMXEXTBeUsed = (dstW >= srcW && (dstW & 31) == 0 &&
|
||||
(srcW & 15) == 0) ? 1 : 0;
|
||||
if (!c->canMMXEXTBeUsed && dstW >= srcW && (srcW & 15) == 0
|
||||
&& (flags & SWS_FAST_BILINEAR)) {
|
||||
if (flags & SWS_PRINT_INFO)
|
||||
av_log(c, AV_LOG_INFO,
|
||||
"output width is not a multiple of 32 -> no MMXEXT scaler\n");
|
||||
}
|
||||
if (usesHFilter)
|
||||
c->canMMX2BeUsed = 0;
|
||||
c->canMMXEXTBeUsed = 0;
|
||||
} else
|
||||
c->canMMX2BeUsed = 0;
|
||||
c->canMMXEXTBeUsed = 0;
|
||||
|
||||
c->chrXInc = (((int64_t)c->chrSrcW << 16) + (c->chrDstW >> 1)) / c->chrDstW;
|
||||
c->chrYInc = (((int64_t)c->chrSrcH << 16) + (c->chrDstH >> 1)) / c->chrDstH;
|
||||
@ -1025,7 +1025,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
|
||||
* correct variant would be like the vertical one, but that would require
|
||||
* some special code for the first and last pixel */
|
||||
if (flags & SWS_FAST_BILINEAR) {
|
||||
if (c->canMMX2BeUsed) {
|
||||
if (c->canMMXEXTBeUsed) {
|
||||
c->lumXInc += 20;
|
||||
c->chrXInc += 20;
|
||||
}
|
||||
@ -1042,38 +1042,50 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
|
||||
{
|
||||
#if HAVE_MMXEXT_INLINE
|
||||
// can't downscale !!!
|
||||
if (c->canMMX2BeUsed && (flags & SWS_FAST_BILINEAR)) {
|
||||
c->lumMmx2FilterCodeSize = initMMX2HScaler(dstW, c->lumXInc, NULL,
|
||||
NULL, NULL, 8);
|
||||
c->chrMmx2FilterCodeSize = initMMX2HScaler(c->chrDstW, c->chrXInc,
|
||||
NULL, NULL, NULL, 4);
|
||||
if (c->canMMXEXTBeUsed && (flags & SWS_FAST_BILINEAR)) {
|
||||
c->lumMmxextFilterCodeSize = initMMX2HScaler(dstW, c->lumXInc, NULL,
|
||||
NULL, NULL, 8);
|
||||
c->chrMmxextFilterCodeSize = initMMX2HScaler(c->chrDstW, c->chrXInc,
|
||||
NULL, NULL, NULL, 4);
|
||||
|
||||
#if USE_MMAP
|
||||
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);
|
||||
c->lumMmxextFilterCode = mmap(NULL, c->lumMmxextFilterCodeSize,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS,
|
||||
-1, 0);
|
||||
c->chrMmxextFilterCode = mmap(NULL, c->chrMmxextFilterCodeSize,
|
||||
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);
|
||||
c->lumMmxextFilterCode = VirtualAlloc(NULL,
|
||||
c->lumMmxextFilterCodeSize,
|
||||
MEM_COMMIT,
|
||||
PAGE_EXECUTE_READWRITE);
|
||||
c->chrMmxextFilterCode = VirtualAlloc(NULL,
|
||||
c->chrMmxextFilterCodeSize,
|
||||
MEM_COMMIT,
|
||||
PAGE_EXECUTE_READWRITE);
|
||||
#else
|
||||
c->lumMmx2FilterCode = av_malloc(c->lumMmx2FilterCodeSize);
|
||||
c->chrMmx2FilterCode = av_malloc(c->chrMmx2FilterCodeSize);
|
||||
c->lumMmxextFilterCode = av_malloc(c->lumMmxextFilterCodeSize);
|
||||
c->chrMmxextFilterCode = av_malloc(c->chrMmxextFilterCodeSize);
|
||||
#endif
|
||||
|
||||
if (!c->lumMmx2FilterCode || !c->chrMmx2FilterCode)
|
||||
if (!c->lumMmxextFilterCode || !c->chrMmxextFilterCode)
|
||||
return AVERROR(ENOMEM);
|
||||
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);
|
||||
FF_ALLOCZ_OR_GOTO(c, c->hLumFilterPos, (dstW / 2 / 8 + 8) * sizeof(int32_t), fail);
|
||||
FF_ALLOCZ_OR_GOTO(c, c->hChrFilterPos, (c->chrDstW / 2 / 4 + 8) * sizeof(int32_t), fail);
|
||||
|
||||
initMMX2HScaler(dstW, c->lumXInc, c->lumMmx2FilterCode,
|
||||
initMMX2HScaler(dstW, c->lumXInc, c->lumMmxextFilterCode,
|
||||
c->hLumFilter, c->hLumFilterPos, 8);
|
||||
initMMX2HScaler(c->chrDstW, c->chrXInc, c->chrMmx2FilterCode,
|
||||
initMMX2HScaler(c->chrDstW, c->chrXInc, c->chrMmxextFilterCode,
|
||||
c->hChrFilter, c->hChrFilterPos, 4);
|
||||
|
||||
#if USE_MMAP
|
||||
mprotect(c->lumMmx2FilterCode, c->lumMmx2FilterCodeSize, PROT_EXEC | PROT_READ);
|
||||
mprotect(c->chrMmx2FilterCode, c->chrMmx2FilterCodeSize, PROT_EXEC | PROT_READ);
|
||||
mprotect(c->lumMmxextFilterCode, c->lumMmxextFilterCodeSize, PROT_EXEC | PROT_READ);
|
||||
mprotect(c->chrMmxextFilterCode, c->chrMmxextFilterCodeSize, PROT_EXEC | PROT_READ);
|
||||
#endif
|
||||
} else
|
||||
#endif /* HAVE_MMXEXT_INLINE */
|
||||
@ -1651,21 +1663,21 @@ void sws_freeContext(SwsContext *c)
|
||||
|
||||
#if HAVE_MMX_INLINE
|
||||
#if USE_MMAP
|
||||
if (c->lumMmx2FilterCode)
|
||||
munmap(c->lumMmx2FilterCode, c->lumMmx2FilterCodeSize);
|
||||
if (c->chrMmx2FilterCode)
|
||||
munmap(c->chrMmx2FilterCode, c->chrMmx2FilterCodeSize);
|
||||
if (c->lumMmxextFilterCode)
|
||||
munmap(c->lumMmxextFilterCode, c->lumMmxextFilterCodeSize);
|
||||
if (c->chrMmxextFilterCode)
|
||||
munmap(c->chrMmxextFilterCode, c->chrMmxextFilterCodeSize);
|
||||
#elif HAVE_VIRTUALALLOC
|
||||
if (c->lumMmx2FilterCode)
|
||||
VirtualFree(c->lumMmx2FilterCode, 0, MEM_RELEASE);
|
||||
if (c->chrMmx2FilterCode)
|
||||
VirtualFree(c->chrMmx2FilterCode, 0, MEM_RELEASE);
|
||||
if (c->lumMmxextFilterCode)
|
||||
VirtualFree(c->lumMmxextFilterCode, 0, MEM_RELEASE);
|
||||
if (c->chrMmxextFilterCode)
|
||||
VirtualFree(c->chrMmxextFilterCode, 0, MEM_RELEASE);
|
||||
#else
|
||||
av_free(c->lumMmx2FilterCode);
|
||||
av_free(c->chrMmx2FilterCode);
|
||||
av_free(c->lumMmxextFilterCode);
|
||||
av_free(c->chrMmxextFilterCode);
|
||||
#endif
|
||||
c->lumMmx2FilterCode = NULL;
|
||||
c->chrMmx2FilterCode = NULL;
|
||||
c->lumMmxextFilterCode = NULL;
|
||||
c->chrMmxextFilterCode = NULL;
|
||||
#endif /* HAVE_MMX_INLINE */
|
||||
|
||||
av_freep(&c->yuvTable);
|
||||
|
@ -1378,7 +1378,7 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
|
||||
{
|
||||
int32_t *filterPos = c->hLumFilterPos;
|
||||
int16_t *filter = c->hLumFilter;
|
||||
void *mmx2FilterCode= c->lumMmx2FilterCode;
|
||||
void *mmxextFilterCode = c->lumMmxextFilterCode;
|
||||
int i;
|
||||
#if defined(PIC)
|
||||
uint64_t ebxsave;
|
||||
@ -1451,7 +1451,7 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
|
||||
#endif
|
||||
#endif
|
||||
:: "m" (src), "m" (dst), "m" (filter), "m" (filterPos),
|
||||
"m" (mmx2FilterCode)
|
||||
"m" (mmxextFilterCode)
|
||||
#if defined(PIC)
|
||||
,"m" (ebxsave)
|
||||
#endif
|
||||
@ -1474,7 +1474,7 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
|
||||
{
|
||||
int32_t *filterPos = c->hChrFilterPos;
|
||||
int16_t *filter = c->hChrFilter;
|
||||
void *mmx2FilterCode= c->chrMmx2FilterCode;
|
||||
void *mmxextFilterCode = c->chrMmxextFilterCode;
|
||||
int i;
|
||||
#if defined(PIC)
|
||||
DECLARE_ALIGNED(8, uint64_t, ebxsave);
|
||||
@ -1535,7 +1535,7 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
|
||||
#endif
|
||||
#endif
|
||||
:: "m" (src1), "m" (dst1), "m" (filter), "m" (filterPos),
|
||||
"m" (mmx2FilterCode), "m" (src2), "m"(dst2)
|
||||
"m" (mmxextFilterCode), "m" (src2), "m"(dst2)
|
||||
#if defined(PIC)
|
||||
,"m" (ebxsave)
|
||||
#endif
|
||||
@ -1617,8 +1617,7 @@ static av_cold void RENAME(sws_init_swScale)(SwsContext *c)
|
||||
if (c->srcBpc == 8 && c->dstBpc <= 10) {
|
||||
// Use the new MMX scaler if the MMXEXT one can't be used (it is faster than the x86 ASM one).
|
||||
#if COMPILE_TEMPLATE_MMXEXT
|
||||
if (c->flags & SWS_FAST_BILINEAR && c->canMMX2BeUsed)
|
||||
{
|
||||
if (c->flags & SWS_FAST_BILINEAR && c->canMMXEXTBeUsed) {
|
||||
c->hyscale_fast = RENAME(hyscale_fast);
|
||||
c->hcscale_fast = RENAME(hcscale_fast);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user