You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	swscale: split hScale() function pointer into h[cy]Scale().
This allows using more specific implementations for chroma/luma, e.g. we can make assumptions on filterSize being constant, thus avoiding that test at runtime.
This commit is contained in:
		| @@ -400,7 +400,7 @@ void ff_sws_init_swScale_altivec(SwsContext *c) | ||||
|         return; | ||||
|  | ||||
|     if (c->srcBpc == 8 && c->dstBpc <= 10) { | ||||
|         c->hScale       = hScale_altivec_real; | ||||
|         c->hyScale = c->hcScale = hScale_altivec_real; | ||||
|     } | ||||
|     if (!is16BPS(dstFormat) && !is9_OR_10BPS(dstFormat) && | ||||
|         dstFormat != PIX_FMT_NV12 && dstFormat != PIX_FMT_NV21 && | ||||
|   | ||||
| @@ -2087,7 +2087,7 @@ static av_always_inline void hyscale(SwsContext *c, int16_t *dst, int dstWidth, | ||||
|     } | ||||
|  | ||||
|     if (!c->hyscale_fast) { | ||||
|         c->hScale(c, dst, dstWidth, src, hLumFilter, hLumFilterPos, hLumFilterSize); | ||||
|         c->hyScale(c, dst, dstWidth, src, hLumFilter, hLumFilterPos, hLumFilterSize); | ||||
|     } else { // fast bilinear upscale / crap downscale | ||||
|         c->hyscale_fast(c, dst, dstWidth, src, srcW, xInc); | ||||
|     } | ||||
| @@ -2125,8 +2125,8 @@ static av_always_inline void hcscale(SwsContext *c, int16_t *dst1, int16_t *dst2 | ||||
|     } | ||||
|  | ||||
|     if (!c->hcscale_fast) { | ||||
|         c->hScale(c, dst1, dstWidth, src1, hChrFilter, hChrFilterPos, hChrFilterSize); | ||||
|         c->hScale(c, dst2, dstWidth, src2, hChrFilter, hChrFilterPos, hChrFilterSize); | ||||
|         c->hcScale(c, dst1, dstWidth, src1, hChrFilter, hChrFilterPos, hChrFilterSize); | ||||
|         c->hcScale(c, dst2, dstWidth, src2, hChrFilter, hChrFilterPos, hChrFilterSize); | ||||
|     } else { // fast bilinear upscale / crap downscale | ||||
|         c->hcscale_fast(c, dst1, dst2, dstWidth, src1, src2, srcW, xInc); | ||||
|     } | ||||
| @@ -2789,16 +2789,16 @@ static av_cold void sws_init_swScale_c(SwsContext *c) | ||||
|  | ||||
|     if (c->srcBpc == 8) { | ||||
|         if (c->dstBpc <= 10) { | ||||
|             c->hScale       = hScale8To15_c; | ||||
|             c->hyScale = c->hcScale = hScale8To15_c; | ||||
|             if (c->flags & SWS_FAST_BILINEAR) { | ||||
|                 c->hyscale_fast = hyscale_fast_c; | ||||
|                 c->hcscale_fast = hcscale_fast_c; | ||||
|             } | ||||
|         } else { | ||||
|             c->hScale = hScale8To19_c; | ||||
|             c->hyScale = c->hcScale = hScale8To19_c; | ||||
|         } | ||||
|     } else { | ||||
|         c->hScale = c->dstBpc > 10 ? hScale16To19_c : hScale16To15_c; | ||||
|         c->hyScale = c->hcScale = c->dstBpc > 10 ? hScale16To19_c : hScale16To15_c; | ||||
|     } | ||||
|  | ||||
|     if (c->srcRange != c->dstRange && !isAnyRGB(c->dstFormat)) { | ||||
|   | ||||
| @@ -481,9 +481,14 @@ typedef struct SwsContext { | ||||
|      *                   (and input coefficients thus padded with zeroes) | ||||
|      *                   to simplify creating SIMD code. | ||||
|      */ | ||||
|     void (*hScale)(struct SwsContext *c, int16_t *dst, int dstW, const uint8_t *src, | ||||
|                    const int16_t *filter, const int16_t *filterPos, | ||||
|                    int filterSize); | ||||
|     /** @{ */ | ||||
|     void (*hyScale)(struct SwsContext *c, int16_t *dst, int dstW, const uint8_t *src, | ||||
|                     const int16_t *filter, const int16_t *filterPos, | ||||
|                     int filterSize); | ||||
|     void (*hcScale)(struct SwsContext *c, int16_t *dst, int dstW, const uint8_t *src, | ||||
|                     const int16_t *filter, const int16_t *filterPos, | ||||
|                     int filterSize); | ||||
|     /** @} */ | ||||
|  | ||||
|     void (*lumConvertRange)(int16_t *dst, int width); ///< Color range conversion function for luma plane if needed. | ||||
|     void (*chrConvertRange)(int16_t *dst1, int16_t *dst2, int width); ///< Color range conversion function for chroma planes if needed. | ||||
|   | ||||
| @@ -2318,7 +2318,7 @@ static av_cold void RENAME(sws_init_swScale)(SwsContext *c) | ||||
|  | ||||
|     if (c->srcBpc == 8 && c->dstBpc <= 10) { | ||||
| #if !COMPILE_TEMPLATE_MMX2 | ||||
|     c->hScale       = RENAME(hScale      ); | ||||
|     c->hyScale = c->hcScale = RENAME(hScale      ); | ||||
| #endif /* !COMPILE_TEMPLATE_MMX2 */ | ||||
|  | ||||
|     // Use the new MMX scaler if the MMX2 one can't be used (it is faster than the x86 ASM one). | ||||
|   | ||||
		Reference in New Issue
	
	Block a user