/src/libde265/libde265/fallback-motion.cc
Line | Count | Source |
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 | | #include "fallback-motion.h" |
22 | | #include "util.h" |
23 | | |
24 | | #if defined(_MSC_VER) || defined(__MINGW32__) |
25 | | # include <malloc.h> |
26 | | #elif defined(HAVE_ALLOCA_H) |
27 | | # include <alloca.h> |
28 | | #endif |
29 | | |
30 | | #include <assert.h> |
31 | | |
32 | | |
33 | | void put_unweighted_pred_8_fallback(uint8_t *dst, ptrdiff_t dststride, |
34 | | const int16_t *src, ptrdiff_t srcstride, |
35 | | int width, int height) |
36 | 0 | { |
37 | 0 | int offset8bit = 32; |
38 | 0 | int shift8bit = 6; |
39 | |
|
40 | 0 | assert((width&1)==0); |
41 | |
|
42 | 0 | for (int y=0;y<height;y++) { |
43 | 0 | const int16_t* in = &src[y*srcstride]; |
44 | 0 | uint8_t* out = &dst[y*dststride]; |
45 | |
|
46 | 0 | for (int x=0;x<width;x+=2) { |
47 | 0 | out[0] = Clip1_8bit((in[0] + offset8bit)>>shift8bit); |
48 | 0 | out[1] = Clip1_8bit((in[1] + offset8bit)>>shift8bit); |
49 | 0 | out+=2; in+=2; |
50 | 0 | } |
51 | 0 | } |
52 | 0 | } |
53 | | |
54 | | |
55 | | void put_weighted_pred_8_fallback(uint8_t *dst, ptrdiff_t dststride, |
56 | | const int16_t *src, ptrdiff_t srcstride, |
57 | | int width, int height, |
58 | | int w,int o,int log2WD) |
59 | 393k | { |
60 | 393k | assert(log2WD>=1); // TODO |
61 | | |
62 | 393k | const int rnd = (1<<(log2WD-1)); |
63 | | |
64 | 3.48M | for (int y=0;y<height;y++) { |
65 | 3.08M | const int16_t* in = &src[y*srcstride]; |
66 | 3.08M | uint8_t* out = &dst[y*dststride]; |
67 | | |
68 | 28.1M | for (int x=0;x<width;x++) { |
69 | 25.0M | out[0] = Clip1_8bit(((in[0]*w + rnd)>>log2WD) + o); |
70 | 25.0M | out++; in++; |
71 | 25.0M | } |
72 | 3.08M | } |
73 | 393k | } |
74 | | |
75 | | void put_weighted_bipred_8_fallback(uint8_t *dst, ptrdiff_t dststride, |
76 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
77 | | int width, int height, |
78 | | int w1,int o1, int w2,int o2, int log2WD) |
79 | 149k | { |
80 | 149k | assert(log2WD>=1); // TODO |
81 | | |
82 | 149k | const int rnd = static_cast<int>(static_cast<unsigned int>(o1+o2+1) << log2WD); |
83 | | |
84 | 2.13M | for (int y=0;y<height;y++) { |
85 | 1.98M | const int16_t* in1 = &src1[y*srcstride]; |
86 | 1.98M | const int16_t* in2 = &src2[y*srcstride]; |
87 | 1.98M | uint8_t* out = &dst[y*dststride]; |
88 | | |
89 | 26.5M | for (int x=0;x<width;x++) { |
90 | 24.5M | out[0] = Clip1_8bit((in1[0]*w1 + in2[0]*w2 + rnd)>>(log2WD+1)); |
91 | 24.5M | out++; in1++; in2++; |
92 | 24.5M | } |
93 | 1.98M | } |
94 | 149k | } |
95 | | |
96 | | |
97 | | void put_weighted_pred_avg_8_fallback(uint8_t *dst, ptrdiff_t dststride, |
98 | | const int16_t *src1, const int16_t *src2, |
99 | | ptrdiff_t srcstride, int width, |
100 | | int height) |
101 | 0 | { |
102 | 0 | int offset8bit = 64; |
103 | 0 | int shift8bit = 7; |
104 | |
|
105 | 0 | assert((width&1)==0); |
106 | | |
107 | | // I had a special case for 8-pixel parallel, unrolled code, |
108 | | // but I did not see any speedup. |
109 | |
|
110 | | #if 0 |
111 | | for (int y=0;y<height;y++) { |
112 | | int16_t* in1 = &src1[y*srcstride]; |
113 | | int16_t* in2 = &src2[y*srcstride]; |
114 | | uint8_t* out = &dst[y*dststride]; |
115 | | |
116 | | for (int x=0;x<width;x++) { |
117 | | out[0] = Clip1_8bit((in1[0] + in2[0] + offset8bit)>>shift8bit); |
118 | | out++; in1++; in2++; |
119 | | } |
120 | | } |
121 | | #endif |
122 | |
|
123 | | #if 0 |
124 | | if ((width&7)==0) { |
125 | | for (int y=0;y<height;y++) { |
126 | | int16_t* in1 = &src1[y*srcstride]; |
127 | | int16_t* in2 = &src2[y*srcstride]; |
128 | | uint8_t* out = &dst[y*dststride]; |
129 | | |
130 | | for (int x=0;x<width;x+=8) { |
131 | | out[0] = Clip1_8bit((in1[0] + in2[0] + offset8bit)>>shift8bit); |
132 | | out[1] = Clip1_8bit((in1[1] + in2[1] + offset8bit)>>shift8bit); |
133 | | out[2] = Clip1_8bit((in1[2] + in2[2] + offset8bit)>>shift8bit); |
134 | | out[3] = Clip1_8bit((in1[3] + in2[3] + offset8bit)>>shift8bit); |
135 | | out[4] = Clip1_8bit((in1[4] + in2[4] + offset8bit)>>shift8bit); |
136 | | out[5] = Clip1_8bit((in1[5] + in2[5] + offset8bit)>>shift8bit); |
137 | | out[6] = Clip1_8bit((in1[6] + in2[6] + offset8bit)>>shift8bit); |
138 | | out[7] = Clip1_8bit((in1[7] + in2[7] + offset8bit)>>shift8bit); |
139 | | out+=8; in1+=8; in2+=8; |
140 | | } |
141 | | } |
142 | | } |
143 | | else |
144 | | #endif |
145 | 0 | { |
146 | 0 | for (int y=0;y<height;y++) { |
147 | 0 | const int16_t* in1 = &src1[y*srcstride]; |
148 | 0 | const int16_t* in2 = &src2[y*srcstride]; |
149 | 0 | uint8_t* out = &dst[y*dststride]; |
150 | |
|
151 | 0 | for (int x=0;x<width;x+=2) { |
152 | 0 | out[0] = Clip1_8bit((in1[0] + in2[0] + offset8bit)>>shift8bit); |
153 | 0 | out[1] = Clip1_8bit((in1[1] + in2[1] + offset8bit)>>shift8bit); |
154 | 0 | out+=2; in1+=2; in2+=2; |
155 | 0 | } |
156 | 0 | } |
157 | 0 | } |
158 | 0 | } |
159 | | |
160 | | |
161 | | |
162 | | |
163 | | |
164 | | void put_unweighted_pred_16_fallback(uint16_t *dst, ptrdiff_t dststride, |
165 | | const int16_t *src, ptrdiff_t srcstride, |
166 | | int width, int height, int bit_depth) |
167 | 684k | { |
168 | | // shift1 per HEVC v2 (10/2014) spec 8.5.3.3.4.2: Max(2, 14 - BitDepth). |
169 | | // The Max() was added with the Range Extensions in v2 to handle BitDepth up to 16; |
170 | | // the v1 (04/2013) formula was just (14 - BitDepth), valid only for BitDepth <= 14. |
171 | 684k | int shift1 = std::max(2, 14-bit_depth); |
172 | 684k | int offset1 = 1<<(shift1-1); |
173 | | |
174 | 684k | assert((width&1)==0); |
175 | | |
176 | 6.02M | for (int y=0;y<height;y++) { |
177 | 5.34M | const int16_t* in = &src[y*srcstride]; |
178 | 5.34M | uint16_t* out = &dst[y*dststride]; |
179 | | |
180 | 29.7M | for (int x=0;x<width;x+=2) { |
181 | 24.4M | out[0] = Clip_BitDepth((in[0] + offset1)>>shift1, bit_depth); |
182 | 24.4M | out[1] = Clip_BitDepth((in[1] + offset1)>>shift1, bit_depth); |
183 | 24.4M | out+=2; in+=2; |
184 | 24.4M | } |
185 | 5.34M | } |
186 | 684k | } |
187 | | |
188 | | #include <stdlib.h> |
189 | | |
190 | | void put_weighted_pred_16_fallback(uint16_t *dst, ptrdiff_t dststride, |
191 | | const int16_t *src, ptrdiff_t srcstride, |
192 | | int width, int height, |
193 | | int w,int o,int log2WD, int bit_depth) |
194 | 609k | { |
195 | 609k | assert(log2WD>=1); // TODO |
196 | | |
197 | 609k | const int rnd = (1<<(log2WD-1)); |
198 | | |
199 | 4.05M | for (int y=0;y<height;y++) { |
200 | 3.44M | const int16_t* in = &src[y*srcstride]; |
201 | 3.44M | uint16_t* out = &dst[y*dststride]; |
202 | | |
203 | 28.4M | for (int x=0;x<width;x++) { |
204 | 25.0M | out[0] = Clip_BitDepth(((in[0]*w + rnd)>>log2WD) + o, bit_depth); |
205 | 25.0M | out++; in++; |
206 | 25.0M | } |
207 | 3.44M | } |
208 | 609k | } |
209 | | |
210 | | void put_weighted_bipred_16_fallback(uint16_t *dst, ptrdiff_t dststride, |
211 | | const int16_t *src1, const int16_t *src2, ptrdiff_t srcstride, |
212 | | int width, int height, |
213 | | int w1,int o1, int w2,int o2, int log2WD, int bit_depth) |
214 | 86.0k | { |
215 | 86.0k | assert(log2WD>=1); // TODO |
216 | | |
217 | 86.0k | const int rnd = static_cast<int>(static_cast<unsigned int>(o1+o2+1) << log2WD); |
218 | | |
219 | 782k | for (int y=0;y<height;y++) { |
220 | 696k | const int16_t* in1 = &src1[y*srcstride]; |
221 | 696k | const int16_t* in2 = &src2[y*srcstride]; |
222 | 696k | uint16_t* out = &dst[y*dststride]; |
223 | | |
224 | 8.13M | for (int x=0;x<width;x++) { |
225 | 7.44M | out[0] = Clip_BitDepth((in1[0]*w1 + in2[0]*w2 + rnd)>>(log2WD+1), bit_depth); |
226 | 7.44M | out++; in1++; in2++; |
227 | 7.44M | } |
228 | 696k | } |
229 | 86.0k | } |
230 | | |
231 | | |
232 | | void put_weighted_pred_avg_16_fallback(uint16_t *dst, ptrdiff_t dststride, |
233 | | const int16_t *src1, const int16_t *src2, |
234 | | ptrdiff_t srcstride, int width, |
235 | | int height, int bit_depth) |
236 | 116k | { |
237 | | // shift2 per HEVC v2 (10/2014) spec 8.5.3.3.4.2: Max(3, 15 - BitDepth). |
238 | | // The Max() was added with the Range Extensions in v2 to handle BitDepth up to 16; |
239 | | // the v1 (04/2013) formula was just (15 - BitDepth), valid only for BitDepth <= 14. |
240 | 116k | int shift2 = std::max(3, 15-bit_depth); |
241 | 116k | int offset2 = 1<<(shift2-1); |
242 | | |
243 | 116k | assert((width&1)==0); |
244 | | |
245 | 1.26M | for (int y=0;y<height;y++) { |
246 | 1.15M | const int16_t* in1 = &src1[y*srcstride]; |
247 | 1.15M | const int16_t* in2 = &src2[y*srcstride]; |
248 | 1.15M | uint16_t* out = &dst[y*dststride]; |
249 | | |
250 | 8.28M | for (int x=0;x<width;x+=2) { |
251 | 7.13M | out[0] = Clip_BitDepth((in1[0] + in2[0] + offset2)>>shift2, bit_depth); |
252 | 7.13M | out[1] = Clip_BitDepth((in1[1] + in2[1] + offset2)>>shift2, bit_depth); |
253 | 7.13M | out+=2; in1+=2; in2+=2; |
254 | 7.13M | } |
255 | 1.15M | } |
256 | 116k | } |
257 | | |
258 | | |
259 | | |
260 | | |
261 | | |
262 | | void put_epel_8_fallback(int16_t *out, ptrdiff_t out_stride, |
263 | | const uint8_t *src, ptrdiff_t src_stride, |
264 | | int width, int height, |
265 | | int mx, int my, int16_t* mcbuffer) |
266 | 0 | { |
267 | 0 | int shift3 = 6; |
268 | |
|
269 | 0 | for (int y=0;y<height;y++) { |
270 | 0 | int16_t* o = &out[y*out_stride]; |
271 | 0 | const uint8_t* i = &src[y*src_stride]; |
272 | |
|
273 | 0 | for (int x=0;x<width;x++) { |
274 | 0 | *o = *i << shift3; |
275 | 0 | o++; |
276 | 0 | i++; |
277 | 0 | } |
278 | 0 | } |
279 | 0 | } |
280 | | |
281 | | |
282 | | void put_epel_16_fallback(int16_t *out, ptrdiff_t out_stride, |
283 | | const uint16_t *src, ptrdiff_t src_stride, |
284 | | int width, int height, |
285 | | int mx, int my, int16_t* mcbuffer, int bit_depth) |
286 | 325k | { |
287 | | // shift3 per HEVC v2 (10/2014) spec 8.5.3.3.3.3 (chroma): Max(2, 14 - BitDepth). |
288 | | // The Max() was added with the Range Extensions in v2 to handle BitDepth up to 16; |
289 | | // the v1 (04/2013) formula was just (14 - BitDepth), valid only for BitDepth <= 14. |
290 | 325k | int shift3 = std::max(2, 14 - bit_depth); |
291 | | |
292 | 2.23M | for (int y=0;y<height;y++) { |
293 | 1.91M | int16_t* o = &out[y*out_stride]; |
294 | 1.91M | const uint16_t* i = &src[y*src_stride]; |
295 | | |
296 | 15.9M | for (int x=0;x<width;x++) { |
297 | 14.0M | *o = *i << shift3; |
298 | 14.0M | o++; |
299 | 14.0M | i++; |
300 | 14.0M | } |
301 | 1.91M | } |
302 | 325k | } |
303 | | |
304 | | |
305 | | template <class pixel_t> |
306 | | void put_epel_hv_fallback(int16_t *dst, ptrdiff_t dst_stride, |
307 | | const pixel_t *src, ptrdiff_t src_stride, |
308 | | int nPbWC, int nPbHC, |
309 | | int xFracC, int yFracC, int16_t* mcbuffer, int bit_depth) |
310 | 447k | { |
311 | 447k | const int shift1 = bit_depth-8; |
312 | 447k | const int shift2 = 6; |
313 | | //const int shift3 = 6; |
314 | | |
315 | 447k | int extra_left = 1; |
316 | 447k | int extra_top = 1; |
317 | | // int extra_right = 2; |
318 | 447k | int extra_bottom= 2; |
319 | | |
320 | | |
321 | 447k | int nPbH_extra = extra_top + nPbHC + extra_bottom; |
322 | | |
323 | 447k | int16_t* tmp2buf = (int16_t*)alloca( nPbWC * nPbH_extra * sizeof(int16_t) ); |
324 | | |
325 | | /* |
326 | | int nPbW_extra = extra_left + nPbWC + extra_right; |
327 | | |
328 | | |
329 | | printf("x,y FracC: %d/%d\n",xFracC,yFracC); |
330 | | |
331 | | printf("---IN---\n"); |
332 | | |
333 | | for (int y=-extra_top;y<nPbHC+extra_bottom;y++) { |
334 | | uint8_t* p = &src[y*src_stride -extra_left]; |
335 | | |
336 | | for (int x=-extra_left;x<nPbWC+extra_right;x++) { |
337 | | printf("%05d ",*p << 6); |
338 | | p++; |
339 | | } |
340 | | printf("\n"); |
341 | | } |
342 | | */ |
343 | | |
344 | | |
345 | | // H-filters |
346 | | |
347 | 447k | logtrace(LogMotion,"---H---\n"); |
348 | | //printf("---H---(%d)\n",xFracC); |
349 | | |
350 | 4.11M | for (int y=-extra_top;y<nPbHC+extra_bottom;y++) { |
351 | 3.66M | const pixel_t* p = &src[y*src_stride - extra_left]; |
352 | | |
353 | 26.1M | for (int x=0;x<nPbWC;x++) { |
354 | 22.4M | int16_t v; |
355 | 22.4M | switch (xFracC) { |
356 | 4.07M | case 0: v = p[1]; break; |
357 | 3.41M | case 1: v = (-2*p[0]+58*p[1]+10*p[2]-2*p[3])>>shift1; break; |
358 | 3.32M | case 2: v = (-4*p[0]+54*p[1]+16*p[2]-2*p[3])>>shift1; break; |
359 | 1.58M | case 3: v = (-6*p[0]+46*p[1]+28*p[2]-4*p[3])>>shift1; break; |
360 | 2.70M | case 4: v = (-4*p[0]+36*p[1]+36*p[2]-4*p[3])>>shift1; break; |
361 | 1.39M | case 5: v = (-4*p[0]+28*p[1]+46*p[2]-6*p[3])>>shift1; break; |
362 | 2.80M | case 6: v = (-2*p[0]+16*p[1]+54*p[2]-4*p[3])>>shift1; break; |
363 | 0 | default: |
364 | 3.14M | case 7: v = (-2*p[0]+10*p[1]+58*p[2]-2*p[3])>>shift1; break; |
365 | 22.4M | } |
366 | | |
367 | | //printf("%d %d %d %d -> %d\n",p[0],p[1],p[2],p[3],v); |
368 | | |
369 | 22.4M | tmp2buf[y+extra_top + x*nPbH_extra] = v; |
370 | 22.4M | p++; |
371 | | |
372 | | //printf("%05d ",tmp2buf[y+extra_top + x*nPbH_extra]); |
373 | 22.4M | } |
374 | | //printf("\n"); |
375 | 3.66M | } |
376 | | |
377 | | // V-filters |
378 | | |
379 | 447k | int vshift = (xFracC==0 ? shift1 : shift2); |
380 | | |
381 | 2.69M | for (int x=0;x<nPbWC;x++) { |
382 | 2.25M | int16_t* p = &tmp2buf[x*nPbH_extra]; |
383 | | |
384 | 17.9M | for (int y=0;y<nPbHC;y++) { |
385 | 15.7M | int16_t v; |
386 | | //logtrace(LogMotion,"%x %x %x %x %x %x %x\n",p[0],p[1],p[2],p[3],p[4],p[5],p[6]); |
387 | | |
388 | 15.7M | switch (yFracC) { |
389 | 3.66M | case 0: v = p[1]; break; |
390 | 1.99M | case 1: v = (-2*p[0]+58*p[1]+10*p[2]-2*p[3])>>vshift; break; |
391 | 2.30M | case 2: v = (-4*p[0]+54*p[1]+16*p[2]-2*p[3])>>vshift; break; |
392 | 881k | case 3: v = (-6*p[0]+46*p[1]+28*p[2]-4*p[3])>>vshift; break; |
393 | 1.74M | case 4: v = (-4*p[0]+36*p[1]+36*p[2]-4*p[3])>>vshift; break; |
394 | 1.07M | case 5: v = (-4*p[0]+28*p[1]+46*p[2]-6*p[3])>>vshift; break; |
395 | 2.39M | case 6: v = (-2*p[0]+16*p[1]+54*p[2]-4*p[3])>>vshift; break; |
396 | 0 | default: |
397 | 1.65M | case 7: v = (-2*p[0]+10*p[1]+58*p[2]-2*p[3])>>vshift; break; |
398 | 15.7M | } |
399 | | |
400 | 15.7M | dst[x + y*dst_stride] = v; |
401 | 15.7M | p++; |
402 | 15.7M | } |
403 | | |
404 | 2.25M | } |
405 | | |
406 | | /* |
407 | | printf("---V---\n"); |
408 | | for (int y=0;y<nPbHC;y++) { |
409 | | for (int x=0;x<nPbWC;x++) { |
410 | | printf("%05d ",dst[x+y*dst_stride]); |
411 | | } |
412 | | printf("\n"); |
413 | | } |
414 | | */ |
415 | 447k | } Unexecuted instantiation: void put_epel_hv_fallback<unsigned char>(short*, long, unsigned char const*, long, int, int, int, int, short*, int) void put_epel_hv_fallback<unsigned short>(short*, long, unsigned short const*, long, int, int, int, int, short*, int) Line | Count | Source | 310 | 447k | { | 311 | 447k | const int shift1 = bit_depth-8; | 312 | 447k | const int shift2 = 6; | 313 | | //const int shift3 = 6; | 314 | | | 315 | 447k | int extra_left = 1; | 316 | 447k | int extra_top = 1; | 317 | | // int extra_right = 2; | 318 | 447k | int extra_bottom= 2; | 319 | | | 320 | | | 321 | 447k | int nPbH_extra = extra_top + nPbHC + extra_bottom; | 322 | | | 323 | 447k | int16_t* tmp2buf = (int16_t*)alloca( nPbWC * nPbH_extra * sizeof(int16_t) ); | 324 | | | 325 | | /* | 326 | | int nPbW_extra = extra_left + nPbWC + extra_right; | 327 | | | 328 | | | 329 | | printf("x,y FracC: %d/%d\n",xFracC,yFracC); | 330 | | | 331 | | printf("---IN---\n"); | 332 | | | 333 | | for (int y=-extra_top;y<nPbHC+extra_bottom;y++) { | 334 | | uint8_t* p = &src[y*src_stride -extra_left]; | 335 | | | 336 | | for (int x=-extra_left;x<nPbWC+extra_right;x++) { | 337 | | printf("%05d ",*p << 6); | 338 | | p++; | 339 | | } | 340 | | printf("\n"); | 341 | | } | 342 | | */ | 343 | | | 344 | | | 345 | | // H-filters | 346 | | | 347 | 447k | logtrace(LogMotion,"---H---\n"); | 348 | | //printf("---H---(%d)\n",xFracC); | 349 | | | 350 | 4.11M | for (int y=-extra_top;y<nPbHC+extra_bottom;y++) { | 351 | 3.66M | const pixel_t* p = &src[y*src_stride - extra_left]; | 352 | | | 353 | 26.1M | for (int x=0;x<nPbWC;x++) { | 354 | 22.4M | int16_t v; | 355 | 22.4M | switch (xFracC) { | 356 | 4.07M | case 0: v = p[1]; break; | 357 | 3.41M | case 1: v = (-2*p[0]+58*p[1]+10*p[2]-2*p[3])>>shift1; break; | 358 | 3.32M | case 2: v = (-4*p[0]+54*p[1]+16*p[2]-2*p[3])>>shift1; break; | 359 | 1.58M | case 3: v = (-6*p[0]+46*p[1]+28*p[2]-4*p[3])>>shift1; break; | 360 | 2.70M | case 4: v = (-4*p[0]+36*p[1]+36*p[2]-4*p[3])>>shift1; break; | 361 | 1.39M | case 5: v = (-4*p[0]+28*p[1]+46*p[2]-6*p[3])>>shift1; break; | 362 | 2.80M | case 6: v = (-2*p[0]+16*p[1]+54*p[2]-4*p[3])>>shift1; break; | 363 | 0 | default: | 364 | 3.14M | case 7: v = (-2*p[0]+10*p[1]+58*p[2]-2*p[3])>>shift1; break; | 365 | 22.4M | } | 366 | | | 367 | | //printf("%d %d %d %d -> %d\n",p[0],p[1],p[2],p[3],v); | 368 | | | 369 | 22.4M | tmp2buf[y+extra_top + x*nPbH_extra] = v; | 370 | 22.4M | p++; | 371 | | | 372 | | //printf("%05d ",tmp2buf[y+extra_top + x*nPbH_extra]); | 373 | 22.4M | } | 374 | | //printf("\n"); | 375 | 3.66M | } | 376 | | | 377 | | // V-filters | 378 | | | 379 | 447k | int vshift = (xFracC==0 ? shift1 : shift2); | 380 | | | 381 | 2.69M | for (int x=0;x<nPbWC;x++) { | 382 | 2.25M | int16_t* p = &tmp2buf[x*nPbH_extra]; | 383 | | | 384 | 17.9M | for (int y=0;y<nPbHC;y++) { | 385 | 15.7M | int16_t v; | 386 | | //logtrace(LogMotion,"%x %x %x %x %x %x %x\n",p[0],p[1],p[2],p[3],p[4],p[5],p[6]); | 387 | | | 388 | 15.7M | switch (yFracC) { | 389 | 3.66M | case 0: v = p[1]; break; | 390 | 1.99M | case 1: v = (-2*p[0]+58*p[1]+10*p[2]-2*p[3])>>vshift; break; | 391 | 2.30M | case 2: v = (-4*p[0]+54*p[1]+16*p[2]-2*p[3])>>vshift; break; | 392 | 881k | case 3: v = (-6*p[0]+46*p[1]+28*p[2]-4*p[3])>>vshift; break; | 393 | 1.74M | case 4: v = (-4*p[0]+36*p[1]+36*p[2]-4*p[3])>>vshift; break; | 394 | 1.07M | case 5: v = (-4*p[0]+28*p[1]+46*p[2]-6*p[3])>>vshift; break; | 395 | 2.39M | case 6: v = (-2*p[0]+16*p[1]+54*p[2]-4*p[3])>>vshift; break; | 396 | 0 | default: | 397 | 1.65M | case 7: v = (-2*p[0]+10*p[1]+58*p[2]-2*p[3])>>vshift; break; | 398 | 15.7M | } | 399 | | | 400 | 15.7M | dst[x + y*dst_stride] = v; | 401 | 15.7M | p++; | 402 | 15.7M | } | 403 | | | 404 | 2.25M | } | 405 | | | 406 | | /* | 407 | | printf("---V---\n"); | 408 | | for (int y=0;y<nPbHC;y++) { | 409 | | for (int x=0;x<nPbWC;x++) { | 410 | | printf("%05d ",dst[x+y*dst_stride]); | 411 | | } | 412 | | printf("\n"); | 413 | | } | 414 | | */ | 415 | 447k | } |
|
416 | | |
417 | | |
418 | | template |
419 | | void put_epel_hv_fallback<uint8_t>(int16_t *dst, ptrdiff_t dst_stride, |
420 | | const uint8_t *src, ptrdiff_t src_stride, |
421 | | int nPbWC, int nPbHC, |
422 | | int xFracC, int yFracC, int16_t* mcbuffer, int bit_depth); |
423 | | template |
424 | | void put_epel_hv_fallback<uint16_t>(int16_t *dst, ptrdiff_t dst_stride, |
425 | | const uint16_t *src, ptrdiff_t src_stride, |
426 | | int nPbWC, int nPbHC, |
427 | | int xFracC, int yFracC, int16_t* mcbuffer, int bit_depth); |
428 | | |
429 | | |
430 | | |
431 | | void put_qpel_0_0_fallback(int16_t *out, ptrdiff_t out_stride, |
432 | | const uint8_t *src, ptrdiff_t srcstride, |
433 | | int nPbW, int nPbH, int16_t* mcbuffer) |
434 | 0 | { |
435 | | //const int shift1 = 0; // sps->BitDepth_Y-8; |
436 | 0 | const int shift2 = 6; |
437 | | |
438 | | // straight copy |
439 | |
|
440 | 0 | for (int y=0;y<nPbH;y++) { |
441 | 0 | const uint8_t* p = src + srcstride*y; |
442 | 0 | int16_t* o = out + out_stride*y; |
443 | |
|
444 | 0 | for (int x=0;x<nPbW;x+=4) { |
445 | | |
446 | | // does not seem to be faster... |
447 | 0 | int16_t o0,o1,o2,o3; |
448 | 0 | o0 = p[0] << shift2; |
449 | 0 | o1 = p[1] << shift2; |
450 | 0 | o2 = p[2] << shift2; |
451 | 0 | o3 = p[3] << shift2; |
452 | 0 | o[0]=o0; |
453 | 0 | o[1]=o1; |
454 | 0 | o[2]=o2; |
455 | 0 | o[3]=o3; |
456 | |
|
457 | 0 | o+=4; |
458 | 0 | p+=4; |
459 | 0 | } |
460 | 0 | } |
461 | 0 | } |
462 | | |
463 | | |
464 | | void put_qpel_0_0_fallback_16(int16_t *out, ptrdiff_t out_stride, |
465 | | const uint16_t *src, ptrdiff_t srcstride, |
466 | | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) |
467 | 446k | { |
468 | | //const int shift1 = bit_depth-8; |
469 | | //const int shift2 = 6; |
470 | | // shift3 per HEVC v2 (10/2014) spec 8.5.3.3.3.2 (luma): Max(2, 14 - BitDepth). |
471 | | // The Max() was added with the Range Extensions in v2 to handle BitDepth up to 16; |
472 | | // the v1 (04/2013) formula was just (14 - BitDepth), valid only for BitDepth <= 14. |
473 | 446k | const int shift3 = std::max(2, 14-bit_depth); |
474 | | |
475 | | // straight copy |
476 | | |
477 | 4.51M | for (int y=0;y<nPbH;y++) { |
478 | 4.07M | const uint16_t* p = src + srcstride*y; |
479 | 4.07M | int16_t* o = out + out_stride*y; |
480 | | |
481 | 49.1M | for (int x=0;x<nPbW;x++) { |
482 | 45.0M | *o++ = *p++ << shift3; |
483 | 45.0M | } |
484 | 4.07M | } |
485 | 446k | } |
486 | | |
487 | | |
488 | | |
489 | | static int extra_before[4] = { 0,3,3,2 }; |
490 | | static int extra_after [4] = { 0,3,4,4 }; |
491 | | |
492 | | template <class pixel_t> |
493 | | void put_qpel_fallback(int16_t *out, ptrdiff_t out_stride, |
494 | | const pixel_t *src, ptrdiff_t srcstride, |
495 | | int nPbW, int nPbH, int16_t* mcbuffer, |
496 | | int xFracL, int yFracL, int bit_depth) |
497 | 449k | { |
498 | 449k | int extra_left = extra_before[xFracL]; |
499 | | //int extra_right = extra_after [xFracL]; |
500 | 449k | int extra_top = extra_before[yFracL]; |
501 | 449k | int extra_bottom = extra_after [yFracL]; |
502 | | |
503 | | //int nPbW_extra = extra_left + nPbW + extra_right; |
504 | 449k | int nPbH_extra = extra_top + nPbH + extra_bottom; |
505 | | |
506 | 449k | const int shift1 = bit_depth-8; |
507 | 449k | const int shift2 = 6; |
508 | | |
509 | | |
510 | | // H-filters |
511 | | |
512 | 449k | switch (xFracL) { |
513 | 94.1k | case 0: |
514 | 1.51M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { |
515 | 1.41M | const pixel_t* p = src + srcstride*y - extra_left; |
516 | 1.41M | int16_t* o = &mcbuffer[y+extra_top]; |
517 | | |
518 | 15.3M | for (int x=0;x<nPbW;x++) { |
519 | 13.9M | *o = *p; |
520 | 13.9M | o += nPbH_extra; |
521 | 13.9M | p++; |
522 | 13.9M | } |
523 | 1.41M | } |
524 | 94.1k | break; |
525 | 126k | case 1: |
526 | 1.83M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { |
527 | 1.70M | const pixel_t* p = src + srcstride*y - extra_left; |
528 | 1.70M | int16_t* o = &mcbuffer[y+extra_top]; |
529 | | |
530 | 17.6M | for (int x=0;x<nPbW;x++) { |
531 | 15.9M | *o = (-p[0]+4*p[1]-10*p[2]+58*p[3]+17*p[4] -5*p[5] +p[6])>>shift1; |
532 | 15.9M | o += nPbH_extra; |
533 | 15.9M | p++; |
534 | 15.9M | } |
535 | 1.70M | } |
536 | 126k | break; |
537 | 101k | case 2: |
538 | 1.47M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { |
539 | 1.36M | const pixel_t* p = src + srcstride*y - extra_left; |
540 | 1.36M | int16_t* o = &mcbuffer[y+extra_top]; |
541 | | |
542 | 13.9M | for (int x=0;x<nPbW;x++) { |
543 | 12.5M | *o = (-p[0]+4*p[1]-11*p[2]+40*p[3]+40*p[4]-11*p[5]+4*p[6]-p[7])>>shift1; |
544 | 12.5M | o += nPbH_extra; |
545 | 12.5M | p++; |
546 | 12.5M | } |
547 | 1.36M | } |
548 | 101k | break; |
549 | 126k | case 3: |
550 | 1.83M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { |
551 | 1.70M | const pixel_t* p = src + srcstride*y - extra_left; |
552 | 1.70M | int16_t* o = &mcbuffer[y+extra_top]; |
553 | | |
554 | 18.6M | for (int x=0;x<nPbW;x++) { |
555 | 16.9M | *o = ( p[0]-5*p[1]+17*p[2]+58*p[3]-10*p[4] +4*p[5] -p[6])>>shift1; |
556 | 16.9M | o += nPbH_extra; |
557 | 16.9M | p++; |
558 | 16.9M | } |
559 | 1.70M | } |
560 | 126k | break; |
561 | 449k | } |
562 | | |
563 | | |
564 | 449k | logtrace(LogMotion,"---H---\n"); |
565 | | |
566 | 6.64M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { |
567 | 65.5M | for (int x=0;x<nPbW;x++) { |
568 | 59.3M | logtrace(LogMotion,"%04x ",mcbuffer[y+extra_top + x*nPbH_extra]); |
569 | 59.3M | } |
570 | 6.19M | logtrace(LogMotion,"\n"); |
571 | 6.19M | } |
572 | | |
573 | | // V-filters |
574 | | |
575 | 449k | int vshift = (xFracL==0 ? shift1 : shift2); |
576 | | |
577 | 449k | switch (yFracL) { |
578 | 91.5k | case 0: |
579 | 887k | for (int x=0;x<nPbW;x++) { |
580 | 796k | const int16_t* p = &mcbuffer[x*nPbH_extra]; |
581 | 796k | int16_t* o = &out[x]; |
582 | | |
583 | 9.35M | for (int y=0;y<nPbH;y++) { |
584 | 8.56M | *o = *p; |
585 | 8.56M | o+=out_stride; |
586 | 8.56M | p++; |
587 | 8.56M | } |
588 | 796k | } |
589 | 91.5k | break; |
590 | 129k | case 1: |
591 | 1.22M | for (int x=0;x<nPbW;x++) { |
592 | 1.09M | const int16_t* p = &mcbuffer[x*nPbH_extra]; |
593 | 1.09M | int16_t* o = &out[x]; |
594 | | |
595 | 12.4M | for (int y=0;y<nPbH;y++) { |
596 | 11.3M | *o = (-p[0]+4*p[1]-10*p[2]+58*p[3]+17*p[4] -5*p[5] +p[6])>>vshift; |
597 | 11.3M | o+=out_stride; |
598 | 11.3M | p++; |
599 | 11.3M | } |
600 | 1.09M | } |
601 | 129k | break; |
602 | 100k | case 2: |
603 | 930k | for (int x=0;x<nPbW;x++) { |
604 | 830k | const int16_t* p = &mcbuffer[x*nPbH_extra]; |
605 | 830k | int16_t* o = &out[x]; |
606 | | |
607 | 9.51M | for (int y=0;y<nPbH;y++) { |
608 | 8.68M | *o = (-p[0]+4*p[1]-11*p[2]+40*p[3]+40*p[4]-11*p[5]+4*p[6]-p[7])>>vshift; |
609 | 8.68M | o+=out_stride; |
610 | 8.68M | p++; |
611 | 8.68M | } |
612 | 830k | } |
613 | 100k | break; |
614 | 127k | case 3: |
615 | 1.22M | for (int x=0;x<nPbW;x++) { |
616 | 1.09M | const int16_t* p = &mcbuffer[x*nPbH_extra]; |
617 | 1.09M | int16_t* o = &out[x]; |
618 | | |
619 | 12.8M | for (int y=0;y<nPbH;y++) { |
620 | 11.7M | *o = ( p[0]-5*p[1]+17*p[2]+58*p[3]-10*p[4] +4*p[5] -p[6])>>vshift; |
621 | 11.7M | o+=out_stride; |
622 | 11.7M | p++; |
623 | 11.7M | } |
624 | 1.09M | } |
625 | 127k | break; |
626 | 449k | } |
627 | | |
628 | | |
629 | 449k | logtrace(LogMotion,"---V---\n"); |
630 | 4.40M | for (int y=0;y<nPbH;y++) { |
631 | 44.3M | for (int x=0;x<nPbW;x++) { |
632 | 40.3M | logtrace(LogMotion,"%04x ",out[x+y*out_stride]); |
633 | 40.3M | } |
634 | 3.95M | logtrace(LogMotion,"\n"); |
635 | 3.95M | } |
636 | 449k | } Unexecuted instantiation: void put_qpel_fallback<unsigned char>(short*, long, unsigned char const*, long, int, int, short*, int, int, int) void put_qpel_fallback<unsigned short>(short*, long, unsigned short const*, long, int, int, short*, int, int, int) Line | Count | Source | 497 | 449k | { | 498 | 449k | int extra_left = extra_before[xFracL]; | 499 | | //int extra_right = extra_after [xFracL]; | 500 | 449k | int extra_top = extra_before[yFracL]; | 501 | 449k | int extra_bottom = extra_after [yFracL]; | 502 | | | 503 | | //int nPbW_extra = extra_left + nPbW + extra_right; | 504 | 449k | int nPbH_extra = extra_top + nPbH + extra_bottom; | 505 | | | 506 | 449k | const int shift1 = bit_depth-8; | 507 | 449k | const int shift2 = 6; | 508 | | | 509 | | | 510 | | // H-filters | 511 | | | 512 | 449k | switch (xFracL) { | 513 | 94.1k | case 0: | 514 | 1.51M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { | 515 | 1.41M | const pixel_t* p = src + srcstride*y - extra_left; | 516 | 1.41M | int16_t* o = &mcbuffer[y+extra_top]; | 517 | | | 518 | 15.3M | for (int x=0;x<nPbW;x++) { | 519 | 13.9M | *o = *p; | 520 | 13.9M | o += nPbH_extra; | 521 | 13.9M | p++; | 522 | 13.9M | } | 523 | 1.41M | } | 524 | 94.1k | break; | 525 | 126k | case 1: | 526 | 1.83M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { | 527 | 1.70M | const pixel_t* p = src + srcstride*y - extra_left; | 528 | 1.70M | int16_t* o = &mcbuffer[y+extra_top]; | 529 | | | 530 | 17.6M | for (int x=0;x<nPbW;x++) { | 531 | 15.9M | *o = (-p[0]+4*p[1]-10*p[2]+58*p[3]+17*p[4] -5*p[5] +p[6])>>shift1; | 532 | 15.9M | o += nPbH_extra; | 533 | 15.9M | p++; | 534 | 15.9M | } | 535 | 1.70M | } | 536 | 126k | break; | 537 | 101k | case 2: | 538 | 1.47M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { | 539 | 1.36M | const pixel_t* p = src + srcstride*y - extra_left; | 540 | 1.36M | int16_t* o = &mcbuffer[y+extra_top]; | 541 | | | 542 | 13.9M | for (int x=0;x<nPbW;x++) { | 543 | 12.5M | *o = (-p[0]+4*p[1]-11*p[2]+40*p[3]+40*p[4]-11*p[5]+4*p[6]-p[7])>>shift1; | 544 | 12.5M | o += nPbH_extra; | 545 | 12.5M | p++; | 546 | 12.5M | } | 547 | 1.36M | } | 548 | 101k | break; | 549 | 126k | case 3: | 550 | 1.83M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { | 551 | 1.70M | const pixel_t* p = src + srcstride*y - extra_left; | 552 | 1.70M | int16_t* o = &mcbuffer[y+extra_top]; | 553 | | | 554 | 18.6M | for (int x=0;x<nPbW;x++) { | 555 | 16.9M | *o = ( p[0]-5*p[1]+17*p[2]+58*p[3]-10*p[4] +4*p[5] -p[6])>>shift1; | 556 | 16.9M | o += nPbH_extra; | 557 | 16.9M | p++; | 558 | 16.9M | } | 559 | 1.70M | } | 560 | 126k | break; | 561 | 449k | } | 562 | | | 563 | | | 564 | 449k | logtrace(LogMotion,"---H---\n"); | 565 | | | 566 | 6.64M | for (int y=-extra_top;y<nPbH+extra_bottom;y++) { | 567 | 65.5M | for (int x=0;x<nPbW;x++) { | 568 | 59.3M | logtrace(LogMotion,"%04x ",mcbuffer[y+extra_top + x*nPbH_extra]); | 569 | 59.3M | } | 570 | 6.19M | logtrace(LogMotion,"\n"); | 571 | 6.19M | } | 572 | | | 573 | | // V-filters | 574 | | | 575 | 449k | int vshift = (xFracL==0 ? shift1 : shift2); | 576 | | | 577 | 449k | switch (yFracL) { | 578 | 91.5k | case 0: | 579 | 887k | for (int x=0;x<nPbW;x++) { | 580 | 796k | const int16_t* p = &mcbuffer[x*nPbH_extra]; | 581 | 796k | int16_t* o = &out[x]; | 582 | | | 583 | 9.35M | for (int y=0;y<nPbH;y++) { | 584 | 8.56M | *o = *p; | 585 | 8.56M | o+=out_stride; | 586 | 8.56M | p++; | 587 | 8.56M | } | 588 | 796k | } | 589 | 91.5k | break; | 590 | 129k | case 1: | 591 | 1.22M | for (int x=0;x<nPbW;x++) { | 592 | 1.09M | const int16_t* p = &mcbuffer[x*nPbH_extra]; | 593 | 1.09M | int16_t* o = &out[x]; | 594 | | | 595 | 12.4M | for (int y=0;y<nPbH;y++) { | 596 | 11.3M | *o = (-p[0]+4*p[1]-10*p[2]+58*p[3]+17*p[4] -5*p[5] +p[6])>>vshift; | 597 | 11.3M | o+=out_stride; | 598 | 11.3M | p++; | 599 | 11.3M | } | 600 | 1.09M | } | 601 | 129k | break; | 602 | 100k | case 2: | 603 | 930k | for (int x=0;x<nPbW;x++) { | 604 | 830k | const int16_t* p = &mcbuffer[x*nPbH_extra]; | 605 | 830k | int16_t* o = &out[x]; | 606 | | | 607 | 9.51M | for (int y=0;y<nPbH;y++) { | 608 | 8.68M | *o = (-p[0]+4*p[1]-11*p[2]+40*p[3]+40*p[4]-11*p[5]+4*p[6]-p[7])>>vshift; | 609 | 8.68M | o+=out_stride; | 610 | 8.68M | p++; | 611 | 8.68M | } | 612 | 830k | } | 613 | 100k | break; | 614 | 127k | case 3: | 615 | 1.22M | for (int x=0;x<nPbW;x++) { | 616 | 1.09M | const int16_t* p = &mcbuffer[x*nPbH_extra]; | 617 | 1.09M | int16_t* o = &out[x]; | 618 | | | 619 | 12.8M | for (int y=0;y<nPbH;y++) { | 620 | 11.7M | *o = ( p[0]-5*p[1]+17*p[2]+58*p[3]-10*p[4] +4*p[5] -p[6])>>vshift; | 621 | 11.7M | o+=out_stride; | 622 | 11.7M | p++; | 623 | 11.7M | } | 624 | 1.09M | } | 625 | 127k | break; | 626 | 449k | } | 627 | | | 628 | | | 629 | 449k | logtrace(LogMotion,"---V---\n"); | 630 | 4.40M | for (int y=0;y<nPbH;y++) { | 631 | 44.3M | for (int x=0;x<nPbW;x++) { | 632 | 40.3M | logtrace(LogMotion,"%04x ",out[x+y*out_stride]); | 633 | 40.3M | } | 634 | 3.95M | logtrace(LogMotion,"\n"); | 635 | 3.95M | } | 636 | 449k | } |
|
637 | | |
638 | | |
639 | | |
640 | | #define QPEL(x,y) void put_qpel_ ## x ## _ ## y ## _fallback(int16_t *out, ptrdiff_t out_stride, \ |
641 | | const uint8_t *src, ptrdiff_t srcstride, \ |
642 | | int nPbW, int nPbH, int16_t* mcbuffer) \ |
643 | 0 | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, 8 ); }Unexecuted instantiation: put_qpel_0_1_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_0_2_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_0_3_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_1_0_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_1_1_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_1_2_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_1_3_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_2_0_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_2_1_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_2_2_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_2_3_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_3_0_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_3_1_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_3_2_fallback(short*, long, unsigned char const*, long, int, int, short*) Unexecuted instantiation: put_qpel_3_3_fallback(short*, long, unsigned char const*, long, int, int, short*) |
644 | | |
645 | | |
646 | | #define QPEL16(x,y) void put_qpel_ ## x ## _ ## y ## _fallback_16(int16_t *out, ptrdiff_t out_stride, \ |
647 | | const uint16_t *src, ptrdiff_t srcstride, \ |
648 | 449k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ |
649 | 449k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); }put_qpel_0_1_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 32.2k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 32.2k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_0_2_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 29.1k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 29.1k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_0_3_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 32.6k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 32.6k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_1_0_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 33.2k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 33.2k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_1_1_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 45.7k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 45.7k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_1_2_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 17.8k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 17.8k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_1_3_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 29.4k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 29.4k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_2_0_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 24.6k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 24.6k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_2_1_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 22.4k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 22.4k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_2_2_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 38.7k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 38.7k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_2_3_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 15.9k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 15.9k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_3_0_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 33.6k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 33.6k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_3_1_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 29.1k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 29.1k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_3_2_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 14.5k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 14.5k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
put_qpel_3_3_fallback_16(short*, long, unsigned short const*, long, int, int, short*, int) Line | Count | Source | 648 | 49.3k | int nPbW, int nPbH, int16_t* mcbuffer, int bit_depth) \ | 649 | 49.3k | { put_qpel_fallback(out,out_stride, src,srcstride, nPbW,nPbH,mcbuffer,x,y, bit_depth ); } |
|
650 | | |
651 | | /* */ QPEL(0,1) QPEL(0,2) QPEL(0,3) |
652 | | QPEL(1,0) QPEL(1,1) QPEL(1,2) QPEL(1,3) |
653 | | QPEL(2,0) QPEL(2,1) QPEL(2,2) QPEL(2,3) |
654 | | QPEL(3,0) QPEL(3,1) QPEL(3,2) QPEL(3,3) |
655 | | |
656 | | /* */ QPEL16(0,1) QPEL16(0,2) QPEL16(0,3) |
657 | | QPEL16(1,0) QPEL16(1,1) QPEL16(1,2) QPEL16(1,3) |
658 | | QPEL16(2,0) QPEL16(2,1) QPEL16(2,2) QPEL16(2,3) |
659 | | QPEL16(3,0) QPEL16(3,1) QPEL16(3,2) QPEL16(3,3) |