• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * jdmerge-neon.c - merged upsampling/color conversion (Arm Neon)
3  *
4  * Copyright (C) 2020, Arm Limited.  All Rights Reserved.
5  *
6  * This software is provided 'as-is', without any express or implied
7  * warranty.  In no event will the authors be held liable for any damages
8  * arising from the use of this software.
9  *
10  * Permission is granted to anyone to use this software for any purpose,
11  * including commercial applications, and to alter it and redistribute it
12  * freely, subject to the following restrictions:
13  *
14  * 1. The origin of this software must not be misrepresented; you must not
15  *    claim that you wrote the original software. If you use this software
16  *    in a product, an acknowledgment in the product documentation would be
17  *    appreciated but is not required.
18  * 2. Altered source versions must be plainly marked as such, and must not be
19  *    misrepresented as being the original software.
20  * 3. This notice may not be removed or altered from any source distribution.
21  */
22 
23 #define JPEG_INTERNALS
24 #include "jconfigint.h"
25 #include "../../jinclude.h"
26 #include "../../jpeglib.h"
27 #include "../../jsimd.h"
28 #include "../../jdct.h"
29 #include "../../jsimddct.h"
30 #include "../jsimd.h"
31 #include "align.h"
32 
33 #include <arm_neon.h>
34 
35 
36 /* YCbCr -> RGB conversion constants */
37 
38 #define F_0_344  11277  /* 0.3441467 = 11277 * 2^-15 */
39 #define F_0_714  23401  /* 0.7141418 = 23401 * 2^-15 */
40 #define F_1_402  22971  /* 1.4020386 = 22971 * 2^-14 */
41 #define F_1_772  29033  /* 1.7720337 = 29033 * 2^-14 */
42 
43 ALIGN(16) static const int16_t jsimd_ycc_rgb_convert_neon_consts[] = {
44   -F_0_344, F_0_714, F_1_402, F_1_772
45 };
46 
47 
48 /* Include inline routines for colorspace extensions. */
49 
50 #include "jdmrgext-neon.c"
51 #undef RGB_RED
52 #undef RGB_GREEN
53 #undef RGB_BLUE
54 #undef RGB_PIXELSIZE
55 
56 #define RGB_RED  EXT_RGB_RED
57 #define RGB_GREEN  EXT_RGB_GREEN
58 #define RGB_BLUE  EXT_RGB_BLUE
59 #define RGB_PIXELSIZE  EXT_RGB_PIXELSIZE
60 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extrgb_merged_upsample_neon
61 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extrgb_merged_upsample_neon
62 #include "jdmrgext-neon.c"
63 #undef RGB_RED
64 #undef RGB_GREEN
65 #undef RGB_BLUE
66 #undef RGB_PIXELSIZE
67 #undef jsimd_h2v1_merged_upsample_neon
68 #undef jsimd_h2v2_merged_upsample_neon
69 
70 #define RGB_RED  EXT_RGBX_RED
71 #define RGB_GREEN  EXT_RGBX_GREEN
72 #define RGB_BLUE  EXT_RGBX_BLUE
73 #define RGB_ALPHA  3
74 #define RGB_PIXELSIZE  EXT_RGBX_PIXELSIZE
75 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extrgbx_merged_upsample_neon
76 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extrgbx_merged_upsample_neon
77 #include "jdmrgext-neon.c"
78 #undef RGB_RED
79 #undef RGB_GREEN
80 #undef RGB_BLUE
81 #undef RGB_ALPHA
82 #undef RGB_PIXELSIZE
83 #undef jsimd_h2v1_merged_upsample_neon
84 #undef jsimd_h2v2_merged_upsample_neon
85 
86 #define RGB_RED  EXT_BGR_RED
87 #define RGB_GREEN  EXT_BGR_GREEN
88 #define RGB_BLUE  EXT_BGR_BLUE
89 #define RGB_PIXELSIZE  EXT_BGR_PIXELSIZE
90 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extbgr_merged_upsample_neon
91 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extbgr_merged_upsample_neon
92 #include "jdmrgext-neon.c"
93 #undef RGB_RED
94 #undef RGB_GREEN
95 #undef RGB_BLUE
96 #undef RGB_PIXELSIZE
97 #undef jsimd_h2v1_merged_upsample_neon
98 #undef jsimd_h2v2_merged_upsample_neon
99 
100 #define RGB_RED  EXT_BGRX_RED
101 #define RGB_GREEN  EXT_BGRX_GREEN
102 #define RGB_BLUE  EXT_BGRX_BLUE
103 #define RGB_ALPHA  3
104 #define RGB_PIXELSIZE  EXT_BGRX_PIXELSIZE
105 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extbgrx_merged_upsample_neon
106 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extbgrx_merged_upsample_neon
107 #include "jdmrgext-neon.c"
108 #undef RGB_RED
109 #undef RGB_GREEN
110 #undef RGB_BLUE
111 #undef RGB_ALPHA
112 #undef RGB_PIXELSIZE
113 #undef jsimd_h2v1_merged_upsample_neon
114 #undef jsimd_h2v2_merged_upsample_neon
115 
116 #define RGB_RED  EXT_XBGR_RED
117 #define RGB_GREEN  EXT_XBGR_GREEN
118 #define RGB_BLUE  EXT_XBGR_BLUE
119 #define RGB_ALPHA  0
120 #define RGB_PIXELSIZE  EXT_XBGR_PIXELSIZE
121 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extxbgr_merged_upsample_neon
122 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extxbgr_merged_upsample_neon
123 #include "jdmrgext-neon.c"
124 #undef RGB_RED
125 #undef RGB_GREEN
126 #undef RGB_BLUE
127 #undef RGB_ALPHA
128 #undef RGB_PIXELSIZE
129 #undef jsimd_h2v1_merged_upsample_neon
130 #undef jsimd_h2v2_merged_upsample_neon
131 
132 #define RGB_RED  EXT_XRGB_RED
133 #define RGB_GREEN  EXT_XRGB_GREEN
134 #define RGB_BLUE  EXT_XRGB_BLUE
135 #define RGB_ALPHA  0
136 #define RGB_PIXELSIZE  EXT_XRGB_PIXELSIZE
137 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extxrgb_merged_upsample_neon
138 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extxrgb_merged_upsample_neon
139 #include "jdmrgext-neon.c"
140 #undef RGB_RED
141 #undef RGB_GREEN
142 #undef RGB_BLUE
143 #undef RGB_ALPHA
144 #undef RGB_PIXELSIZE
145 #undef jsimd_h2v1_merged_upsample_neon
146