/src/libde265/libde265/acceleration.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * H.265 video codec. |
3 | | * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> |
4 | | * |
5 | | * This file is part of libde265. |
6 | | * |
7 | | * libde265 is free software: you can redistribute it and/or modify |
8 | | * it under the terms of the GNU Lesser General Public License as |
9 | | * published by the Free Software Foundation, either version 3 of |
10 | | * the License, or (at your option) any later version. |
11 | | * |
12 | | * libde265 is distributed in the hope that it will be useful, |
13 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | | * GNU Lesser General Public License for more details. |
16 | | * |
17 | | * You should have received a copy of the GNU Lesser General Public License |
18 | | * along with libde265. If not, see <http://www.gnu.org/licenses/>. |
19 | | */ |
20 | | |
21 | | #ifndef DE265_ACCELERATION_H |
22 | | #define DE265_ACCELERATION_H |
23 | | |
24 | | #include <stddef.h> |
25 | | #include <stdint.h> |
26 | | #include <assert.h> |
27 | | |
28 | | |
29 | | struct acceleration_functions |
30 | | { |
31 | | void (*put_weighted_pred_avg_8)(uint8_t *_dst, ptrdiff_t dststride, |
32 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
33 | | int width, int height); |
34 | | |
35 | | void (*put_unweighted_pred_8)(uint8_t *_dst, ptrdiff_t dststride, |
36 | | const int16_t *src, ptrdiff_t srcstride, |
37 | | int width, int height); |
38 | | |
39 | | void (*put_weighted_pred_8)(uint8_t *_dst, ptrdiff_t dststride, |
40 | | const int16_t *src, ptrdiff_t srcstride, |
41 | | int width, int height, |
42 | | int w,int o,int log2WD); |
43 | | void (*put_weighted_bipred_8)(uint8_t *_dst, ptrdiff_t dststride, |
44 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
45 | | int width, int height, |
46 | | int w1,int o1, int w2,int o2, int log2WD); |
47 | | |
48 | | |
49 | | void (*put_weighted_pred_avg_16)(uint16_t *_dst, ptrdiff_t dststride, |
50 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
51 | | int width, int height, int bit_depth); |
52 | | |
53 | | void (*put_unweighted_pred_16)(uint16_t *_dst, ptrdiff_t dststride, |
54 | | const int16_t *src, ptrdiff_t srcstride, |
55 | | int width, int height, int bit_depth); |
56 | | |
57 | | void (*put_weighted_pred_16)(uint16_t *_dst, ptrdiff_t dststride, |
58 | | const int16_t *src, ptrdiff_t srcstride, |
59 | | int width, int height, |
60 | | int w,int o,int log2WD, int bit_depth); |
61 | | void (*put_weighted_bipred_16)(uint16_t *_dst, ptrdiff_t dststride, |
62 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
63 | | int width, int height, |
64 | | int w1,int o1, int w2,int o2, int log2WD, int bit_depth); |
65 | | |
66 | | |
67 | | void put_weighted_pred_avg(void *_dst, ptrdiff_t dststride, |
68 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
69 | | int width, int height, int bit_depth) const; |
70 | | |
71 | | void put_unweighted_pred(void *_dst, ptrdiff_t dststride, |
72 | | const int16_t *src, ptrdiff_t srcstride, |
73 | | int width, int height, int bit_depth) const; |
74 | | |
75 | | void put_weighted_pred(void *_dst, ptrdiff_t dststride, |
76 | | const int16_t *src, ptrdiff_t srcstride, |
77 | | int width, int height, |
78 | | int w,int o,int log2WD, int bit_depth) const; |
79 | | void put_weighted_bipred(void *_dst, ptrdiff_t dststride, |
80 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
81 | | int width, int height, |
82 | | int w1,int o1, int w2,int o2, int log2WD, int bit_depth) const; |
83 | | |
84 | | |
85 | | |
86 | | |
87 | | void (*put_hevc_epel_8)(int16_t *dst, ptrdiff_t dststride, |
88 | | const uint8_t *src, ptrdiff_t srcstride, int width, int height, |
89 | | int mx, int my, int16_t* mcbuffer); |
90 | | void (*put_hevc_epel_h_8)(int16_t *dst, ptrdiff_t dststride, |
91 | | const uint8_t *src, ptrdiff_t srcstride, int width, int height, |
92 | | int mx, int my, int16_t* mcbuffer, int bit_depth); |
93 | | void (*put_hevc_epel_v_8)(int16_t *dst, ptrdiff_t dststride, |
94 | | const uint8_t *src, ptrdiff_t srcstride, int width, int height, |
95 | | int mx, int my, int16_t* mcbuffer, int bit_depth); |
96 | | void (*put_hevc_epel_hv_8)(int16_t *dst, ptrdiff_t dststride, |
97 | | const uint8_t *src, ptrdiff_t srcstride, int width, int height, |
98 | | int mx, int my, int16_t* mcbuffer, int bit_depth); |
99 | | |
100 | | void (*put_hevc_qpel_8[4][4])(int16_t *dst, ptrdiff_t dststride, |
101 | | const uint8_t *src, ptrdiff_t srcstride, int width, int height, |
102 | | int16_t* mcbuffer); |
103 | | |
104 | | |
105 | | void (*put_hevc_epel_16)(int16_t *dst, ptrdiff_t dststride, |
106 | | const uint16_t *src, ptrdiff_t srcstride, int width, int height, |
107 | | int mx, int my, int16_t* mcbuffer, int bit_depth); |
108 | | void (*put_hevc_epel_h_16)(int16_t *dst, ptrdiff_t dststride, |
109 | | const uint16_t *src, ptrdiff_t srcstride, int width, int height, |
110 | | int mx, int my, int16_t* mcbuffer, int bit_depth); |
111 | | void (*put_hevc_epel_v_16)(int16_t *dst, ptrdiff_t dststride, |
112 | | const uint16_t *src, ptrdiff_t srcstride, int width, int height, |
113 | | int mx, int my, int16_t* mcbuffer, int bit_depth); |
114 | | void (*put_hevc_epel_hv_16)(int16_t *dst, ptrdiff_t dststride, |
115 | | const uint16_t *src, ptrdiff_t srcstride, int width, int height, |
116 | | int mx, int my, int16_t* mcbuffer, int bit_depth); |
117 | | |
118 | | void (*put_hevc_qpel_16[4][4])(int16_t *dst, ptrdiff_t dststride, |
119 | | const uint16_t *src, ptrdiff_t srcstride, int width, int height, |
120 | | int16_t* mcbuffer, int bit_depth); |
121 | | |
122 | | |
123 | | void put_hevc_epel(int16_t *dst, ptrdiff_t dststride, |
124 | | const void *src, ptrdiff_t srcstride, int width, int height, |
125 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const; |
126 | | void put_hevc_epel_h(int16_t *dst, ptrdiff_t dststride, |
127 | | const void *src, ptrdiff_t srcstride, int width, int height, |
128 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const; |
129 | | void put_hevc_epel_v(int16_t *dst, ptrdiff_t dststride, |
130 | | const void *src, ptrdiff_t srcstride, int width, int height, |
131 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const; |
132 | | void put_hevc_epel_hv(int16_t *dst, ptrdiff_t dststride, |
133 | | const void *src, ptrdiff_t srcstride, int width, int height, |
134 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const; |
135 | | |
136 | | void put_hevc_qpel(int16_t *dst, ptrdiff_t dststride, |
137 | | const void *src, ptrdiff_t srcstride, int width, int height, |
138 | | int16_t* mcbuffer, int dX,int dY, int bit_depth) const; |
139 | | |
140 | | |
141 | | // --- inverse transforms --- |
142 | | |
143 | | void (*transform_bypass)(int32_t *residual, const int16_t *coeffs, int nT); |
144 | | void (*transform_bypass_rdpcm_v)(int32_t *r, const int16_t *coeffs, int nT); |
145 | | void (*transform_bypass_rdpcm_h)(int32_t *r, const int16_t *coeffs, int nT); |
146 | | |
147 | | // 8 bit |
148 | | |
149 | | void (*transform_skip_8)(uint8_t *_dst, const int16_t *coeffs, ptrdiff_t _stride); // no transform |
150 | | void (*transform_skip_rdpcm_v_8)(uint8_t *_dst, const int16_t *coeffs, int nT, ptrdiff_t _stride); |
151 | | void (*transform_skip_rdpcm_h_8)(uint8_t *_dst, const int16_t *coeffs, int nT, ptrdiff_t _stride); |
152 | | void (*transform_4x4_dst_add_8)(uint8_t *dst, const int16_t *coeffs, ptrdiff_t stride); // iDST |
153 | | void (*transform_add_8[4])(uint8_t *dst, const int16_t *coeffs, ptrdiff_t stride); // iDCT |
154 | | |
155 | | // 9-16 bit |
156 | | |
157 | | void (*transform_skip_16)(uint16_t *_dst, const int16_t *coeffs, ptrdiff_t _stride, int bit_depth); // no transform |
158 | | void (*transform_4x4_dst_add_16)(uint16_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth); // iDST |
159 | | void (*transform_add_16[4])(uint16_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth); // iDCT |
160 | | |
161 | | |
162 | | void (*rotate_coefficients)(int16_t *coeff, int nT); |
163 | | |
164 | | void (*transform_idst_4x4)(int32_t *dst, const int16_t *coeffs, int bdShift, int max_coeff_bits); |
165 | | void (*transform_idct_4x4)(int32_t *dst, const int16_t *coeffs, int bdShift, int max_coeff_bits); |
166 | | void (*transform_idct_8x8)(int32_t *dst, const int16_t *coeffs, int bdShift, int max_coeff_bits); |
167 | | void (*transform_idct_16x16)(int32_t *dst,const int16_t *coeffs,int bdShift, int max_coeff_bits); |
168 | | void (*transform_idct_32x32)(int32_t *dst,const int16_t *coeffs,int bdShift, int max_coeff_bits); |
169 | | void (*add_residual_8)(uint8_t *dst, ptrdiff_t stride, const int32_t* r, int nT, int bit_depth); |
170 | | void (*add_residual_16)(uint16_t *dst,ptrdiff_t stride,const int32_t* r, int nT, int bit_depth); |
171 | | |
172 | | template <class pixel_t> |
173 | | void add_residual(pixel_t *dst, ptrdiff_t stride, const int32_t* r, int nT, int bit_depth) const; |
174 | | |
175 | | void (*rdpcm_v)(int32_t* residual, const int16_t* coeffs, int nT,int tsShift,int bdShift); |
176 | | void (*rdpcm_h)(int32_t* residual, const int16_t* coeffs, int nT,int tsShift,int bdShift); |
177 | | |
178 | | void (*transform_skip_residual)(int32_t *residual, const int16_t *coeffs, int nT, |
179 | | int tsShift,int bdShift); |
180 | | |
181 | | |
182 | | template <class pixel_t> void transform_skip(pixel_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth) const; |
183 | | template <class pixel_t> void transform_skip_rdpcm_v(pixel_t *dst, const int16_t *coeffs, int nT, ptrdiff_t stride, int bit_depth) const; |
184 | | template <class pixel_t> void transform_skip_rdpcm_h(pixel_t *dst, const int16_t *coeffs, int nT, ptrdiff_t stride, int bit_depth) const; |
185 | | template <class pixel_t> void transform_4x4_dst_add(pixel_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth) const; |
186 | | template <class pixel_t> void transform_add(int sizeIdx, pixel_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth) const; |
187 | | |
188 | | |
189 | | |
190 | | // --- forward transforms --- |
191 | | |
192 | | void (*fwd_transform_4x4_dst_8)(int16_t *coeffs, const int16_t* src, ptrdiff_t stride); // fDST |
193 | | |
194 | | // indexed with (log2TbSize-2) |
195 | | void (*fwd_transform_8[4]) (int16_t *coeffs, const int16_t *src, ptrdiff_t stride); // fDCT |
196 | | |
197 | | |
198 | | // forward Hadamard transform (without scaling factor) |
199 | | // (4x4,8x8,16x16,32x32) indexed with (log2TbSize-2) |
200 | | void (*hadamard_transform_8[4]) (int16_t *coeffs, const int16_t *src, ptrdiff_t stride); |
201 | | }; |
202 | | |
203 | | |
204 | | /* |
205 | | template <> inline void acceleration_functions::put_weighted_pred_avg<uint8_t>(uint8_t *_dst, ptrdiff_t dststride, |
206 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
207 | | int width, int height, int bit_depth) { put_weighted_pred_avg_8(_dst,dststride,src1,src2,srcstride,width,height); } |
208 | | template <> inline void acceleration_functions::put_weighted_pred_avg<uint16_t>(uint16_t *_dst, ptrdiff_t dststride, |
209 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
210 | | int width, int height, int bit_depth) { put_weighted_pred_avg_16(_dst,dststride,src1,src2, |
211 | | srcstride,width,height,bit_depth); } |
212 | | |
213 | | template <> inline void acceleration_functions::put_unweighted_pred<uint8_t>(uint8_t *_dst, ptrdiff_t dststride, |
214 | | const int16_t *src, ptrdiff_t srcstride, |
215 | | int width, int height, int bit_depth) { put_unweighted_pred_8(_dst,dststride,src,srcstride,width,height); } |
216 | | template <> inline void acceleration_functions::put_unweighted_pred<uint16_t>(uint16_t *_dst, ptrdiff_t dststride, |
217 | | const int16_t *src, ptrdiff_t srcstride, |
218 | | int width, int height, int bit_depth) { put_unweighted_pred_16(_dst,dststride,src,srcstride,width,height,bit_depth); } |
219 | | |
220 | | template <> inline void acceleration_functions::put_weighted_pred<uint8_t>(uint8_t *_dst, ptrdiff_t dststride, |
221 | | const int16_t *src, ptrdiff_t srcstride, |
222 | | int width, int height, |
223 | | int w,int o,int log2WD, int bit_depth) { put_weighted_pred_8(_dst,dststride,src,srcstride,width,height,w,o,log2WD); } |
224 | | template <> inline void acceleration_functions::put_weighted_pred<uint16_t>(uint16_t *_dst, ptrdiff_t dststride, |
225 | | const int16_t *src, ptrdiff_t srcstride, |
226 | | int width, int height, |
227 | | int w,int o,int log2WD, int bit_depth) { put_weighted_pred_16(_dst,dststride,src,srcstride,width,height,w,o,log2WD,bit_depth); } |
228 | | |
229 | | template <> inline void acceleration_functions::put_weighted_bipred<uint8_t>(uint8_t *_dst, ptrdiff_t dststride, |
230 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
231 | | int width, int height, |
232 | | int w1,int o1, int w2,int o2, int log2WD, int bit_depth) { put_weighted_bipred_8(_dst,dststride,src1,src2,srcstride, |
233 | | width,height, |
234 | | w1,o1,w2,o2,log2WD); } |
235 | | template <> inline void acceleration_functions::put_weighted_bipred<uint16_t>(uint16_t *_dst, ptrdiff_t dststride, |
236 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
237 | | int width, int height, |
238 | | int w1,int o1, int w2,int o2, int log2WD, int bit_depth) { put_weighted_bipred_16(_dst,dststride,src1,src2,srcstride, |
239 | | width,height, |
240 | | w1,o1,w2,o2,log2WD,bit_depth); } |
241 | | */ |
242 | | |
243 | | |
244 | | inline void acceleration_functions::put_weighted_pred_avg(void* _dst, ptrdiff_t dststride, |
245 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
246 | | int width, int height, int bit_depth) const |
247 | 0 | { |
248 | 0 | if (bit_depth <= 8) |
249 | 0 | put_weighted_pred_avg_8((uint8_t*)_dst,dststride,src1,src2,srcstride,width,height); |
250 | 0 | else |
251 | 0 | put_weighted_pred_avg_16((uint16_t*)_dst,dststride,src1,src2,srcstride,width,height,bit_depth); |
252 | 0 | } |
253 | | |
254 | | |
255 | | inline void acceleration_functions::put_unweighted_pred(void* _dst, ptrdiff_t dststride, |
256 | | const int16_t *src, ptrdiff_t srcstride, |
257 | | int width, int height, int bit_depth) const |
258 | 0 | { |
259 | 0 | if (bit_depth <= 8) |
260 | 0 | put_unweighted_pred_8((uint8_t*)_dst,dststride,src,srcstride,width,height); |
261 | 0 | else |
262 | 0 | put_unweighted_pred_16((uint16_t*)_dst,dststride,src,srcstride,width,height,bit_depth); |
263 | 0 | } |
264 | | |
265 | | |
266 | | inline void acceleration_functions::put_weighted_pred(void* _dst, ptrdiff_t dststride, |
267 | | const int16_t *src, ptrdiff_t srcstride, |
268 | | int width, int height, |
269 | | int w,int o,int log2WD, int bit_depth) const |
270 | 0 | { |
271 | 0 | if (bit_depth <= 8) |
272 | 0 | put_weighted_pred_8((uint8_t*)_dst,dststride,src,srcstride,width,height,w,o,log2WD); |
273 | 0 | else |
274 | 0 | put_weighted_pred_16((uint16_t*)_dst,dststride,src,srcstride,width,height,w,o,log2WD,bit_depth); |
275 | 0 | } |
276 | | |
277 | | |
278 | | inline void acceleration_functions::put_weighted_bipred(void* _dst, ptrdiff_t dststride, |
279 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
280 | | int width, int height, |
281 | | int w1,int o1, int w2,int o2, int log2WD, int bit_depth) const |
282 | 0 | { |
283 | 0 | if (bit_depth <= 8) |
284 | 0 | put_weighted_bipred_8((uint8_t*)_dst,dststride,src1,src2,srcstride, width,height, w1,o1,w2,o2,log2WD); |
285 | 0 | else |
286 | 0 | put_weighted_bipred_16((uint16_t*)_dst,dststride,src1,src2,srcstride, width,height, w1,o1,w2,o2,log2WD,bit_depth); |
287 | 0 | } |
288 | | |
289 | | |
290 | | |
291 | | inline void acceleration_functions::put_hevc_epel(int16_t *dst, ptrdiff_t dststride, |
292 | | const void *src, ptrdiff_t srcstride, int width, int height, |
293 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const |
294 | 0 | { |
295 | 0 | if (bit_depth <= 8) |
296 | 0 | put_hevc_epel_8(dst,dststride,(const uint8_t*)src,srcstride,width,height,mx,my,mcbuffer); |
297 | 0 | else |
298 | 0 | put_hevc_epel_16(dst,dststride,(const uint16_t*)src,srcstride,width,height,mx,my,mcbuffer, bit_depth); |
299 | 0 | } |
300 | | |
301 | | inline void acceleration_functions::put_hevc_epel_h(int16_t *dst, ptrdiff_t dststride, |
302 | | const void *src, ptrdiff_t srcstride, int width, int height, |
303 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const |
304 | 0 | { |
305 | 0 | if (bit_depth <= 8) |
306 | 0 | put_hevc_epel_h_8(dst,dststride,(const uint8_t*)src,srcstride,width,height,mx,my,mcbuffer,bit_depth); |
307 | 0 | else |
308 | 0 | put_hevc_epel_h_16(dst,dststride,(const uint16_t*)src,srcstride,width,height,mx,my,mcbuffer,bit_depth); |
309 | 0 | } |
310 | | |
311 | | inline void acceleration_functions::put_hevc_epel_v(int16_t *dst, ptrdiff_t dststride, |
312 | | const void *src, ptrdiff_t srcstride, int width, int height, |
313 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const |
314 | 0 | { |
315 | 0 | if (bit_depth <= 8) |
316 | 0 | put_hevc_epel_v_8(dst,dststride,(const uint8_t*)src,srcstride,width,height,mx,my,mcbuffer,bit_depth); |
317 | 0 | else |
318 | 0 | put_hevc_epel_v_16(dst,dststride,(const uint16_t*)src,srcstride,width,height,mx,my,mcbuffer, bit_depth); |
319 | 0 | } |
320 | | |
321 | | inline void acceleration_functions::put_hevc_epel_hv(int16_t *dst, ptrdiff_t dststride, |
322 | | const void *src, ptrdiff_t srcstride, int width, int height, |
323 | | int mx, int my, int16_t* mcbuffer, int bit_depth) const |
324 | 0 | { |
325 | 0 | if (bit_depth <= 8) |
326 | 0 | put_hevc_epel_hv_8(dst,dststride,(const uint8_t*)src,srcstride,width,height,mx,my,mcbuffer,bit_depth); |
327 | 0 | else |
328 | 0 | put_hevc_epel_hv_16(dst,dststride,(const uint16_t*)src,srcstride,width,height,mx,my,mcbuffer, bit_depth); |
329 | 0 | } |
330 | | |
331 | | inline void acceleration_functions::put_hevc_qpel(int16_t *dst, ptrdiff_t dststride, |
332 | | const void *src, ptrdiff_t srcstride, int width, int height, |
333 | | int16_t* mcbuffer, int dX,int dY, int bit_depth) const |
334 | 0 | { |
335 | 0 | if (bit_depth <= 8) |
336 | 0 | put_hevc_qpel_8[dX][dY](dst,dststride,(const uint8_t*)src,srcstride,width,height,mcbuffer); |
337 | 0 | else |
338 | 0 | put_hevc_qpel_16[dX][dY](dst,dststride,(const uint16_t*)src,srcstride,width,height,mcbuffer, bit_depth); |
339 | 0 | } |
340 | | |
341 | 0 | template <> inline void acceleration_functions::transform_skip<uint8_t>(uint8_t *dst, const int16_t *coeffs,ptrdiff_t stride, int bit_depth) const { transform_skip_8(dst,coeffs,stride); } |
342 | 0 | template <> inline void acceleration_functions::transform_skip<uint16_t>(uint16_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth) const { transform_skip_16(dst,coeffs,stride, bit_depth); } |
343 | | |
344 | 0 | template <> inline void acceleration_functions::transform_skip_rdpcm_v<uint8_t>(uint8_t *dst, const int16_t *coeffs, int nT, ptrdiff_t stride, int bit_depth) const { assert(bit_depth==8); transform_skip_rdpcm_v_8(dst,coeffs,nT,stride); } |
345 | 0 | template <> inline void acceleration_functions::transform_skip_rdpcm_h<uint8_t>(uint8_t *dst, const int16_t *coeffs, int nT, ptrdiff_t stride, int bit_depth) const { assert(bit_depth==8); transform_skip_rdpcm_h_8(dst,coeffs,nT,stride); } |
346 | 0 | template <> inline void acceleration_functions::transform_skip_rdpcm_v<uint16_t>(uint16_t *dst, const int16_t *coeffs, int nT, ptrdiff_t stride, int bit_depth) const { assert(false); /*transform_skip_rdpcm_v_8(dst,coeffs,nT,stride);*/ } |
347 | 0 | template <> inline void acceleration_functions::transform_skip_rdpcm_h<uint16_t>(uint16_t *dst, const int16_t *coeffs, int nT, ptrdiff_t stride, int bit_depth) const { assert(false); /*transform_skip_rdpcm_h_8(dst,coeffs,nT,stride);*/ } |
348 | | |
349 | | |
350 | 0 | template <> inline void acceleration_functions::transform_4x4_dst_add<uint8_t>(uint8_t *dst, const int16_t *coeffs, ptrdiff_t stride,int bit_depth) const { transform_4x4_dst_add_8(dst,coeffs,stride); } |
351 | 0 | template <> inline void acceleration_functions::transform_4x4_dst_add<uint16_t>(uint16_t *dst, const int16_t *coeffs, ptrdiff_t stride,int bit_depth) const { transform_4x4_dst_add_16(dst,coeffs,stride,bit_depth); } |
352 | | |
353 | 0 | template <> inline void acceleration_functions::transform_add<uint8_t>(int sizeIdx, uint8_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth) const { transform_add_8[sizeIdx](dst,coeffs,stride); } |
354 | 0 | template <> inline void acceleration_functions::transform_add<uint16_t>(int sizeIdx, uint16_t *dst, const int16_t *coeffs, ptrdiff_t stride, int bit_depth) const { transform_add_16[sizeIdx](dst,coeffs,stride,bit_depth); } |
355 | | |
356 | 0 | template <> inline void acceleration_functions::add_residual(uint8_t *dst, ptrdiff_t stride, const int32_t* r, int nT, int bit_depth) const { add_residual_8(dst,stride,r,nT,bit_depth); } |
357 | 0 | template <> inline void acceleration_functions::add_residual(uint16_t *dst, ptrdiff_t stride, const int32_t* r, int nT, int bit_depth) const { add_residual_16(dst,stride,r,nT,bit_depth); } |
358 | | |
359 | | #endif |