h264pred_template.c
Go to the documentation of this file.
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
3  * Copyright (c) 2003-2011 Michael Niedermayer <michaelni@gmx.at>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg 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 GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * H.264 / AVC / MPEG4 part10 prediction functions.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #include "mathops.h"
29 
30 #include "bit_depth_template.c"
31 
32 static void FUNCC(pred4x4_vertical)(uint8_t *_src, const uint8_t *topright,
33  ptrdiff_t _stride)
34 {
35  pixel *src = (pixel*)_src;
36  int stride = _stride>>(sizeof(pixel)-1);
37  const pixel4 a= AV_RN4PA(src-stride);
38 
39  AV_WN4PA(src+0*stride, a);
40  AV_WN4PA(src+1*stride, a);
41  AV_WN4PA(src+2*stride, a);
42  AV_WN4PA(src+3*stride, a);
43 }
44 
45 static void FUNCC(pred4x4_horizontal)(uint8_t *_src, const uint8_t *topright,
46  ptrdiff_t _stride)
47 {
48  pixel *src = (pixel*)_src;
49  int stride = _stride>>(sizeof(pixel)-1);
50  AV_WN4PA(src+0*stride, PIXEL_SPLAT_X4(src[-1+0*stride]));
51  AV_WN4PA(src+1*stride, PIXEL_SPLAT_X4(src[-1+1*stride]));
52  AV_WN4PA(src+2*stride, PIXEL_SPLAT_X4(src[-1+2*stride]));
53  AV_WN4PA(src+3*stride, PIXEL_SPLAT_X4(src[-1+3*stride]));
54 }
55 
56 static void FUNCC(pred4x4_dc)(uint8_t *_src, const uint8_t *topright,
57  ptrdiff_t _stride)
58 {
59  pixel *src = (pixel*)_src;
60  int stride = _stride>>(sizeof(pixel)-1);
61  const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride]
62  + src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 4) >>3;
63  const pixel4 a = PIXEL_SPLAT_X4(dc);
64 
65  AV_WN4PA(src+0*stride, a);
66  AV_WN4PA(src+1*stride, a);
67  AV_WN4PA(src+2*stride, a);
68  AV_WN4PA(src+3*stride, a);
69 }
70 
71 static void FUNCC(pred4x4_left_dc)(uint8_t *_src, const uint8_t *topright,
72  ptrdiff_t _stride)
73 {
74  pixel *src = (pixel*)_src;
75  int stride = _stride>>(sizeof(pixel)-1);
76  const int dc= ( src[-1+0*stride] + src[-1+1*stride] + src[-1+2*stride] + src[-1+3*stride] + 2) >>2;
77  const pixel4 a = PIXEL_SPLAT_X4(dc);
78 
79  AV_WN4PA(src+0*stride, a);
80  AV_WN4PA(src+1*stride, a);
81  AV_WN4PA(src+2*stride, a);
82  AV_WN4PA(src+3*stride, a);
83 }
84 
85 static void FUNCC(pred4x4_top_dc)(uint8_t *_src, const uint8_t *topright,
86  ptrdiff_t _stride)
87 {
88  pixel *src = (pixel*)_src;
89  int stride = _stride>>(sizeof(pixel)-1);
90  const int dc= ( src[-stride] + src[1-stride] + src[2-stride] + src[3-stride] + 2) >>2;
91  const pixel4 a = PIXEL_SPLAT_X4(dc);
92 
93  AV_WN4PA(src+0*stride, a);
94  AV_WN4PA(src+1*stride, a);
95  AV_WN4PA(src+2*stride, a);
96  AV_WN4PA(src+3*stride, a);
97 }
98 
99 static void FUNCC(pred4x4_128_dc)(uint8_t *_src, const uint8_t *topright,
100  ptrdiff_t _stride)
101 {
102  pixel *src = (pixel*)_src;
103  int stride = _stride>>(sizeof(pixel)-1);
104  const pixel4 a = PIXEL_SPLAT_X4(1<<(BIT_DEPTH-1));
105 
106  AV_WN4PA(src+0*stride, a);
107  AV_WN4PA(src+1*stride, a);
108  AV_WN4PA(src+2*stride, a);
109  AV_WN4PA(src+3*stride, a);
110 }
111 
112 static void FUNCC(pred4x4_127_dc)(uint8_t *_src, const uint8_t *topright,
113  ptrdiff_t _stride)
114 {
115  pixel *src = (pixel*)_src;
116  int stride = _stride>>(sizeof(pixel)-1);
117  const pixel4 a = PIXEL_SPLAT_X4((1<<(BIT_DEPTH-1))-1);
118 
119  AV_WN4PA(src+0*stride, a);
120  AV_WN4PA(src+1*stride, a);
121  AV_WN4PA(src+2*stride, a);
122  AV_WN4PA(src+3*stride, a);
123 }
124 
125 static void FUNCC(pred4x4_129_dc)(uint8_t *_src, const uint8_t *topright,
126  ptrdiff_t _stride)
127 {
128  pixel *src = (pixel*)_src;
129  int stride = _stride>>(sizeof(pixel)-1);
130  const pixel4 a = PIXEL_SPLAT_X4((1<<(BIT_DEPTH-1))+1);
131 
132  AV_WN4PA(src+0*stride, a);
133  AV_WN4PA(src+1*stride, a);
134  AV_WN4PA(src+2*stride, a);
135  AV_WN4PA(src+3*stride, a);
136 }
137 
138 
139 #define LOAD_TOP_RIGHT_EDGE\
140  const unsigned av_unused t4 = topright[0];\
141  const unsigned av_unused t5 = topright[1];\
142  const unsigned av_unused t6 = topright[2];\
143  const unsigned av_unused t7 = topright[3];\
144 
145 #define LOAD_DOWN_LEFT_EDGE\
146  const unsigned av_unused l4 = src[-1+4*stride];\
147  const unsigned av_unused l5 = src[-1+5*stride];\
148  const unsigned av_unused l6 = src[-1+6*stride];\
149  const unsigned av_unused l7 = src[-1+7*stride];\
150 
151 #define LOAD_LEFT_EDGE\
152  const unsigned av_unused l0 = src[-1+0*stride];\
153  const unsigned av_unused l1 = src[-1+1*stride];\
154  const unsigned av_unused l2 = src[-1+2*stride];\
155  const unsigned av_unused l3 = src[-1+3*stride];\
156 
157 #define LOAD_TOP_EDGE\
158  const unsigned av_unused t0 = src[ 0-1*stride];\
159  const unsigned av_unused t1 = src[ 1-1*stride];\
160  const unsigned av_unused t2 = src[ 2-1*stride];\
161  const unsigned av_unused t3 = src[ 3-1*stride];\
162 
163 static void FUNCC(pred4x4_down_right)(uint8_t *_src, const uint8_t *topright,
164  ptrdiff_t _stride)
165 {
166  pixel *src = (pixel*)_src;
167  int stride = _stride>>(sizeof(pixel)-1);
168  const int lt= src[-1-1*stride];
171 
172  src[0+3*stride]=(l3 + 2*l2 + l1 + 2)>>2;
173  src[0+2*stride]=
174  src[1+3*stride]=(l2 + 2*l1 + l0 + 2)>>2;
175  src[0+1*stride]=
176  src[1+2*stride]=
177  src[2+3*stride]=(l1 + 2*l0 + lt + 2)>>2;
178  src[0+0*stride]=
179  src[1+1*stride]=
180  src[2+2*stride]=
181  src[3+3*stride]=(l0 + 2*lt + t0 + 2)>>2;
182  src[1+0*stride]=
183  src[2+1*stride]=
184  src[3+2*stride]=(lt + 2*t0 + t1 + 2)>>2;
185  src[2+0*stride]=
186  src[3+1*stride]=(t0 + 2*t1 + t2 + 2)>>2;
187  src[3+0*stride]=(t1 + 2*t2 + t3 + 2)>>2;
188 }
189 
190 static void FUNCC(pred4x4_down_left)(uint8_t *_src, const uint8_t *_topright,
191  ptrdiff_t _stride)
192 {
193  pixel *src = (pixel*)_src;
194  const pixel *topright = (const pixel*)_topright;
195  int stride = _stride>>(sizeof(pixel)-1);
198 // LOAD_LEFT_EDGE
199 
200  src[0+0*stride]=(t0 + t2 + 2*t1 + 2)>>2;
201  src[1+0*stride]=
202  src[0+1*stride]=(t1 + t3 + 2*t2 + 2)>>2;
203  src[2+0*stride]=
204  src[1+1*stride]=
205  src[0+2*stride]=(t2 + t4 + 2*t3 + 2)>>2;
206  src[3+0*stride]=
207  src[2+1*stride]=
208  src[1+2*stride]=
209  src[0+3*stride]=(t3 + t5 + 2*t4 + 2)>>2;
210  src[3+1*stride]=
211  src[2+2*stride]=
212  src[1+3*stride]=(t4 + t6 + 2*t5 + 2)>>2;
213  src[3+2*stride]=
214  src[2+3*stride]=(t5 + t7 + 2*t6 + 2)>>2;
215  src[3+3*stride]=(t6 + 3*t7 + 2)>>2;
216 }
217 
219  const uint8_t *topright,
220  ptrdiff_t _stride)
221 {
222  pixel *src = (pixel*)_src;
223  int stride = _stride>>(sizeof(pixel)-1);
224  const int lt= src[-1-1*stride];
227 
228  src[0+0*stride]=
229  src[1+2*stride]=(lt + t0 + 1)>>1;
230  src[1+0*stride]=
231  src[2+2*stride]=(t0 + t1 + 1)>>1;
232  src[2+0*stride]=
233  src[3+2*stride]=(t1 + t2 + 1)>>1;
234  src[3+0*stride]=(t2 + t3 + 1)>>1;
235  src[0+1*stride]=
236  src[1+3*stride]=(l0 + 2*lt + t0 + 2)>>2;
237  src[1+1*stride]=
238  src[2+3*stride]=(lt + 2*t0 + t1 + 2)>>2;
239  src[2+1*stride]=
240  src[3+3*stride]=(t0 + 2*t1 + t2 + 2)>>2;
241  src[3+1*stride]=(t1 + 2*t2 + t3 + 2)>>2;
242  src[0+2*stride]=(lt + 2*l0 + l1 + 2)>>2;
243  src[0+3*stride]=(l0 + 2*l1 + l2 + 2)>>2;
244 }
245 
247  const uint8_t *_topright,
248  ptrdiff_t _stride)
249 {
250  pixel *src = (pixel*)_src;
251  const pixel *topright = (const pixel*)_topright;
252  int stride = _stride>>(sizeof(pixel)-1);
255 
256  src[0+0*stride]=(t0 + t1 + 1)>>1;
257  src[1+0*stride]=
258  src[0+2*stride]=(t1 + t2 + 1)>>1;
259  src[2+0*stride]=
260  src[1+2*stride]=(t2 + t3 + 1)>>1;
261  src[3+0*stride]=
262  src[2+2*stride]=(t3 + t4+ 1)>>1;
263  src[3+2*stride]=(t4 + t5+ 1)>>1;
264  src[0+1*stride]=(t0 + 2*t1 + t2 + 2)>>2;
265  src[1+1*stride]=
266  src[0+3*stride]=(t1 + 2*t2 + t3 + 2)>>2;
267  src[2+1*stride]=
268  src[1+3*stride]=(t2 + 2*t3 + t4 + 2)>>2;
269  src[3+1*stride]=
270  src[2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2;
271  src[3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2;
272 }
273 
274 static void FUNCC(pred4x4_horizontal_up)(uint8_t *_src, const uint8_t *topright,
275  ptrdiff_t _stride)
276 {
277  pixel *src = (pixel*)_src;
278  int stride = _stride>>(sizeof(pixel)-1);
280 
281  src[0+0*stride]=(l0 + l1 + 1)>>1;
282  src[1+0*stride]=(l0 + 2*l1 + l2 + 2)>>2;
283  src[2+0*stride]=
284  src[0+1*stride]=(l1 + l2 + 1)>>1;
285  src[3+0*stride]=
286  src[1+1*stride]=(l1 + 2*l2 + l3 + 2)>>2;
287  src[2+1*stride]=
288  src[0+2*stride]=(l2 + l3 + 1)>>1;
289  src[3+1*stride]=
290  src[1+2*stride]=(l2 + 2*l3 + l3 + 2)>>2;
291  src[3+2*stride]=
292  src[1+3*stride]=
293  src[0+3*stride]=
294  src[2+2*stride]=
295  src[2+3*stride]=
296  src[3+3*stride]=l3;
297 }
298 
300  const uint8_t *topright,
301  ptrdiff_t _stride)
302 {
303  pixel *src = (pixel*)_src;
304  int stride = _stride>>(sizeof(pixel)-1);
305  const int lt= src[-1-1*stride];
308 
309  src[0+0*stride]=
310  src[2+1*stride]=(lt + l0 + 1)>>1;
311  src[1+0*stride]=
312  src[3+1*stride]=(l0 + 2*lt + t0 + 2)>>2;
313  src[2+0*stride]=(lt + 2*t0 + t1 + 2)>>2;
314  src[3+0*stride]=(t0 + 2*t1 + t2 + 2)>>2;
315  src[0+1*stride]=
316  src[2+2*stride]=(l0 + l1 + 1)>>1;
317  src[1+1*stride]=
318  src[3+2*stride]=(lt + 2*l0 + l1 + 2)>>2;
319  src[0+2*stride]=
320  src[2+3*stride]=(l1 + l2+ 1)>>1;
321  src[1+2*stride]=
322  src[3+3*stride]=(l0 + 2*l1 + l2 + 2)>>2;
323  src[0+3*stride]=(l2 + l3 + 1)>>1;
324  src[1+3*stride]=(l1 + 2*l2 + l3 + 2)>>2;
325 }
326 
327 static void FUNCC(pred16x16_vertical)(uint8_t *_src, ptrdiff_t _stride)
328 {
329  int i;
330  pixel *src = (pixel*)_src;
331  int stride = _stride>>(sizeof(pixel)-1);
332  const pixel4 a = AV_RN4PA(((pixel4*)(src-stride))+0);
333  const pixel4 b = AV_RN4PA(((pixel4*)(src-stride))+1);
334  const pixel4 c = AV_RN4PA(((pixel4*)(src-stride))+2);
335  const pixel4 d = AV_RN4PA(((pixel4*)(src-stride))+3);
336 
337  for(i=0; i<16; i++){
338  AV_WN4PA(((pixel4*)(src+i*stride))+0, a);
339  AV_WN4PA(((pixel4*)(src+i*stride))+1, b);
340  AV_WN4PA(((pixel4*)(src+i*stride))+2, c);
341  AV_WN4PA(((pixel4*)(src+i*stride))+3, d);
342  }
343 }
344 
345 static void FUNCC(pred16x16_horizontal)(uint8_t *_src, ptrdiff_t stride)
346 {
347  int i;
348  pixel *src = (pixel*)_src;
349  stride >>= sizeof(pixel)-1;
350 
351  for(i=0; i<16; i++){
352  const pixel4 a = PIXEL_SPLAT_X4(src[-1+i*stride]);
353 
354  AV_WN4PA(((pixel4*)(src+i*stride))+0, a);
355  AV_WN4PA(((pixel4*)(src+i*stride))+1, a);
356  AV_WN4PA(((pixel4*)(src+i*stride))+2, a);
357  AV_WN4PA(((pixel4*)(src+i*stride))+3, a);
358  }
359 }
360 
361 #define PREDICT_16x16_DC(v)\
362  for(i=0; i<16; i++){\
363  AV_WN4PA(src+ 0, v);\
364  AV_WN4PA(src+ 4, v);\
365  AV_WN4PA(src+ 8, v);\
366  AV_WN4PA(src+12, v);\
367  src += stride;\
368  }
369 
370 static void FUNCC(pred16x16_dc)(uint8_t *_src, ptrdiff_t stride)
371 {
372  int i, dc=0;
373  pixel *src = (pixel*)_src;
374  pixel4 dcsplat;
375  stride >>= sizeof(pixel)-1;
376 
377  for(i=0;i<16; i++){
378  dc+= src[-1+i*stride];
379  }
380 
381  for(i=0;i<16; i++){
382  dc+= src[i-stride];
383  }
384 
385  dcsplat = PIXEL_SPLAT_X4((dc+16)>>5);
386  PREDICT_16x16_DC(dcsplat);
387 }
388 
389 static void FUNCC(pred16x16_left_dc)(uint8_t *_src, ptrdiff_t stride)
390 {
391  int i, dc=0;
392  pixel *src = (pixel*)_src;
393  pixel4 dcsplat;
394  stride >>= sizeof(pixel)-1;
395 
396  for(i=0;i<16; i++){
397  dc+= src[-1+i*stride];
398  }
399 
400  dcsplat = PIXEL_SPLAT_X4((dc+8)>>4);
401  PREDICT_16x16_DC(dcsplat);
402 }
403 
404 static void FUNCC(pred16x16_top_dc)(uint8_t *_src, ptrdiff_t stride)
405 {
406  int i, dc=0;
407  pixel *src = (pixel*)_src;
408  pixel4 dcsplat;
409  stride >>= sizeof(pixel)-1;
410 
411  for(i=0;i<16; i++){
412  dc+= src[i-stride];
413  }
414 
415  dcsplat = PIXEL_SPLAT_X4((dc+8)>>4);
416  PREDICT_16x16_DC(dcsplat);
417 }
418 
419 #define PRED16x16_X(n, v) \
420 static void FUNCC(pred16x16_##n##_dc)(uint8_t *_src, ptrdiff_t stride)\
421 {\
422  int i;\
423  pixel *src = (pixel*)_src;\
424  stride >>= sizeof(pixel)-1;\
425  PREDICT_16x16_DC(PIXEL_SPLAT_X4(v));\
426 }
427 
428 PRED16x16_X(127, (1<<(BIT_DEPTH-1))-1)
429 PRED16x16_X(128, (1<<(BIT_DEPTH-1))+0)
430 PRED16x16_X(129, (1<<(BIT_DEPTH-1))+1)
431 
432 static inline void FUNCC(pred16x16_plane_compat)(uint8_t *_src,
433  ptrdiff_t _stride,
434  const int svq3,
435  const int rv40)
436 {
437  int i, j, k;
438  int a;
439  INIT_CLIP
440  pixel *src = (pixel*)_src;
441  int stride = _stride>>(sizeof(pixel)-1);
442  const pixel * const src0 = src +7-stride;
443  const pixel * src1 = src +8*stride-1;
444  const pixel * src2 = src1-2*stride; // == src+6*stride-1;
445  int H = src0[1] - src0[-1];
446  int V = src1[0] - src2[ 0];
447  for(k=2; k<=8; ++k) {
448  src1 += stride; src2 -= stride;
449  H += k*(src0[k] - src0[-k]);
450  V += k*(src1[0] - src2[ 0]);
451  }
452  if(svq3){
453  H = ( 5*(H/4) ) / 16;
454  V = ( 5*(V/4) ) / 16;
455 
456  /* required for 100% accuracy */
457  i = H; H = V; V = i;
458  }else if(rv40){
459  H = ( H + (H>>2) ) >> 4;
460  V = ( V + (V>>2) ) >> 4;
461  }else{
462  H = ( 5*H+32 ) >> 6;
463  V = ( 5*V+32 ) >> 6;
464  }
465 
466  a = 16*(src1[0] + src2[16] + 1) - 7*(V+H);
467  for(j=16; j>0; --j) {
468  int b = a;
469  a += V;
470  for(i=-16; i<0; i+=4) {
471  src[16+i] = CLIP((b ) >> 5);
472  src[17+i] = CLIP((b+ H) >> 5);
473  src[18+i] = CLIP((b+2*H) >> 5);
474  src[19+i] = CLIP((b+3*H) >> 5);
475  b += 4*H;
476  }
477  src += stride;
478  }
479 }
480 
481 static void FUNCC(pred16x16_plane)(uint8_t *src, ptrdiff_t stride)
482 {
483  FUNCC(pred16x16_plane_compat)(src, stride, 0, 0);
484 }
485 
486 static void FUNCC(pred8x8_vertical)(uint8_t *_src, ptrdiff_t _stride)
487 {
488  int i;
489  pixel *src = (pixel*)_src;
490  int stride = _stride>>(sizeof(pixel)-1);
491  const pixel4 a= AV_RN4PA(((pixel4*)(src-stride))+0);
492  const pixel4 b= AV_RN4PA(((pixel4*)(src-stride))+1);
493 
494  for(i=0; i<8; i++){
495  AV_WN4PA(((pixel4*)(src+i*stride))+0, a);
496  AV_WN4PA(((pixel4*)(src+i*stride))+1, b);
497  }
498 }
499 
500 static void FUNCC(pred8x16_vertical)(uint8_t *_src, ptrdiff_t _stride)
501 {
502  int i;
503  pixel *src = (pixel*)_src;
504  int stride = _stride>>(sizeof(pixel)-1);
505  const pixel4 a= AV_RN4PA(((pixel4*)(src-stride))+0);
506  const pixel4 b= AV_RN4PA(((pixel4*)(src-stride))+1);
507 
508  for(i=0; i<16; i++){
509  AV_WN4PA(((pixel4*)(src+i*stride))+0, a);
510  AV_WN4PA(((pixel4*)(src+i*stride))+1, b);
511  }
512 }
513 
514 static void FUNCC(pred8x8_horizontal)(uint8_t *_src, ptrdiff_t stride)
515 {
516  int i;
517  pixel *src = (pixel*)_src;
518  stride >>= sizeof(pixel)-1;
519 
520  for(i=0; i<8; i++){
521  const pixel4 a = PIXEL_SPLAT_X4(src[-1+i*stride]);
522  AV_WN4PA(((pixel4*)(src+i*stride))+0, a);
523  AV_WN4PA(((pixel4*)(src+i*stride))+1, a);
524  }
525 }
526 
527 static void FUNCC(pred8x16_horizontal)(uint8_t *_src, ptrdiff_t stride)
528 {
529  int i;
530  pixel *src = (pixel*)_src;
531  stride >>= sizeof(pixel)-1;
532  for(i=0; i<16; i++){
533  const pixel4 a = PIXEL_SPLAT_X4(src[-1+i*stride]);
534  AV_WN4PA(((pixel4*)(src+i*stride))+0, a);
535  AV_WN4PA(((pixel4*)(src+i*stride))+1, a);
536  }
537 }
538 
539 #define PRED8x8_X(n, v)\
540 static void FUNCC(pred8x8_##n##_dc)(uint8_t *_src, ptrdiff_t stride)\
541 {\
542  int i;\
543  const pixel4 a = PIXEL_SPLAT_X4(v);\
544  pixel *src = (pixel*)_src;\
545  stride >>= sizeof(pixel)-1;\
546  for(i=0; i<8; i++){\
547  AV_WN4PA(((pixel4*)(src+i*stride))+0, a);\
548  AV_WN4PA(((pixel4*)(src+i*stride))+1, a);\
549  }\
550 }
551 
552 PRED8x8_X(127, (1<<(BIT_DEPTH-1))-1)
553 PRED8x8_X(128, (1<<(BIT_DEPTH-1))+0)
554 PRED8x8_X(129, (1<<(BIT_DEPTH-1))+1)
555 
556 static void FUNCC(pred8x16_128_dc)(uint8_t *_src, ptrdiff_t stride)
557 {
558  FUNCC(pred8x8_128_dc)(_src, stride);
559  FUNCC(pred8x8_128_dc)(_src+8*stride, stride);
560 }
561 
562 static void FUNCC(pred8x8_left_dc)(uint8_t *_src, ptrdiff_t stride)
563 {
564  int i;
565  int dc0, dc2;
566  pixel4 dc0splat, dc2splat;
567  pixel *src = (pixel*)_src;
568  stride >>= sizeof(pixel)-1;
569 
570  dc0=dc2=0;
571  for(i=0;i<4; i++){
572  dc0+= src[-1+i*stride];
573  dc2+= src[-1+(i+4)*stride];
574  }
575  dc0splat = PIXEL_SPLAT_X4((dc0 + 2)>>2);
576  dc2splat = PIXEL_SPLAT_X4((dc2 + 2)>>2);
577 
578  for(i=0; i<4; i++){
579  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc0splat);
580  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc0splat);
581  }
582  for(i=4; i<8; i++){
583  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc2splat);
584  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc2splat);
585  }
586 }
587 
588 static void FUNCC(pred8x16_left_dc)(uint8_t *_src, ptrdiff_t stride)
589 {
590  FUNCC(pred8x8_left_dc)(_src, stride);
591  FUNCC(pred8x8_left_dc)(_src+8*stride, stride);
592 }
593 
594 static void FUNCC(pred8x8_top_dc)(uint8_t *_src, ptrdiff_t stride)
595 {
596  int i;
597  int dc0, dc1;
598  pixel4 dc0splat, dc1splat;
599  pixel *src = (pixel*)_src;
600  stride >>= sizeof(pixel)-1;
601 
602  dc0=dc1=0;
603  for(i=0;i<4; i++){
604  dc0+= src[i-stride];
605  dc1+= src[4+i-stride];
606  }
607  dc0splat = PIXEL_SPLAT_X4((dc0 + 2)>>2);
608  dc1splat = PIXEL_SPLAT_X4((dc1 + 2)>>2);
609 
610  for(i=0; i<4; i++){
611  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc0splat);
612  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc1splat);
613  }
614  for(i=4; i<8; i++){
615  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc0splat);
616  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc1splat);
617  }
618 }
619 
620 static void FUNCC(pred8x16_top_dc)(uint8_t *_src, ptrdiff_t stride)
621 {
622  int i;
623  int dc0, dc1;
624  pixel4 dc0splat, dc1splat;
625  pixel *src = (pixel*)_src;
626  stride >>= sizeof(pixel)-1;
627 
628  dc0=dc1=0;
629  for(i=0;i<4; i++){
630  dc0+= src[i-stride];
631  dc1+= src[4+i-stride];
632  }
633  dc0splat = PIXEL_SPLAT_X4((dc0 + 2)>>2);
634  dc1splat = PIXEL_SPLAT_X4((dc1 + 2)>>2);
635 
636  for(i=0; i<16; i++){
637  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc0splat);
638  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc1splat);
639  }
640 }
641 
642 static void FUNCC(pred8x8_dc)(uint8_t *_src, ptrdiff_t stride)
643 {
644  int i;
645  int dc0, dc1, dc2;
646  pixel4 dc0splat, dc1splat, dc2splat, dc3splat;
647  pixel *src = (pixel*)_src;
648  stride >>= sizeof(pixel)-1;
649 
650  dc0=dc1=dc2=0;
651  for(i=0;i<4; i++){
652  dc0+= src[-1+i*stride] + src[i-stride];
653  dc1+= src[4+i-stride];
654  dc2+= src[-1+(i+4)*stride];
655  }
656  dc0splat = PIXEL_SPLAT_X4((dc0 + 4)>>3);
657  dc1splat = PIXEL_SPLAT_X4((dc1 + 2)>>2);
658  dc2splat = PIXEL_SPLAT_X4((dc2 + 2)>>2);
659  dc3splat = PIXEL_SPLAT_X4((dc1 + dc2 + 4)>>3);
660 
661  for(i=0; i<4; i++){
662  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc0splat);
663  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc1splat);
664  }
665  for(i=4; i<8; i++){
666  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc2splat);
667  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc3splat);
668  }
669 }
670 
671 static void FUNCC(pred8x16_dc)(uint8_t *_src, ptrdiff_t stride)
672 {
673  int i;
674  int dc0, dc1, dc2, dc3, dc4;
675  pixel4 dc0splat, dc1splat, dc2splat, dc3splat, dc4splat, dc5splat, dc6splat, dc7splat;
676  pixel *src = (pixel*)_src;
677  stride >>= sizeof(pixel)-1;
678 
679  dc0=dc1=dc2=dc3=dc4=0;
680  for(i=0;i<4; i++){
681  dc0+= src[-1+i*stride] + src[i-stride];
682  dc1+= src[4+i-stride];
683  dc2+= src[-1+(i+4)*stride];
684  dc3+= src[-1+(i+8)*stride];
685  dc4+= src[-1+(i+12)*stride];
686  }
687  dc0splat = PIXEL_SPLAT_X4((dc0 + 4)>>3);
688  dc1splat = PIXEL_SPLAT_X4((dc1 + 2)>>2);
689  dc2splat = PIXEL_SPLAT_X4((dc2 + 2)>>2);
690  dc3splat = PIXEL_SPLAT_X4((dc1 + dc2 + 4)>>3);
691  dc4splat = PIXEL_SPLAT_X4((dc3 + 2)>>2);
692  dc5splat = PIXEL_SPLAT_X4((dc1 + dc3 + 4)>>3);
693  dc6splat = PIXEL_SPLAT_X4((dc4 + 2)>>2);
694  dc7splat = PIXEL_SPLAT_X4((dc1 + dc4 + 4)>>3);
695 
696  for(i=0; i<4; i++){
697  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc0splat);
698  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc1splat);
699  }
700  for(i=4; i<8; i++){
701  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc2splat);
702  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc3splat);
703  }
704  for(i=8; i<12; i++){
705  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc4splat);
706  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc5splat);
707  }
708  for(i=12; i<16; i++){
709  AV_WN4PA(((pixel4*)(src+i*stride))+0, dc6splat);
710  AV_WN4PA(((pixel4*)(src+i*stride))+1, dc7splat);
711  }
712 }
713 
714 //the following 4 function should not be optimized!
715 static void FUNC(pred8x8_mad_cow_dc_l0t)(uint8_t *src, ptrdiff_t stride)
716 {
719 }
720 
721 static void FUNC(pred8x16_mad_cow_dc_l0t)(uint8_t *src, ptrdiff_t stride)
722 {
725 }
726 
727 static void FUNC(pred8x8_mad_cow_dc_0lt)(uint8_t *src, ptrdiff_t stride)
728 {
731 }
732 
733 static void FUNC(pred8x16_mad_cow_dc_0lt)(uint8_t *src, ptrdiff_t stride)
734 {
737 }
738 
739 static void FUNC(pred8x8_mad_cow_dc_l00)(uint8_t *src, ptrdiff_t stride)
740 {
741  FUNCC(pred8x8_left_dc)(src, stride);
742  FUNCC(pred4x4_128_dc)(src + 4*stride , NULL, stride);
743  FUNCC(pred4x4_128_dc)(src + 4*stride + 4*sizeof(pixel), NULL, stride);
744 }
745 
746 static void FUNC(pred8x16_mad_cow_dc_l00)(uint8_t *src, ptrdiff_t stride)
747 {
749  FUNCC(pred4x4_128_dc)(src + 4*stride , NULL, stride);
750  FUNCC(pred4x4_128_dc)(src + 4*stride + 4*sizeof(pixel), NULL, stride);
751 }
752 
753 static void FUNC(pred8x8_mad_cow_dc_0l0)(uint8_t *src, ptrdiff_t stride)
754 {
755  FUNCC(pred8x8_left_dc)(src, stride);
757  FUNCC(pred4x4_128_dc)(src + 4*sizeof(pixel), NULL, stride);
758 }
759 
760 static void FUNC(pred8x16_mad_cow_dc_0l0)(uint8_t *src, ptrdiff_t stride)
761 {
764  FUNCC(pred4x4_128_dc)(src + 4*sizeof(pixel), NULL, stride);
765 }
766 
767 static void FUNCC(pred8x8_plane)(uint8_t *_src, ptrdiff_t _stride)
768 {
769  int j, k;
770  int a;
771  INIT_CLIP
772  pixel *src = (pixel*)_src;
773  int stride = _stride>>(sizeof(pixel)-1);
774  const pixel * const src0 = src +3-stride;
775  const pixel * src1 = src +4*stride-1;
776  const pixel * src2 = src1-2*stride; // == src+2*stride-1;
777  int H = src0[1] - src0[-1];
778  int V = src1[0] - src2[ 0];
779  for(k=2; k<=4; ++k) {
780  src1 += stride; src2 -= stride;
781  H += k*(src0[k] - src0[-k]);
782  V += k*(src1[0] - src2[ 0]);
783  }
784  H = ( 17*H+16 ) >> 5;
785  V = ( 17*V+16 ) >> 5;
786 
787  a = 16*(src1[0] + src2[8]+1) - 3*(V+H);
788  for(j=8; j>0; --j) {
789  int b = a;
790  a += V;
791  src[0] = CLIP((b ) >> 5);
792  src[1] = CLIP((b+ H) >> 5);
793  src[2] = CLIP((b+2*H) >> 5);
794  src[3] = CLIP((b+3*H) >> 5);
795  src[4] = CLIP((b+4*H) >> 5);
796  src[5] = CLIP((b+5*H) >> 5);
797  src[6] = CLIP((b+6*H) >> 5);
798  src[7] = CLIP((b+7*H) >> 5);
799  src += stride;
800  }
801 }
802 
803 static void FUNCC(pred8x16_plane)(uint8_t *_src, ptrdiff_t _stride)
804 {
805  int j, k;
806  int a;
807  INIT_CLIP
808  pixel *src = (pixel*)_src;
809  int stride = _stride>>(sizeof(pixel)-1);
810  const pixel * const src0 = src +3-stride;
811  const pixel * src1 = src +8*stride-1;
812  const pixel * src2 = src1-2*stride; // == src+6*stride-1;
813  int H = src0[1] - src0[-1];
814  int V = src1[0] - src2[ 0];
815 
816  for (k = 2; k <= 4; ++k) {
817  src1 += stride; src2 -= stride;
818  H += k*(src0[k] - src0[-k]);
819  V += k*(src1[0] - src2[ 0]);
820  }
821  for (; k <= 8; ++k) {
822  src1 += stride; src2 -= stride;
823  V += k*(src1[0] - src2[0]);
824  }
825 
826  H = (17*H+16) >> 5;
827  V = (5*V+32) >> 6;
828 
829  a = 16*(src1[0] + src2[8] + 1) - 7*V - 3*H;
830  for(j=16; j>0; --j) {
831  int b = a;
832  a += V;
833  src[0] = CLIP((b ) >> 5);
834  src[1] = CLIP((b+ H) >> 5);
835  src[2] = CLIP((b+2*H) >> 5);
836  src[3] = CLIP((b+3*H) >> 5);
837  src[4] = CLIP((b+4*H) >> 5);
838  src[5] = CLIP((b+5*H) >> 5);
839  src[6] = CLIP((b+6*H) >> 5);
840  src[7] = CLIP((b+7*H) >> 5);
841  src += stride;
842  }
843 }
844 
845 #define SRC(x,y) src[(x)+(y)*stride]
846 #define PL(y) \
847  const int l##y = (SRC(-1,y-1) + 2*SRC(-1,y) + SRC(-1,y+1) + 2) >> 2;
848 #define PREDICT_8x8_LOAD_LEFT \
849  const int l0 = ((has_topleft ? SRC(-1,-1) : SRC(-1,0)) \
850  + 2*SRC(-1,0) + SRC(-1,1) + 2) >> 2; \
851  PL(1) PL(2) PL(3) PL(4) PL(5) PL(6) \
852  const int l7 av_unused = (SRC(-1,6) + 3*SRC(-1,7) + 2) >> 2
853 
854 #define PT(x) \
855  const int t##x = (SRC(x-1,-1) + 2*SRC(x,-1) + SRC(x+1,-1) + 2) >> 2;
856 #define PREDICT_8x8_LOAD_TOP \
857  const int t0 = ((has_topleft ? SRC(-1,-1) : SRC(0,-1)) \
858  + 2*SRC(0,-1) + SRC(1,-1) + 2) >> 2; \
859  PT(1) PT(2) PT(3) PT(4) PT(5) PT(6) \
860  const int t7 av_unused = ((has_topright ? SRC(8,-1) : SRC(7,-1)) \
861  + 2*SRC(7,-1) + SRC(6,-1) + 2) >> 2
862 
863 #define PTR(x) \
864  t##x = (SRC(x-1,-1) + 2*SRC(x,-1) + SRC(x+1,-1) + 2) >> 2;
865 #define PREDICT_8x8_LOAD_TOPRIGHT \
866  int t8, t9, t10, t11, t12, t13, t14, t15; \
867  if(has_topright) { \
868  PTR(8) PTR(9) PTR(10) PTR(11) PTR(12) PTR(13) PTR(14) \
869  t15 = (SRC(14,-1) + 3*SRC(15,-1) + 2) >> 2; \
870  } else t8=t9=t10=t11=t12=t13=t14=t15= SRC(7,-1);
871 
872 #define PREDICT_8x8_LOAD_TOPLEFT \
873  const int lt = (SRC(-1,0) + 2*SRC(-1,-1) + SRC(0,-1) + 2) >> 2
874 
875 #define PREDICT_8x8_DC(v) \
876  int y; \
877  for( y = 0; y < 8; y++ ) { \
878  AV_WN4PA(((pixel4*)src)+0, v); \
879  AV_WN4PA(((pixel4*)src)+1, v); \
880  src += stride; \
881  }
882 
883 static void FUNCC(pred8x8l_128_dc)(uint8_t *_src, int has_topleft,
884  int has_topright, ptrdiff_t _stride)
885 {
886  pixel *src = (pixel*)_src;
887  int stride = _stride>>(sizeof(pixel)-1);
888 
890 }
891 static void FUNCC(pred8x8l_left_dc)(uint8_t *_src, int has_topleft,
892  int has_topright, ptrdiff_t _stride)
893 {
894  pixel *src = (pixel*)_src;
895  int stride = _stride>>(sizeof(pixel)-1);
896 
898  const pixel4 dc = PIXEL_SPLAT_X4((l0+l1+l2+l3+l4+l5+l6+l7+4) >> 3);
899  PREDICT_8x8_DC(dc);
900 }
901 static void FUNCC(pred8x8l_top_dc)(uint8_t *_src, int has_topleft,
902  int has_topright, ptrdiff_t _stride)
903 {
904  pixel *src = (pixel*)_src;
905  int stride = _stride>>(sizeof(pixel)-1);
906 
908  const pixel4 dc = PIXEL_SPLAT_X4((t0+t1+t2+t3+t4+t5+t6+t7+4) >> 3);
909  PREDICT_8x8_DC(dc);
910 }
911 static void FUNCC(pred8x8l_dc)(uint8_t *_src, int has_topleft,
912  int has_topright, ptrdiff_t _stride)
913 {
914  pixel *src = (pixel*)_src;
915  int stride = _stride>>(sizeof(pixel)-1);
916 
919  const pixel4 dc = PIXEL_SPLAT_X4((l0+l1+l2+l3+l4+l5+l6+l7
920  +t0+t1+t2+t3+t4+t5+t6+t7+8) >> 4);
921  PREDICT_8x8_DC(dc);
922 }
923 static void FUNCC(pred8x8l_horizontal)(uint8_t *_src, int has_topleft,
924  int has_topright, ptrdiff_t _stride)
925 {
926  pixel *src = (pixel*)_src;
927  int stride = _stride>>(sizeof(pixel)-1);
928  pixel4 a;
929 
931 #define ROW(y) a = PIXEL_SPLAT_X4(l##y); \
932  AV_WN4PA(src+y*stride, a); \
933  AV_WN4PA(src+y*stride+4, a);
934  ROW(0); ROW(1); ROW(2); ROW(3); ROW(4); ROW(5); ROW(6); ROW(7);
935 #undef ROW
936 }
937 static void FUNCC(pred8x8l_vertical)(uint8_t *_src, int has_topleft,
938  int has_topright, ptrdiff_t _stride)
939 {
940  int y;
941  pixel *src = (pixel*)_src;
942  int stride = _stride>>(sizeof(pixel)-1);
943  pixel4 a, b;
944 
946  src[0] = t0;
947  src[1] = t1;
948  src[2] = t2;
949  src[3] = t3;
950  src[4] = t4;
951  src[5] = t5;
952  src[6] = t6;
953  src[7] = t7;
954  a = AV_RN4PA(((pixel4*)src)+0);
955  b = AV_RN4PA(((pixel4*)src)+1);
956  for( y = 1; y < 8; y++ ) {
957  AV_WN4PA(((pixel4*)(src+y*stride))+0, a);
958  AV_WN4PA(((pixel4*)(src+y*stride))+1, b);
959  }
960 }
961 static void FUNCC(pred8x8l_down_left)(uint8_t *_src, int has_topleft,
962  int has_topright, ptrdiff_t _stride)
963 {
964  pixel *src = (pixel*)_src;
965  int stride = _stride>>(sizeof(pixel)-1);
968  SRC(0,0)= (t0 + 2*t1 + t2 + 2) >> 2;
969  SRC(0,1)=SRC(1,0)= (t1 + 2*t2 + t3 + 2) >> 2;
970  SRC(0,2)=SRC(1,1)=SRC(2,0)= (t2 + 2*t3 + t4 + 2) >> 2;
971  SRC(0,3)=SRC(1,2)=SRC(2,1)=SRC(3,0)= (t3 + 2*t4 + t5 + 2) >> 2;
972  SRC(0,4)=SRC(1,3)=SRC(2,2)=SRC(3,1)=SRC(4,0)= (t4 + 2*t5 + t6 + 2) >> 2;
973  SRC(0,5)=SRC(1,4)=SRC(2,3)=SRC(3,2)=SRC(4,1)=SRC(5,0)= (t5 + 2*t6 + t7 + 2) >> 2;
974  SRC(0,6)=SRC(1,5)=SRC(2,4)=SRC(3,3)=SRC(4,2)=SRC(5,1)=SRC(6,0)= (t6 + 2*t7 + t8 + 2) >> 2;
975  SRC(0,7)=SRC(1,6)=SRC(2,5)=SRC(3,4)=SRC(4,3)=SRC(5,2)=SRC(6,1)=SRC(7,0)= (t7 + 2*t8 + t9 + 2) >> 2;
976  SRC(1,7)=SRC(2,6)=SRC(3,5)=SRC(4,4)=SRC(5,3)=SRC(6,2)=SRC(7,1)= (t8 + 2*t9 + t10 + 2) >> 2;
977  SRC(2,7)=SRC(3,6)=SRC(4,5)=SRC(5,4)=SRC(6,3)=SRC(7,2)= (t9 + 2*t10 + t11 + 2) >> 2;
978  SRC(3,7)=SRC(4,6)=SRC(5,5)=SRC(6,4)=SRC(7,3)= (t10 + 2*t11 + t12 + 2) >> 2;
979  SRC(4,7)=SRC(5,6)=SRC(6,5)=SRC(7,4)= (t11 + 2*t12 + t13 + 2) >> 2;
980  SRC(5,7)=SRC(6,6)=SRC(7,5)= (t12 + 2*t13 + t14 + 2) >> 2;
981  SRC(6,7)=SRC(7,6)= (t13 + 2*t14 + t15 + 2) >> 2;
982  SRC(7,7)= (t14 + 3*t15 + 2) >> 2;
983 }
984 static void FUNCC(pred8x8l_down_right)(uint8_t *_src, int has_topleft,
985  int has_topright, ptrdiff_t _stride)
986 {
987  pixel *src = (pixel*)_src;
988  int stride = _stride>>(sizeof(pixel)-1);
992  SRC(0,7)= (l7 + 2*l6 + l5 + 2) >> 2;
993  SRC(0,6)=SRC(1,7)= (l6 + 2*l5 + l4 + 2) >> 2;
994  SRC(0,5)=SRC(1,6)=SRC(2,7)= (l5 + 2*l4 + l3 + 2) >> 2;
995  SRC(0,4)=SRC(1,5)=SRC(2,6)=SRC(3,7)= (l4 + 2*l3 + l2 + 2) >> 2;
996  SRC(0,3)=SRC(1,4)=SRC(2,5)=SRC(3,6)=SRC(4,7)= (l3 + 2*l2 + l1 + 2) >> 2;
997  SRC(0,2)=SRC(1,3)=SRC(2,4)=SRC(3,5)=SRC(4,6)=SRC(5,7)= (l2 + 2*l1 + l0 + 2) >> 2;
998  SRC(0,1)=SRC(1,2)=SRC(2,3)=SRC(3,4)=SRC(4,5)=SRC(5,6)=SRC(6,7)= (l1 + 2*l0 + lt + 2) >> 2;
999  SRC(0,0)=SRC(1,1)=SRC(2,2)=SRC(3,3)=SRC(4,4)=SRC(5,5)=SRC(6,6)=SRC(7,7)= (l0 + 2*lt + t0 + 2) >> 2;
1000  SRC(1,0)=SRC(2,1)=SRC(3,2)=SRC(4,3)=SRC(5,4)=SRC(6,5)=SRC(7,6)= (lt + 2*t0 + t1 + 2) >> 2;
1001  SRC(2,0)=SRC(3,1)=SRC(4,2)=SRC(5,3)=SRC(6,4)=SRC(7,5)= (t0 + 2*t1 + t2 + 2) >> 2;
1002  SRC(3,0)=SRC(4,1)=SRC(5,2)=SRC(6,3)=SRC(7,4)= (t1 + 2*t2 + t3 + 2) >> 2;
1003  SRC(4,0)=SRC(5,1)=SRC(6,2)=SRC(7,3)= (t2 + 2*t3 + t4 + 2) >> 2;
1004  SRC(5,0)=SRC(6,1)=SRC(7,2)= (t3 + 2*t4 + t5 + 2) >> 2;
1005  SRC(6,0)=SRC(7,1)= (t4 + 2*t5 + t6 + 2) >> 2;
1006  SRC(7,0)= (t5 + 2*t6 + t7 + 2) >> 2;
1007 }
1008 static void FUNCC(pred8x8l_vertical_right)(uint8_t *_src, int has_topleft,
1009  int has_topright, ptrdiff_t _stride)
1010 {
1011  pixel *src = (pixel*)_src;
1012  int stride = _stride>>(sizeof(pixel)-1);
1016  SRC(0,6)= (l5 + 2*l4 + l3 + 2) >> 2;
1017  SRC(0,7)= (l6 + 2*l5 + l4 + 2) >> 2;
1018  SRC(0,4)=SRC(1,6)= (l3 + 2*l2 + l1 + 2) >> 2;
1019  SRC(0,5)=SRC(1,7)= (l4 + 2*l3 + l2 + 2) >> 2;
1020  SRC(0,2)=SRC(1,4)=SRC(2,6)= (l1 + 2*l0 + lt + 2) >> 2;
1021  SRC(0,3)=SRC(1,5)=SRC(2,7)= (l2 + 2*l1 + l0 + 2) >> 2;
1022  SRC(0,1)=SRC(1,3)=SRC(2,5)=SRC(3,7)= (l0 + 2*lt + t0 + 2) >> 2;
1023  SRC(0,0)=SRC(1,2)=SRC(2,4)=SRC(3,6)= (lt + t0 + 1) >> 1;
1024  SRC(1,1)=SRC(2,3)=SRC(3,5)=SRC(4,7)= (lt + 2*t0 + t1 + 2) >> 2;
1025  SRC(1,0)=SRC(2,2)=SRC(3,4)=SRC(4,6)= (t0 + t1 + 1) >> 1;
1026  SRC(2,1)=SRC(3,3)=SRC(4,5)=SRC(5,7)= (t0 + 2*t1 + t2 + 2) >> 2;
1027  SRC(2,0)=SRC(3,2)=SRC(4,4)=SRC(5,6)= (t1 + t2 + 1) >> 1;
1028  SRC(3,1)=SRC(4,3)=SRC(5,5)=SRC(6,7)= (t1 + 2*t2 + t3 + 2) >> 2;
1029  SRC(3,0)=SRC(4,2)=SRC(5,4)=SRC(6,6)= (t2 + t3 + 1) >> 1;
1030  SRC(4,1)=SRC(5,3)=SRC(6,5)=SRC(7,7)= (t2 + 2*t3 + t4 + 2) >> 2;
1031  SRC(4,0)=SRC(5,2)=SRC(6,4)=SRC(7,6)= (t3 + t4 + 1) >> 1;
1032  SRC(5,1)=SRC(6,3)=SRC(7,5)= (t3 + 2*t4 + t5 + 2) >> 2;
1033  SRC(5,0)=SRC(6,2)=SRC(7,4)= (t4 + t5 + 1) >> 1;
1034  SRC(6,1)=SRC(7,3)= (t4 + 2*t5 + t6 + 2) >> 2;
1035  SRC(6,0)=SRC(7,2)= (t5 + t6 + 1) >> 1;
1036  SRC(7,1)= (t5 + 2*t6 + t7 + 2) >> 2;
1037  SRC(7,0)= (t6 + t7 + 1) >> 1;
1038 }
1039 static void FUNCC(pred8x8l_horizontal_down)(uint8_t *_src, int has_topleft,
1040  int has_topright, ptrdiff_t _stride)
1041 {
1042  pixel *src = (pixel*)_src;
1043  int stride = _stride>>(sizeof(pixel)-1);
1047  SRC(0,7)= (l6 + l7 + 1) >> 1;
1048  SRC(1,7)= (l5 + 2*l6 + l7 + 2) >> 2;
1049  SRC(0,6)=SRC(2,7)= (l5 + l6 + 1) >> 1;
1050  SRC(1,6)=SRC(3,7)= (l4 + 2*l5 + l6 + 2) >> 2;
1051  SRC(0,5)=SRC(2,6)=SRC(4,7)= (l4 + l5 + 1) >> 1;
1052  SRC(1,5)=SRC(3,6)=SRC(5,7)= (l3 + 2*l4 + l5 + 2) >> 2;
1053  SRC(0,4)=SRC(2,5)=SRC(4,6)=SRC(6,7)= (l3 + l4 + 1) >> 1;
1054  SRC(1,4)=SRC(3,5)=SRC(5,6)=SRC(7,7)= (l2 + 2*l3 + l4 + 2) >> 2;
1055  SRC(0,3)=SRC(2,4)=SRC(4,5)=SRC(6,6)= (l2 + l3 + 1) >> 1;
1056  SRC(1,3)=SRC(3,4)=SRC(5,5)=SRC(7,6)= (l1 + 2*l2 + l3 + 2) >> 2;
1057  SRC(0,2)=SRC(2,3)=SRC(4,4)=SRC(6,5)= (l1 + l2 + 1) >> 1;
1058  SRC(1,2)=SRC(3,3)=SRC(5,4)=SRC(7,5)= (l0 + 2*l1 + l2 + 2) >> 2;
1059  SRC(0,1)=SRC(2,2)=SRC(4,3)=SRC(6,4)= (l0 + l1 + 1) >> 1;
1060  SRC(1,1)=SRC(3,2)=SRC(5,3)=SRC(7,4)= (lt + 2*l0 + l1 + 2) >> 2;
1061  SRC(0,0)=SRC(2,1)=SRC(4,2)=SRC(6,3)= (lt + l0 + 1) >> 1;
1062  SRC(1,0)=SRC(3,1)=SRC(5,2)=SRC(7,3)= (l0 + 2*lt + t0 + 2) >> 2;
1063  SRC(2,0)=SRC(4,1)=SRC(6,2)= (t1 + 2*t0 + lt + 2) >> 2;
1064  SRC(3,0)=SRC(5,1)=SRC(7,2)= (t2 + 2*t1 + t0 + 2) >> 2;
1065  SRC(4,0)=SRC(6,1)= (t3 + 2*t2 + t1 + 2) >> 2;
1066  SRC(5,0)=SRC(7,1)= (t4 + 2*t3 + t2 + 2) >> 2;
1067  SRC(6,0)= (t5 + 2*t4 + t3 + 2) >> 2;
1068  SRC(7,0)= (t6 + 2*t5 + t4 + 2) >> 2;
1069 }
1070 static void FUNCC(pred8x8l_vertical_left)(uint8_t *_src, int has_topleft,
1071  int has_topright, ptrdiff_t _stride)
1072 {
1073  pixel *src = (pixel*)_src;
1074  int stride = _stride>>(sizeof(pixel)-1);
1077  SRC(0,0)= (t0 + t1 + 1) >> 1;
1078  SRC(0,1)= (t0 + 2*t1 + t2 + 2) >> 2;
1079  SRC(0,2)=SRC(1,0)= (t1 + t2 + 1) >> 1;
1080  SRC(0,3)=SRC(1,1)= (t1 + 2*t2 + t3 + 2) >> 2;
1081  SRC(0,4)=SRC(1,2)=SRC(2,0)= (t2 + t3 + 1) >> 1;
1082  SRC(0,5)=SRC(1,3)=SRC(2,1)= (t2 + 2*t3 + t4 + 2) >> 2;
1083  SRC(0,6)=SRC(1,4)=SRC(2,2)=SRC(3,0)= (t3 + t4 + 1) >> 1;
1084  SRC(0,7)=SRC(1,5)=SRC(2,3)=SRC(3,1)= (t3 + 2*t4 + t5 + 2) >> 2;
1085  SRC(1,6)=SRC(2,4)=SRC(3,2)=SRC(4,0)= (t4 + t5 + 1) >> 1;
1086  SRC(1,7)=SRC(2,5)=SRC(3,3)=SRC(4,1)= (t4 + 2*t5 + t6 + 2) >> 2;
1087  SRC(2,6)=SRC(3,4)=SRC(4,2)=SRC(5,0)= (t5 + t6 + 1) >> 1;
1088  SRC(2,7)=SRC(3,5)=SRC(4,3)=SRC(5,1)= (t5 + 2*t6 + t7 + 2) >> 2;
1089  SRC(3,6)=SRC(4,4)=SRC(5,2)=SRC(6,0)= (t6 + t7 + 1) >> 1;
1090  SRC(3,7)=SRC(4,5)=SRC(5,3)=SRC(6,1)= (t6 + 2*t7 + t8 + 2) >> 2;
1091  SRC(4,6)=SRC(5,4)=SRC(6,2)=SRC(7,0)= (t7 + t8 + 1) >> 1;
1092  SRC(4,7)=SRC(5,5)=SRC(6,3)=SRC(7,1)= (t7 + 2*t8 + t9 + 2) >> 2;
1093  SRC(5,6)=SRC(6,4)=SRC(7,2)= (t8 + t9 + 1) >> 1;
1094  SRC(5,7)=SRC(6,5)=SRC(7,3)= (t8 + 2*t9 + t10 + 2) >> 2;
1095  SRC(6,6)=SRC(7,4)= (t9 + t10 + 1) >> 1;
1096  SRC(6,7)=SRC(7,5)= (t9 + 2*t10 + t11 + 2) >> 2;
1097  SRC(7,6)= (t10 + t11 + 1) >> 1;
1098  SRC(7,7)= (t10 + 2*t11 + t12 + 2) >> 2;
1099 }
1100 static void FUNCC(pred8x8l_horizontal_up)(uint8_t *_src, int has_topleft,
1101  int has_topright, ptrdiff_t _stride)
1102 {
1103  pixel *src = (pixel*)_src;
1104  int stride = _stride>>(sizeof(pixel)-1);
1106  SRC(0,0)= (l0 + l1 + 1) >> 1;
1107  SRC(1,0)= (l0 + 2*l1 + l2 + 2) >> 2;
1108  SRC(0,1)=SRC(2,0)= (l1 + l2 + 1) >> 1;
1109  SRC(1,1)=SRC(3,0)= (l1 + 2*l2 + l3 + 2) >> 2;
1110  SRC(0,2)=SRC(2,1)=SRC(4,0)= (l2 + l3 + 1) >> 1;
1111  SRC(1,2)=SRC(3,1)=SRC(5,0)= (l2 + 2*l3 + l4 + 2) >> 2;
1112  SRC(0,3)=SRC(2,2)=SRC(4,1)=SRC(6,0)= (l3 + l4 + 1) >> 1;
1113  SRC(1,3)=SRC(3,2)=SRC(5,1)=SRC(7,0)= (l3 + 2*l4 + l5 + 2) >> 2;
1114  SRC(0,4)=SRC(2,3)=SRC(4,2)=SRC(6,1)= (l4 + l5 + 1) >> 1;
1115  SRC(1,4)=SRC(3,3)=SRC(5,2)=SRC(7,1)= (l4 + 2*l5 + l6 + 2) >> 2;
1116  SRC(0,5)=SRC(2,4)=SRC(4,3)=SRC(6,2)= (l5 + l6 + 1) >> 1;
1117  SRC(1,5)=SRC(3,4)=SRC(5,3)=SRC(7,2)= (l5 + 2*l6 + l7 + 2) >> 2;
1118  SRC(0,6)=SRC(2,5)=SRC(4,4)=SRC(6,3)= (l6 + l7 + 1) >> 1;
1119  SRC(1,6)=SRC(3,5)=SRC(5,4)=SRC(7,3)= (l6 + 3*l7 + 2) >> 2;
1120  SRC(0,7)=SRC(1,7)=SRC(2,6)=SRC(2,7)=SRC(3,6)=
1121  SRC(3,7)=SRC(4,5)=SRC(4,6)=SRC(4,7)=SRC(5,5)=
1122  SRC(5,6)=SRC(5,7)=SRC(6,4)=SRC(6,5)=SRC(6,6)=
1123  SRC(6,7)=SRC(7,4)=SRC(7,5)=SRC(7,6)=SRC(7,7)= l7;
1124 }
1125 #undef PREDICT_8x8_LOAD_LEFT
1126 #undef PREDICT_8x8_LOAD_TOP
1127 #undef PREDICT_8x8_LOAD_TOPLEFT
1128 #undef PREDICT_8x8_LOAD_TOPRIGHT
1129 #undef PREDICT_8x8_DC
1130 #undef PTR
1131 #undef PT
1132 #undef PL
1133 #undef SRC
1134 
1135 static void FUNCC(pred4x4_vertical_add)(uint8_t *_pix, int16_t *_block,
1136  ptrdiff_t stride)
1137 {
1138  int i;
1139  pixel *pix = (pixel*)_pix;
1140  const dctcoef *block = (const dctcoef*)_block;
1141  stride >>= sizeof(pixel)-1;
1142  pix -= stride;
1143  for(i=0; i<4; i++){
1144  pixel v = pix[0];
1145  pix[1*stride]= v += block[0];
1146  pix[2*stride]= v += block[4];
1147  pix[3*stride]= v += block[8];
1148  pix[4*stride]= v + block[12];
1149  pix++;
1150  block++;
1151  }
1152 
1153  memset(_block, 0, sizeof(dctcoef) * 16);
1154 }
1155 
1156 static void FUNCC(pred4x4_horizontal_add)(uint8_t *_pix, int16_t *_block,
1157  ptrdiff_t stride)
1158 {
1159  int i;
1160  pixel *pix = (pixel*)_pix;
1161  const dctcoef *block = (const dctcoef*)_block;
1162  stride >>= sizeof(pixel)-1;
1163  for(i=0; i<4; i++){
1164  pixel v = pix[-1];
1165  pix[0]= v += block[0];
1166  pix[1]= v += block[1];
1167  pix[2]= v += block[2];
1168  pix[3]= v + block[3];
1169  pix+= stride;
1170  block+= 4;
1171  }
1172 
1173  memset(_block, 0, sizeof(dctcoef) * 16);
1174 }
1175 
1176 static void FUNCC(pred8x8l_vertical_add)(uint8_t *_pix, int16_t *_block,
1177  ptrdiff_t stride)
1178 {
1179  int i;
1180  pixel *pix = (pixel*)_pix;
1181  const dctcoef *block = (const dctcoef*)_block;
1182  stride >>= sizeof(pixel)-1;
1183  pix -= stride;
1184  for(i=0; i<8; i++){
1185  pixel v = pix[0];
1186  pix[1*stride]= v += block[0];
1187  pix[2*stride]= v += block[8];
1188  pix[3*stride]= v += block[16];
1189  pix[4*stride]= v += block[24];
1190  pix[5*stride]= v += block[32];
1191  pix[6*stride]= v += block[40];
1192  pix[7*stride]= v += block[48];
1193  pix[8*stride]= v + block[56];
1194  pix++;
1195  block++;
1196  }
1197 
1198  memset(_block, 0, sizeof(dctcoef) * 64);
1199 }
1200 
1201 static void FUNCC(pred8x8l_horizontal_add)(uint8_t *_pix, int16_t *_block,
1202  ptrdiff_t stride)
1203 {
1204  int i;
1205  pixel *pix = (pixel*)_pix;
1206  const dctcoef *block = (const dctcoef*)_block;
1207  stride >>= sizeof(pixel)-1;
1208  for(i=0; i<8; i++){
1209  pixel v = pix[-1];
1210  pix[0]= v += block[0];
1211  pix[1]= v += block[1];
1212  pix[2]= v += block[2];
1213  pix[3]= v += block[3];
1214  pix[4]= v += block[4];
1215  pix[5]= v += block[5];
1216  pix[6]= v += block[6];
1217  pix[7]= v + block[7];
1218  pix+= stride;
1219  block+= 8;
1220  }
1221 
1222  memset(_block, 0, sizeof(dctcoef) * 64);
1223 }
1224 
1225 static void FUNCC(pred16x16_vertical_add)(uint8_t *pix, const int *block_offset,
1226  int16_t *block,
1227  ptrdiff_t stride)
1228 {
1229  int i;
1230  for(i=0; i<16; i++)
1231  FUNCC(pred4x4_vertical_add)(pix + block_offset[i], block + i*16*sizeof(pixel), stride);
1232 }
1233 
1235  const int *block_offset,
1236  int16_t *block,
1237  ptrdiff_t stride)
1238 {
1239  int i;
1240  for(i=0; i<16; i++)
1241  FUNCC(pred4x4_horizontal_add)(pix + block_offset[i], block + i*16*sizeof(pixel), stride);
1242 }
1243 
1244 static void FUNCC(pred8x8_vertical_add)(uint8_t *pix, const int *block_offset,
1245  int16_t *block, ptrdiff_t stride)
1246 {
1247  int i;
1248  for(i=0; i<4; i++)
1249  FUNCC(pred4x4_vertical_add)(pix + block_offset[i], block + i*16*sizeof(pixel), stride);
1250 }
1251 
1252 static void FUNCC(pred8x16_vertical_add)(uint8_t *pix, const int *block_offset,
1253  int16_t *block, ptrdiff_t stride)
1254 {
1255  int i;
1256  for(i=0; i<4; i++)
1257  FUNCC(pred4x4_vertical_add)(pix + block_offset[i], block + i*16*sizeof(pixel), stride);
1258  for(i=4; i<8; i++)
1259  FUNCC(pred4x4_vertical_add)(pix + block_offset[i+4], block + i*16*sizeof(pixel), stride);
1260 }
1261 
1262 static void FUNCC(pred8x8_horizontal_add)(uint8_t *pix, const int *block_offset,
1263  int16_t *block,
1264  ptrdiff_t stride)
1265 {
1266  int i;
1267  for(i=0; i<4; i++)
1268  FUNCC(pred4x4_horizontal_add)(pix + block_offset[i], block + i*16*sizeof(pixel), stride);
1269 }
1270 
1272  const int *block_offset,
1273  int16_t *block, ptrdiff_t stride)
1274 {
1275  int i;
1276  for(i=0; i<4; i++)
1277  FUNCC(pred4x4_horizontal_add)(pix + block_offset[i], block + i*16*sizeof(pixel), stride);
1278  for(i=4; i<8; i++)
1279  FUNCC(pred4x4_horizontal_add)(pix + block_offset[i+4], block + i*16*sizeof(pixel), stride);
1280 }
static void FUNCC() pred8x16_plane(uint8_t *_src, ptrdiff_t _stride)
static void FUNCC() pred4x4_dc(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
float v
static void FUNCC() pred8x8l_dc(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred4x4_vertical_right(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
static void FUNC() pred8x8_mad_cow_dc_l0t(uint8_t *src, ptrdiff_t stride)
#define AV_RN4PA
#define t9
Definition: regdef.h:54
#define PREDICT_8x8_DC(v)
static void FUNCC() pred4x4_horizontal_add(uint8_t *_pix, int16_t *_block, ptrdiff_t stride)
static void FUNC() pred8x8_mad_cow_dc_l00(uint8_t *src, ptrdiff_t stride)
static void FUNCC() pred8x8l_down_left(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred8x8l_down_right(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred8x8_horizontal(uint8_t *_src, ptrdiff_t stride)
#define BIT_DEPTH
static void FUNCC() pred8x8l_horizontal(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
#define ROW(y)
static void FUNCC() pred8x8l_vertical_right(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
#define pixel4
static void FUNCC() pred8x16_top_dc(uint8_t *_src, ptrdiff_t stride)
#define t8
Definition: regdef.h:53
#define PRED8x8_X(n, v)
int stride
Definition: mace.c:144
static void FUNCC() pred8x8l_128_dc(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred4x4_down_left(uint8_t *_src, const uint8_t *_topright, ptrdiff_t _stride)
set threshold d
#define t7
Definition: regdef.h:35
static void FUNCC() pred4x4_129_dc(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
#define t12
Definition: regdef.h:58
uint8_t
static void FUNCC() pred16x16_vertical(uint8_t *_src, ptrdiff_t _stride)
static void FUNCC() pred8x8l_horizontal_down(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
#define H
Definition: swscale-test.c:342
#define b
Definition: input.c:42
#define PRED16x16_X(n, v)
static void FUNCC() pred8x8l_vertical_add(uint8_t *_pix, int16_t *_block, ptrdiff_t stride)
#define t11
Definition: regdef.h:56
#define t0
Definition: regdef.h:28
static void FUNCC() pred8x16_horizontal(uint8_t *_src, ptrdiff_t stride)
static void FUNCC() pred4x4_vertical_add(uint8_t *_pix, int16_t *_block, ptrdiff_t stride)
static void FUNC() pred8x16_mad_cow_dc_l0t(uint8_t *src, ptrdiff_t stride)
static void FUNCC() pred8x16_left_dc(uint8_t *_src, ptrdiff_t stride)
static void FUNCC() pred4x4_vertical(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
static void FUNCC() pred16x16_dc(uint8_t *_src, ptrdiff_t stride)
#define FUNC(a)
#define t10
Definition: regdef.h:55
#define t1
Definition: regdef.h:29
static void FUNCC() pred8x8l_vertical_left(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred4x4_128_dc(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
<<(BIT_DEPTH-1))+0) PRED8x8_X(129,(1<<(BIT_DEPTH-1))+1) static void FUNCC(pred8x16_128_dc)(uint8_t *_src, ptrdiff_t stride){FUNCC(pred8x8_128_dc)(_src, stride);FUNCC(pred8x8_128_dc)(_src+8 *stride, stride);}static void FUNCC(pred8x8_left_dc)(uint8_t *_src, ptrdiff_t stride){int i;int dc0, dc2;pixel4 dc0splat, dc2splat;pixel *src=(pixel *) _src;stride >>=sizeof(pixel)-1;dc0=dc2=0;for(i=0;i< 4;i++){dc0+=src[-1+i *stride];dc2+=src[-1+(i+4)*stride];}dc0splat=PIXEL_SPLAT_X4((dc0+2)>> dc2splat
#define PREDICT_8x8_LOAD_LEFT
#define t3
Definition: regdef.h:31
static void FUNC() pred8x8_mad_cow_dc_0l0(uint8_t *src, ptrdiff_t stride)
static void FUNCC() pred4x4_127_dc(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
static void FUNCC() pred4x4_vertical_left(uint8_t *_src, const uint8_t *_topright, ptrdiff_t _stride)
static void FUNCC() pred8x8_plane(uint8_t *_src, ptrdiff_t _stride)
#define PREDICT_8x8_LOAD_TOPLEFT
static void FUNCC() pred8x16_dc(uint8_t *_src, ptrdiff_t stride)
static void FUNCC() pred8x8l_top_dc(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred8x8_vertical_add(uint8_t *pix, const int *block_offset, int16_t *block, ptrdiff_t stride)
static void FUNCC() pred8x16_vertical(uint8_t *_src, ptrdiff_t _stride)
static void FUNCC() pred8x8l_vertical(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred16x16_horizontal_add(uint8_t *pix, const int *block_offset, int16_t *block, ptrdiff_t stride)
static void FUNC() pred8x8_mad_cow_dc_0lt(uint8_t *src, ptrdiff_t stride)
static void FUNCC() pred16x16_plane(uint8_t *src, ptrdiff_t stride)
for k
NULL
Definition: eval.c:55
static void FUNC() pred8x16_mad_cow_dc_0l0(uint8_t *src, ptrdiff_t stride)
AVS_Value src
Definition: avisynth_c.h:523
<<(BIT_DEPTH-1))+0) PRED16x16_X(129,(1<<(BIT_DEPTH-1))+1) static inline void FUNCC(pred16x16_plane_compat)(uint8_t *_src, ptrdiff_t _stride, const int svq3, const int rv40){int i, j, k;int a;INIT_CLIP pixel *src=(pixel *) _src;int stride=_stride >>(sizeof(pixel)-1);const pixel *const src0=src+7-stride;const pixel *src1=src+8 *stride-1;const pixel *src2=src1-2 *stride;int H=src0[1]-src0[-1];int V=src1[0]-src2[0];for(k=2;k<=8;++k){src1+=stride;src2-=stride;H+=k *(src0[k]-src0[-k]);V+=k *(src1[0]-src2[0]);}if(svq3){H=(5 *(H/4))/16;V=(5 *(V/4))/16;i=H;H=V;V=i;}else if(rv40){H=(H+(H >> V
#define PREDICT_16x16_DC(v)
static void FUNCC() pred8x8_horizontal_add(uint8_t *pix, const int *block_offset, int16_t *block, ptrdiff_t stride)
FIXME Range Coding of cr are mx and my are Motion Vector top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff)*mv_scale Intra DC Predicton block[y][x] dc[1]
Definition: snow.txt:392
#define dctcoef
synthesis window for stochastic i
#define PREDICT_8x8_LOAD_TOPRIGHT
static void FUNCC() pred4x4_left_dc(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
#define t5
Definition: regdef.h:33
static void FUNCC() pred8x8_top_dc(uint8_t *_src, ptrdiff_t stride)
static void FUNCC() pred4x4_horizontal(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
static void FUNCC() pred8x16_horizontal_add(uint8_t *pix, const int *block_offset, int16_t *block, ptrdiff_t stride)
uint8_t pixel
Definition: tiny_ssim.c:40
static void FUNCC() pred8x16_vertical_add(uint8_t *pix, const int *block_offset, int16_t *block, ptrdiff_t stride)
#define INIT_CLIP
#define LOAD_LEFT_EDGE
#define LOAD_TOP_EDGE
static void FUNC() pred8x16_mad_cow_dc_l00(uint8_t *src, ptrdiff_t stride)
static void FUNCC() pred16x16_left_dc(uint8_t *_src, ptrdiff_t stride)
#define t6
Definition: regdef.h:34
static void FUNCC() pred4x4_horizontal_up(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
static void FUNCC() pred8x8_dc(uint8_t *_src, ptrdiff_t stride)
static void FUNCC() pred8x8l_horizontal_up(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static double c[64]
function y
Definition: D.m:1
static void FUNCC() pred8x8_vertical(uint8_t *_src, ptrdiff_t _stride)
#define t4
Definition: regdef.h:32
static void FUNCC() pred16x16_top_dc(uint8_t *_src, ptrdiff_t stride)
#define LOAD_TOP_RIGHT_EDGE
#define PREDICT_8x8_LOAD_TOP
#define AV_WN4PA
static void FUNCC() pred16x16_horizontal(uint8_t *_src, ptrdiff_t stride)
static void FUNCC() pred4x4_top_dc(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
static void FUNCC() pred4x4_down_right(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
#define FUNCC(a)
static void FUNC() pred8x16_mad_cow_dc_0lt(uint8_t *src, ptrdiff_t stride)
static void FUNCC() pred8x8l_left_dc(uint8_t *_src, int has_topleft, int has_topright, ptrdiff_t _stride)
static void FUNCC() pred8x8l_horizontal_add(uint8_t *_pix, int16_t *_block, ptrdiff_t stride)
#define PIXEL_SPLAT_X4(x)
#define t2
Definition: regdef.h:30
static void FUNCC() pred4x4_horizontal_down(uint8_t *_src, const uint8_t *topright, ptrdiff_t _stride)
#define CLIP(a)
#define SRC(x, y)
static void FUNCC() pred16x16_vertical_add(uint8_t *pix, const int *block_offset, int16_t *block, ptrdiff_t stride)