From 4fab08c94f836f24c67f75f3e44e82cdbac5ffb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Fri, 25 Oct 2013 22:46:06 +0200 Subject: Optimize pure C unscaled yuv2rgb. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aligning the tables reduces the amount of code generated on e.g. ARM as the offset constant then has few enough set bits so it can be encoded inside a single instruction instead of 2. Ideally all should be declared aligned, but the DECLARE_ALIGNED macros does not work with pointer tables, thus also reordered the tables. Signed-off-by: Reimar Döffinger --- libswscale/swscale_internal.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libswscale/swscale_internal.h') diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h index 33fdfc2771..6ad278e19b 100644 --- a/libswscale/swscale_internal.h +++ b/libswscale/swscale_internal.h @@ -362,9 +362,11 @@ typedef struct SwsContext { int dstY; ///< Last destination vertical line output from last slice. int flags; ///< Flags passed by the user to select scaler algorithm, optimizations, subsampling, etc... void *yuvTable; // pointer to the yuv->rgb table start so it can be freed() + // alignment ensures the offset can be added in a single + // instruction on e.g. ARM + DECLARE_ALIGNED(16, int, table_gV)[256 + 2*YUVRGB_TABLE_HEADROOM]; uint8_t *table_rV[256 + 2*YUVRGB_TABLE_HEADROOM]; uint8_t *table_gU[256 + 2*YUVRGB_TABLE_HEADROOM]; - int table_gV[256 + 2*YUVRGB_TABLE_HEADROOM]; uint8_t *table_bU[256 + 2*YUVRGB_TABLE_HEADROOM]; DECLARE_ALIGNED(16, int32_t, input_rgb2yuv_table)[16+40*4]; // This table can contain both C and SIMD formatted values, teh C vales are always at the XY_IDX points #define RY_IDX 0 -- cgit v1.2.3