Always call first the C init and make the optional optimization
init follow.
The unaccelerated function pointer shouldn't be set again,
likewise the other common logic should be present only on the C
init.
---
libswscale/swscale.c | 6 +--
libswscale/x86/swscale_template.c | 73 +++----------------------------------
2 files changed, 7 insertions(+), 72 deletions(-)
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 1fe9692..8d8c625 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -1255,6 +1255,8 @@ static inline void monoblack2Y(uint8_t *dst, const
uint8_t *src, long width, uin
SwsFunc ff_getSwsFunc(SwsContext *c)
{
+ sws_init_swScale_C(c);
+
#if CONFIG_RUNTIME_CPUDETECT
int flags = c->flags;
@@ -1270,7 +1272,6 @@ SwsFunc ff_getSwsFunc(SwsContext *c)
sws_init_swScale_MMX(c);
return swScale_MMX;
} else {
- sws_init_swScale_C(c);
return swScale_C;
}
@@ -1280,11 +1281,9 @@ SwsFunc ff_getSwsFunc(SwsContext *c)
sws_init_swScale_altivec(c);
return swScale_altivec;
} else {
- sws_init_swScale_C(c);
return swScale_C;
}
#endif
- sws_init_swScale_C(c);
return swScale_C;
#endif /* ARCH_X86 */
#else //CONFIG_RUNTIME_CPUDETECT
@@ -1301,7 +1300,6 @@ SwsFunc ff_getSwsFunc(SwsContext *c)
sws_init_swScale_altivec(c);
return swScale_altivec;
#else
- sws_init_swScale_C(c);
return swScale_C;
#endif
#endif //!CONFIG_RUNTIME_CPUDETECT
diff --git a/libswscale/x86/swscale_template.c
b/libswscale/x86/swscale_template.c
index e678696..3da9d3d 100644
--- a/libswscale/x86/swscale_template.c
+++ b/libswscale/x86/swscale_template.c
@@ -2918,58 +2918,33 @@ static void RENAME(sws_init_swScale)(SwsContext *c)
c->hcscale_fast = RENAME(hcscale_fast);
}
- c->chrToYV12 = NULL;
switch(srcFormat) {
case PIX_FMT_YUYV422 : c->chrToYV12 = RENAME(yuy2ToUV); break;
case PIX_FMT_UYVY422 : c->chrToYV12 = RENAME(uyvyToUV); break;
case PIX_FMT_NV12 : c->chrToYV12 = RENAME(nv12ToUV); break;
case PIX_FMT_NV21 : c->chrToYV12 = RENAME(nv21ToUV); break;
- case PIX_FMT_RGB8 :
- case PIX_FMT_BGR8 :
- case PIX_FMT_PAL8 :
- case PIX_FMT_BGR4_BYTE:
- case PIX_FMT_RGB4_BYTE: c->chrToYV12 = palToUV; break;
case PIX_FMT_YUV420P16BE:
case PIX_FMT_YUV422P16BE:
case PIX_FMT_YUV444P16BE: c->chrToYV12 = RENAME(BEToUV); break;
case PIX_FMT_YUV420P16LE:
case PIX_FMT_YUV422P16LE:
case PIX_FMT_YUV444P16LE: c->chrToYV12 = RENAME(LEToUV); break;
+ default: break;
}
if (c->chrSrcHSubSample) {
switch(srcFormat) {
- case PIX_FMT_RGB48BE:
- case PIX_FMT_RGB48LE: c->chrToYV12 = rgb48ToUV_half; break;
- case PIX_FMT_RGB32 : c->chrToYV12 = bgr32ToUV_half; break;
- case PIX_FMT_RGB32_1: c->chrToYV12 = bgr321ToUV_half; break;
case PIX_FMT_BGR24 : c->chrToYV12 = RENAME(bgr24ToUV_half); break;
- case PIX_FMT_BGR565 : c->chrToYV12 = bgr16ToUV_half; break;
- case PIX_FMT_BGR555 : c->chrToYV12 = bgr15ToUV_half; break;
- case PIX_FMT_BGR32 : c->chrToYV12 = rgb32ToUV_half; break;
- case PIX_FMT_BGR32_1: c->chrToYV12 = rgb321ToUV_half; break;
case PIX_FMT_RGB24 : c->chrToYV12 = RENAME(rgb24ToUV_half); break;
- case PIX_FMT_RGB565 : c->chrToYV12 = rgb16ToUV_half; break;
- case PIX_FMT_RGB555 : c->chrToYV12 = rgb15ToUV_half; break;
+ default: break;
}
} else {
switch(srcFormat) {
- case PIX_FMT_RGB48BE:
- case PIX_FMT_RGB48LE: c->chrToYV12 = rgb48ToUV; break;
- case PIX_FMT_RGB32 : c->chrToYV12 = bgr32ToUV; break;
- case PIX_FMT_RGB32_1: c->chrToYV12 = bgr321ToUV; break;
case PIX_FMT_BGR24 : c->chrToYV12 = RENAME(bgr24ToUV); break;
- case PIX_FMT_BGR565 : c->chrToYV12 = bgr16ToUV; break;
- case PIX_FMT_BGR555 : c->chrToYV12 = bgr15ToUV; break;
- case PIX_FMT_BGR32 : c->chrToYV12 = rgb32ToUV; break;
- case PIX_FMT_BGR32_1: c->chrToYV12 = rgb321ToUV; break;
case PIX_FMT_RGB24 : c->chrToYV12 = RENAME(rgb24ToUV); break;
- case PIX_FMT_RGB565 : c->chrToYV12 = rgb16ToUV; break;
- case PIX_FMT_RGB555 : c->chrToYV12 = rgb15ToUV; break;
+ default: break;
}
}
- c->lumToYV12 = NULL;
- c->alpToYV12 = NULL;
switch (srcFormat) {
case PIX_FMT_YUYV422 :
case PIX_FMT_YUV420P16BE:
@@ -2983,50 +2958,16 @@ static void RENAME(sws_init_swScale)(SwsContext *c)
case PIX_FMT_YUV444P16LE:
case PIX_FMT_GRAY16LE : c->lumToYV12 = RENAME(uyvyToY); break;
case PIX_FMT_BGR24 : c->lumToYV12 = RENAME(bgr24ToY); break;
- case PIX_FMT_BGR565 : c->lumToYV12 = bgr16ToY; break;
- case PIX_FMT_BGR555 : c->lumToYV12 = bgr15ToY; break;
case PIX_FMT_RGB24 : c->lumToYV12 = RENAME(rgb24ToY); break;
- case PIX_FMT_RGB565 : c->lumToYV12 = rgb16ToY; break;
- case PIX_FMT_RGB555 : c->lumToYV12 = rgb15ToY; break;
- case PIX_FMT_RGB8 :
- case PIX_FMT_BGR8 :
- case PIX_FMT_PAL8 :
- case PIX_FMT_BGR4_BYTE:
- case PIX_FMT_RGB4_BYTE: c->lumToYV12 = palToY; break;
- case PIX_FMT_MONOBLACK: c->lumToYV12 = monoblack2Y; break;
- case PIX_FMT_MONOWHITE: c->lumToYV12 = monowhite2Y; break;
- case PIX_FMT_RGB32 : c->lumToYV12 = bgr32ToY; break;
- case PIX_FMT_RGB32_1: c->lumToYV12 = bgr321ToY; break;
- case PIX_FMT_BGR32 : c->lumToYV12 = rgb32ToY; break;
- case PIX_FMT_BGR32_1: c->lumToYV12 = rgb321ToY; break;
- case PIX_FMT_RGB48BE:
- case PIX_FMT_RGB48LE: c->lumToYV12 = rgb48ToY; break;
+ default: break;
}
if (c->alpPixBuf) {
switch (srcFormat) {
- case PIX_FMT_RGB32 :
- case PIX_FMT_RGB32_1:
- case PIX_FMT_BGR32 :
- case PIX_FMT_BGR32_1: c->alpToYV12 = abgrToA; break;
case PIX_FMT_Y400A : c->alpToYV12 = RENAME(yuy2ToY); break;
+ default: break;
}
}
- switch (srcFormat) {
- case PIX_FMT_Y400A :
- c->alpSrcOffset = 1;
- break;
- case PIX_FMT_RGB32 :
- case PIX_FMT_BGR32 :
- c->alpSrcOffset = 3;
- break;
- case PIX_FMT_RGB48LE:
- c->lumSrcOffset = 1;
- c->chrSrcOffset = 1;
- c->alpSrcOffset = 1;
- break;
- }
-
if (c->srcRange != c->dstRange && !isAnyRGB(c->dstFormat)) {
if (c->srcRange) {
c->lumConvertRange = RENAME(lumRangeFromJpeg);
@@ -3036,8 +2977,4 @@ static void RENAME(sws_init_swScale)(SwsContext *c)
c->chrConvertRange = RENAME(chrRangeToJpeg);
}
}
-
- if (!(isGray(srcFormat) || isGray(c->dstFormat) ||
- srcFormat == PIX_FMT_MONOBLACK || srcFormat == PIX_FMT_MONOWHITE))
- c->needs_hcscale = 1;
}
--
1.7.4.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel