annotate dsputil.c @ 1708:dea5b2946999 libavcodec

interlaced motion estimation interlaced mpeg2 encoding P & B frames rate distored interlaced mb decission alternate scantable support 4mv encoding fixes (thats also why the regression tests change) passing height to most dsp functions interlaced mpeg4 encoding (no direct mode MBs yet) various related cleanups disabled old motion estimaton algorithms (log, full, ...) they will either be fixed or removed
author michael
date Tue, 30 Dec 2003 16:07:57 +0000
parents 1a2db2073848
children a4a5e7521339
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 * DSP utils
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
3 * Copyright (c) 2000, 2001 Fabrice Bellard.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
4 *
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
5 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
7 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
8 * version 2 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
9 *
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
10 * This library is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
13 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
14 *
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
16 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
18 *
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
19 * gmc & q-pel & 32/64 bit based MC by Michael Niedermayer <michaelni@gmx.at>
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
20 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
21
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
22 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
23 * @file dsputil.c
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
24 * DSP utils
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
25 */
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
26
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
27 #include "avcodec.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
28 #include "dsputil.h"
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
29 #include "mpegvideo.h"
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
30 #include "simple_idct.h"
1557
5d53c03186a1 floating point AAN DCT
michael
parents: 1527
diff changeset
31 #include "faandct.h"
676
c3bdb00a98a9 dont store version for bit-exact tests
michaelni
parents: 651
diff changeset
32
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
33 uint8_t cropTbl[256 + 2 * MAX_NEG_CROP];
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
34 uint32_t squareTbl[512];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
35
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
36 const uint8_t ff_zigzag_direct[64] = {
706
e65798d228ea idct permutation cleanup, idct can be selected per context now
michaelni
parents: 689
diff changeset
37 0, 1, 8, 16, 9, 2, 3, 10,
e65798d228ea idct permutation cleanup, idct can be selected per context now
michaelni
parents: 689
diff changeset
38 17, 24, 32, 25, 18, 11, 4, 5,
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
39 12, 19, 26, 33, 40, 48, 41, 34,
706
e65798d228ea idct permutation cleanup, idct can be selected per context now
michaelni
parents: 689
diff changeset
40 27, 20, 13, 6, 7, 14, 21, 28,
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
41 35, 42, 49, 56, 57, 50, 43, 36,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
42 29, 22, 15, 23, 30, 37, 44, 51,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
43 58, 59, 52, 45, 38, 31, 39, 46,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
44 53, 60, 61, 54, 47, 55, 62, 63
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
45 };
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
46
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
47 /* Specific zigzag scan for 248 idct. NOTE that unlike the
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
48 specification, we interleave the fields */
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
49 const uint8_t ff_zigzag248_direct[64] = {
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
50 0, 8, 1, 9, 16, 24, 2, 10,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
51 17, 25, 32, 40, 48, 56, 33, 41,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
52 18, 26, 3, 11, 4, 12, 19, 27,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
53 34, 42, 49, 57, 50, 58, 35, 43,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
54 20, 28, 5, 13, 6, 14, 21, 29,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
55 36, 44, 51, 59, 52, 60, 37, 45,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
56 22, 30, 7, 15, 23, 31, 38, 46,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
57 53, 61, 54, 62, 39, 47, 55, 63,
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
58 };
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
59
220
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
60 /* not permutated inverse zigzag_direct + 1 for MMX quantizer */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
61 uint16_t __align8 inv_zigzag_direct16[64];
220
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
62
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
63 const uint8_t ff_alternate_horizontal_scan[64] = {
706
e65798d228ea idct permutation cleanup, idct can be selected per context now
michaelni
parents: 689
diff changeset
64 0, 1, 2, 3, 8, 9, 16, 17,
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
65 10, 11, 4, 5, 6, 7, 15, 14,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
66 13, 12, 19, 18, 24, 25, 32, 33,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
67 26, 27, 20, 21, 22, 23, 28, 29,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
68 30, 31, 34, 35, 40, 41, 48, 49,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
69 42, 43, 36, 37, 38, 39, 44, 45,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
70 46, 47, 50, 51, 56, 57, 58, 59,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
71 52, 53, 54, 55, 60, 61, 62, 63,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
72 };
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
73
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
74 const uint8_t ff_alternate_vertical_scan[64] = {
706
e65798d228ea idct permutation cleanup, idct can be selected per context now
michaelni
parents: 689
diff changeset
75 0, 8, 16, 24, 1, 9, 2, 10,
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
76 17, 25, 32, 40, 48, 56, 57, 49,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
77 41, 33, 26, 18, 3, 11, 4, 12,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
78 19, 27, 34, 42, 50, 58, 35, 43,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
79 51, 59, 20, 28, 5, 13, 6, 14,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
80 21, 29, 36, 44, 52, 60, 37, 45,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
81 53, 61, 22, 30, 7, 15, 23, 31,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
82 38, 46, 54, 62, 39, 47, 55, 63,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
83 };
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
84
220
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
85 /* a*inverse[b]>>32 == a/b for all 0<=a<=65536 && 2<=b<=255 */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
86 const uint32_t inverse[256]={
220
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
87 0, 4294967295U,2147483648U,1431655766, 1073741824, 858993460, 715827883, 613566757,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
88 536870912, 477218589, 429496730, 390451573, 357913942, 330382100, 306783379, 286331154,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
89 268435456, 252645136, 238609295, 226050911, 214748365, 204522253, 195225787, 186737709,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
90 178956971, 171798692, 165191050, 159072863, 153391690, 148102321, 143165577, 138547333,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
91 134217728, 130150525, 126322568, 122713352, 119304648, 116080198, 113025456, 110127367,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
92 107374183, 104755300, 102261127, 99882961, 97612894, 95443718, 93368855, 91382283,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
93 89478486, 87652394, 85899346, 84215046, 82595525, 81037119, 79536432, 78090315,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
94 76695845, 75350304, 74051161, 72796056, 71582789, 70409300, 69273667, 68174085,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
95 67108864, 66076420, 65075263, 64103990, 63161284, 62245903, 61356676, 60492498,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
96 59652324, 58835169, 58040099, 57266231, 56512728, 55778797, 55063684, 54366675,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
97 53687092, 53024288, 52377650, 51746594, 51130564, 50529028, 49941481, 49367441,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
98 48806447, 48258060, 47721859, 47197443, 46684428, 46182445, 45691142, 45210183,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
99 44739243, 44278014, 43826197, 43383509, 42949673, 42524429, 42107523, 41698712,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
100 41297763, 40904451, 40518560, 40139882, 39768216, 39403370, 39045158, 38693400,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
101 38347923, 38008561, 37675152, 37347542, 37025581, 36709123, 36398028, 36092163,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
102 35791395, 35495598, 35204650, 34918434, 34636834, 34359739, 34087043, 33818641,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
103 33554432, 33294321, 33038210, 32786010, 32537632, 32292988, 32051995, 31814573,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
104 31580642, 31350127, 31122952, 30899046, 30678338, 30460761, 30246249, 30034737,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
105 29826162, 29620465, 29417585, 29217465, 29020050, 28825284, 28633116, 28443493,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
106 28256364, 28071682, 27889399, 27709467, 27531842, 27356480, 27183338, 27012373,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
107 26843546, 26676816, 26512144, 26349493, 26188825, 26030105, 25873297, 25718368,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
108 25565282, 25414008, 25264514, 25116768, 24970741, 24826401, 24683721, 24542671,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
109 24403224, 24265352, 24129030, 23994231, 23860930, 23729102, 23598722, 23469767,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
110 23342214, 23216040, 23091223, 22967740, 22845571, 22724695, 22605092, 22486740,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
111 22369622, 22253717, 22139007, 22025474, 21913099, 21801865, 21691755, 21582751,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
112 21474837, 21367997, 21262215, 21157475, 21053762, 20951060, 20849356, 20748635,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
113 20648882, 20550083, 20452226, 20355296, 20259280, 20164166, 20069941, 19976593,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
114 19884108, 19792477, 19701685, 19611723, 19522579, 19434242, 19346700, 19259944,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
115 19173962, 19088744, 19004281, 18920561, 18837576, 18755316, 18673771, 18592933,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
116 18512791, 18433337, 18354562, 18276457, 18199014, 18122225, 18046082, 17970575,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
117 17895698, 17821442, 17747799, 17674763, 17602325, 17530479, 17459217, 17388532,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
118 17318417, 17248865, 17179870, 17111424, 17043522, 16976156, 16909321, 16843010,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
119 };
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
120
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
121 /* Input permutation for the simple_idct_mmx */
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
122 static const uint8_t simple_mmx_permutation[64]={
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
123 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
124 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
125 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
126 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
127 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
128 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
129 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
130 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
131 };
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
132
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
133 static int pix_sum_c(uint8_t * pix, int line_size)
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
134 {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
135 int s, i, j;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
136
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
137 s = 0;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
138 for (i = 0; i < 16; i++) {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
139 for (j = 0; j < 16; j += 8) {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
140 s += pix[0];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
141 s += pix[1];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
142 s += pix[2];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
143 s += pix[3];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
144 s += pix[4];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
145 s += pix[5];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
146 s += pix[6];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
147 s += pix[7];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
148 pix += 8;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
149 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
150 pix += line_size - 16;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
151 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
152 return s;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
153 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
154
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
155 static int pix_norm1_c(uint8_t * pix, int line_size)
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
156 {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
157 int s, i, j;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
158 uint32_t *sq = squareTbl + 256;
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
159
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
160 s = 0;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
161 for (i = 0; i < 16; i++) {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
162 for (j = 0; j < 16; j += 8) {
997
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
163 #if 0
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
164 s += sq[pix[0]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
165 s += sq[pix[1]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
166 s += sq[pix[2]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
167 s += sq[pix[3]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
168 s += sq[pix[4]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
169 s += sq[pix[5]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
170 s += sq[pix[6]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
171 s += sq[pix[7]];
997
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
172 #else
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
173 #if LONG_MAX > 2147483647
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
174 register uint64_t x=*(uint64_t*)pix;
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
175 s += sq[x&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
176 s += sq[(x>>8)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
177 s += sq[(x>>16)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
178 s += sq[(x>>24)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
179 s += sq[(x>>32)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
180 s += sq[(x>>40)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
181 s += sq[(x>>48)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
182 s += sq[(x>>56)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
183 #else
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
184 register uint32_t x=*(uint32_t*)pix;
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
185 s += sq[x&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
186 s += sq[(x>>8)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
187 s += sq[(x>>16)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
188 s += sq[(x>>24)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
189 x=*(uint32_t*)(pix+4);
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
190 s += sq[x&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
191 s += sq[(x>>8)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
192 s += sq[(x>>16)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
193 s += sq[(x>>24)&0xff];
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
194 #endif
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
195 #endif
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
196 pix += 8;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
197 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
198 pix += line_size - 16;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
199 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
200 return s;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
201 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
202
1273
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
203 static void bswap_buf(uint32_t *dst, uint32_t *src, int w){
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
204 int i;
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
205
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
206 for(i=0; i+8<=w; i+=8){
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
207 dst[i+0]= bswap_32(src[i+0]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
208 dst[i+1]= bswap_32(src[i+1]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
209 dst[i+2]= bswap_32(src[i+2]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
210 dst[i+3]= bswap_32(src[i+3]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
211 dst[i+4]= bswap_32(src[i+4]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
212 dst[i+5]= bswap_32(src[i+5]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
213 dst[i+6]= bswap_32(src[i+6]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
214 dst[i+7]= bswap_32(src[i+7]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
215 }
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
216 for(;i<w; i++){
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
217 dst[i+0]= bswap_32(src[i+0]);
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
218 }
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
219 }
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
220
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
221 static int sse8_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h)
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
222 {
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
223 int s, i;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
224 uint32_t *sq = squareTbl + 256;
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
225
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
226 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
227 for (i = 0; i < h; i++) {
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
228 s += sq[pix1[0] - pix2[0]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
229 s += sq[pix1[1] - pix2[1]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
230 s += sq[pix1[2] - pix2[2]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
231 s += sq[pix1[3] - pix2[3]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
232 s += sq[pix1[4] - pix2[4]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
233 s += sq[pix1[5] - pix2[5]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
234 s += sq[pix1[6] - pix2[6]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
235 s += sq[pix1[7] - pix2[7]];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
236 pix1 += line_size;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
237 pix2 += line_size;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
238 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
239 return s;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
240 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
241
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
242 static int sse16_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
884
2cef5c4c0ca6 * altivec and pix_norm patch by Brian Foley
kabi
parents: 882
diff changeset
243 {
1012
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
244 int s, i;
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
245 uint32_t *sq = squareTbl + 256;
884
2cef5c4c0ca6 * altivec and pix_norm patch by Brian Foley
kabi
parents: 882
diff changeset
246
2cef5c4c0ca6 * altivec and pix_norm patch by Brian Foley
kabi
parents: 882
diff changeset
247 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
248 for (i = 0; i < h; i++) {
1012
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
249 s += sq[pix1[ 0] - pix2[ 0]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
250 s += sq[pix1[ 1] - pix2[ 1]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
251 s += sq[pix1[ 2] - pix2[ 2]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
252 s += sq[pix1[ 3] - pix2[ 3]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
253 s += sq[pix1[ 4] - pix2[ 4]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
254 s += sq[pix1[ 5] - pix2[ 5]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
255 s += sq[pix1[ 6] - pix2[ 6]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
256 s += sq[pix1[ 7] - pix2[ 7]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
257 s += sq[pix1[ 8] - pix2[ 8]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
258 s += sq[pix1[ 9] - pix2[ 9]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
259 s += sq[pix1[10] - pix2[10]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
260 s += sq[pix1[11] - pix2[11]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
261 s += sq[pix1[12] - pix2[12]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
262 s += sq[pix1[13] - pix2[13]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
263 s += sq[pix1[14] - pix2[14]];
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
264 s += sq[pix1[15] - pix2[15]];
997
4dfe15ae0078 sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
michaelni
parents: 996
diff changeset
265
1012
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
266 pix1 += line_size;
7a5038ec769b sse16_c is totally fucked up (unaligned loads, LONG_MAX is undefined,
mellum
parents: 1011
diff changeset
267 pix2 += line_size;
884
2cef5c4c0ca6 * altivec and pix_norm patch by Brian Foley
kabi
parents: 882
diff changeset
268 }
2cef5c4c0ca6 * altivec and pix_norm patch by Brian Foley
kabi
parents: 882
diff changeset
269 return s;
2cef5c4c0ca6 * altivec and pix_norm patch by Brian Foley
kabi
parents: 882
diff changeset
270 }
2cef5c4c0ca6 * altivec and pix_norm patch by Brian Foley
kabi
parents: 882
diff changeset
271
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
272 static void get_pixels_c(DCTELEM *restrict block, const uint8_t *pixels, int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
273 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
274 int i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
275
986e461dc072 Initial revision
glantau
parents:
diff changeset
276 /* read the pixels */
986e461dc072 Initial revision
glantau
parents:
diff changeset
277 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
278 block[0] = pixels[0];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
279 block[1] = pixels[1];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
280 block[2] = pixels[2];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
281 block[3] = pixels[3];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
282 block[4] = pixels[4];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
283 block[5] = pixels[5];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
284 block[6] = pixels[6];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
285 block[7] = pixels[7];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
286 pixels += line_size;
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
287 block += 8;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
288 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
289 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
290
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
291 static void diff_pixels_c(DCTELEM *restrict block, const uint8_t *s1,
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
292 const uint8_t *s2, int stride){
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
293 int i;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
294
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
295 /* read the pixels */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
296 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
297 block[0] = s1[0] - s2[0];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
298 block[1] = s1[1] - s2[1];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
299 block[2] = s1[2] - s2[2];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
300 block[3] = s1[3] - s2[3];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
301 block[4] = s1[4] - s2[4];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
302 block[5] = s1[5] - s2[5];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
303 block[6] = s1[6] - s2[6];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
304 block[7] = s1[7] - s2[7];
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
305 s1 += stride;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
306 s2 += stride;
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
307 block += 8;
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
308 }
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
309 }
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
310
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
311
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
312 static void put_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels,
853
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
313 int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
314 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
315 int i;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
316 uint8_t *cm = cropTbl + MAX_NEG_CROP;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
317
986e461dc072 Initial revision
glantau
parents:
diff changeset
318 /* read the pixels */
986e461dc072 Initial revision
glantau
parents:
diff changeset
319 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
320 pixels[0] = cm[block[0]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
321 pixels[1] = cm[block[1]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
322 pixels[2] = cm[block[2]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
323 pixels[3] = cm[block[3]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
324 pixels[4] = cm[block[4]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
325 pixels[5] = cm[block[5]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
326 pixels[6] = cm[block[6]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
327 pixels[7] = cm[block[7]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
328
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
329 pixels += line_size;
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
330 block += 8;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
331 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
332 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
333
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
334 static void add_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels,
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
335 int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
336 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
337 int i;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
338 uint8_t *cm = cropTbl + MAX_NEG_CROP;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
339
986e461dc072 Initial revision
glantau
parents:
diff changeset
340 /* read the pixels */
986e461dc072 Initial revision
glantau
parents:
diff changeset
341 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
342 pixels[0] = cm[pixels[0] + block[0]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
343 pixels[1] = cm[pixels[1] + block[1]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
344 pixels[2] = cm[pixels[2] + block[2]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
345 pixels[3] = cm[pixels[3] + block[3]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
346 pixels[4] = cm[pixels[4] + block[4]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
347 pixels[5] = cm[pixels[5] + block[5]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
348 pixels[6] = cm[pixels[6] + block[6]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
349 pixels[7] = cm[pixels[7] + block[7]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
350 pixels += line_size;
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
351 block += 8;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
352 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
353 }
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
354 #if 0
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
355
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
356 #define PIXOP2(OPNAME, OP) \
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
357 static void OPNAME ## _pixels(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
358 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
359 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
360 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
361 OP(*((uint64_t*)block), LD64(pixels));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
362 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
363 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
364 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
365 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
366 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
367 static void OPNAME ## _no_rnd_pixels_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
368 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
369 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
370 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
371 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
372 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
373 OP(*((uint64_t*)block), (a&b) + (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
374 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
375 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
376 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
377 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
378 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
379 static void OPNAME ## _pixels_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
380 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
381 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
382 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
383 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
384 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
385 OP(*((uint64_t*)block), (a|b) - (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
386 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
387 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
388 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
389 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
390 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
391 static void OPNAME ## _no_rnd_pixels_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
392 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
393 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
394 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
395 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
396 const uint64_t b= LD64(pixels+line_size);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
397 OP(*((uint64_t*)block), (a&b) + (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
398 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
399 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
400 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
401 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
402 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
403 static void OPNAME ## _pixels_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
404 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
405 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
406 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
407 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
408 const uint64_t b= LD64(pixels+line_size);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
409 OP(*((uint64_t*)block), (a|b) - (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
410 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
411 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
412 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
413 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
414 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
415 static void OPNAME ## _pixels_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
416 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
417 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
418 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
419 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
420 uint64_t l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
421 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
422 + 0x0202020202020202ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
423 uint64_t h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
424 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
425 uint64_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
426 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
427 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
428 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
429 uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
430 uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
431 l1= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
432 + (b&0x0303030303030303ULL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
433 h1= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
434 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
435 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
436 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
437 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
438 a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
439 b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
440 l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
441 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
442 + 0x0202020202020202ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
443 h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
444 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
445 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
446 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
447 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
448 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
449 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
450 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
451 static void OPNAME ## _no_rnd_pixels_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
452 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
453 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
454 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
455 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
456 uint64_t l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
457 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
458 + 0x0101010101010101ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
459 uint64_t h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
460 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
461 uint64_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
462 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
463 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
464 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
465 uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
466 uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
467 l1= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
468 + (b&0x0303030303030303ULL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
469 h1= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
470 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
471 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
472 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
473 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
474 a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
475 b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
476 l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
477 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
478 + 0x0101010101010101ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
479 h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
480 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
481 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
482 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
483 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
484 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
485 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
486 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
487 CALL_2X_PIXELS(OPNAME ## _pixels16_c , OPNAME ## _pixels_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
488 CALL_2X_PIXELS(OPNAME ## _pixels16_x2_c , OPNAME ## _pixels_x2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
489 CALL_2X_PIXELS(OPNAME ## _pixels16_y2_c , OPNAME ## _pixels_y2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
490 CALL_2X_PIXELS(OPNAME ## _pixels16_xy2_c, OPNAME ## _pixels_xy2_c, 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
491 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_x2_c , OPNAME ## _no_rnd_pixels_x2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
492 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_y2_c , OPNAME ## _no_rnd_pixels_y2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
493 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_xy2_c, OPNAME ## _no_rnd_pixels_xy2_c, 8)
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
494
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
495 #define op_avg(a, b) a = ( ((a)|(b)) - ((((a)^(b))&0xFEFEFEFEFEFEFEFEULL)>>1) )
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
496 #else // 64 bit variant
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
497
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
498 #define PIXOP2(OPNAME, OP) \
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
499 static void OPNAME ## _pixels2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
500 int i;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
501 for(i=0; i<h; i++){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
502 OP(*((uint16_t*)(block )), LD16(pixels ));\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
503 pixels+=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
504 block +=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
505 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
506 }\
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
507 static void OPNAME ## _pixels4_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
508 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
509 for(i=0; i<h; i++){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
510 OP(*((uint32_t*)(block )), LD32(pixels ));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
511 pixels+=line_size;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
512 block +=line_size;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
513 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
514 }\
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
515 static void OPNAME ## _pixels8_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
516 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
517 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
518 OP(*((uint32_t*)(block )), LD32(pixels ));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
519 OP(*((uint32_t*)(block+4)), LD32(pixels+4));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
520 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
521 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
522 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
523 }\
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
524 static inline void OPNAME ## _no_rnd_pixels8_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
525 OPNAME ## _pixels8_c(block, pixels, line_size, h);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
526 }\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
527 \
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
528 static inline void OPNAME ## _no_rnd_pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
529 int src_stride1, int src_stride2, int h){\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
530 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
531 for(i=0; i<h; i++){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
532 uint32_t a,b;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
533 a= LD32(&src1[i*src_stride1 ]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
534 b= LD32(&src2[i*src_stride2 ]);\
1264
2fa34e615c76 cleanup
michaelni
parents: 1259
diff changeset
535 OP(*((uint32_t*)&dst[i*dst_stride ]), no_rnd_avg32(a, b));\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
536 a= LD32(&src1[i*src_stride1+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
537 b= LD32(&src2[i*src_stride2+4]);\
1264
2fa34e615c76 cleanup
michaelni
parents: 1259
diff changeset
538 OP(*((uint32_t*)&dst[i*dst_stride+4]), no_rnd_avg32(a, b));\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
539 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
540 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
541 \
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
542 static inline void OPNAME ## _pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
543 int src_stride1, int src_stride2, int h){\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
544 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
545 for(i=0; i<h; i++){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
546 uint32_t a,b;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
547 a= LD32(&src1[i*src_stride1 ]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
548 b= LD32(&src2[i*src_stride2 ]);\
1264
2fa34e615c76 cleanup
michaelni
parents: 1259
diff changeset
549 OP(*((uint32_t*)&dst[i*dst_stride ]), rnd_avg32(a, b));\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
550 a= LD32(&src1[i*src_stride1+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
551 b= LD32(&src2[i*src_stride2+4]);\
1264
2fa34e615c76 cleanup
michaelni
parents: 1259
diff changeset
552 OP(*((uint32_t*)&dst[i*dst_stride+4]), rnd_avg32(a, b));\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
553 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
554 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
555 \
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
556 static inline void OPNAME ## _pixels4_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
557 int src_stride1, int src_stride2, int h){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
558 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
559 for(i=0; i<h; i++){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
560 uint32_t a,b;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
561 a= LD32(&src1[i*src_stride1 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
562 b= LD32(&src2[i*src_stride2 ]);\
1264
2fa34e615c76 cleanup
michaelni
parents: 1259
diff changeset
563 OP(*((uint32_t*)&dst[i*dst_stride ]), rnd_avg32(a, b));\
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
564 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
565 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
566 \
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
567 static inline void OPNAME ## _pixels2_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
568 int src_stride1, int src_stride2, int h){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
569 int i;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
570 for(i=0; i<h; i++){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
571 uint32_t a,b;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
572 a= LD16(&src1[i*src_stride1 ]);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
573 b= LD16(&src2[i*src_stride2 ]);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
574 OP(*((uint16_t*)&dst[i*dst_stride ]), rnd_avg32(a, b));\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
575 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
576 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
577 \
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
578 static inline void OPNAME ## _pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
579 int src_stride1, int src_stride2, int h){\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
580 OPNAME ## _pixels8_l2(dst , src1 , src2 , dst_stride, src_stride1, src_stride2, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
581 OPNAME ## _pixels8_l2(dst+8, src1+8, src2+8, dst_stride, src_stride1, src_stride2, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
582 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
583 \
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
584 static inline void OPNAME ## _no_rnd_pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
585 int src_stride1, int src_stride2, int h){\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
586 OPNAME ## _no_rnd_pixels8_l2(dst , src1 , src2 , dst_stride, src_stride1, src_stride2, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
587 OPNAME ## _no_rnd_pixels8_l2(dst+8, src1+8, src2+8, dst_stride, src_stride1, src_stride2, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
588 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
589 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
590 static inline void OPNAME ## _no_rnd_pixels8_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
591 OPNAME ## _no_rnd_pixels8_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
592 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
593 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
594 static inline void OPNAME ## _pixels8_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
595 OPNAME ## _pixels8_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
596 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
597 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
598 static inline void OPNAME ## _no_rnd_pixels8_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
599 OPNAME ## _no_rnd_pixels8_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
600 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
601 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
602 static inline void OPNAME ## _pixels8_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
603 OPNAME ## _pixels8_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
604 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
605 \
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
606 static inline void OPNAME ## _pixels8_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4,\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
607 int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h){\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
608 int i;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
609 for(i=0; i<h; i++){\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
610 uint32_t a, b, c, d, l0, l1, h0, h1;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
611 a= LD32(&src1[i*src_stride1]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
612 b= LD32(&src2[i*src_stride2]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
613 c= LD32(&src3[i*src_stride3]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
614 d= LD32(&src4[i*src_stride4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
615 l0= (a&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
616 + (b&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
617 + 0x02020202UL;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
618 h0= ((a&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
619 + ((b&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
620 l1= (c&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
621 + (d&0x03030303UL);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
622 h1= ((c&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
623 + ((d&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
624 OP(*((uint32_t*)&dst[i*dst_stride]), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
625 a= LD32(&src1[i*src_stride1+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
626 b= LD32(&src2[i*src_stride2+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
627 c= LD32(&src3[i*src_stride3+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
628 d= LD32(&src4[i*src_stride4+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
629 l0= (a&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
630 + (b&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
631 + 0x02020202UL;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
632 h0= ((a&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
633 + ((b&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
634 l1= (c&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
635 + (d&0x03030303UL);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
636 h1= ((c&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
637 + ((d&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
638 OP(*((uint32_t*)&dst[i*dst_stride+4]), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
639 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
640 }\
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
641 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
642 static inline void OPNAME ## _pixels4_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
643 OPNAME ## _pixels4_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
644 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
645 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
646 static inline void OPNAME ## _pixels4_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
647 OPNAME ## _pixels4_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
648 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
649 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
650 static inline void OPNAME ## _pixels2_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
651 OPNAME ## _pixels2_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
652 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
653 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
654 static inline void OPNAME ## _pixels2_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
655 OPNAME ## _pixels2_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
656 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
657 \
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
658 static inline void OPNAME ## _no_rnd_pixels8_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4,\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
659 int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h){\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
660 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
661 for(i=0; i<h; i++){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
662 uint32_t a, b, c, d, l0, l1, h0, h1;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
663 a= LD32(&src1[i*src_stride1]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
664 b= LD32(&src2[i*src_stride2]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
665 c= LD32(&src3[i*src_stride3]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
666 d= LD32(&src4[i*src_stride4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
667 l0= (a&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
668 + (b&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
669 + 0x01010101UL;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
670 h0= ((a&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
671 + ((b&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
672 l1= (c&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
673 + (d&0x03030303UL);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
674 h1= ((c&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
675 + ((d&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
676 OP(*((uint32_t*)&dst[i*dst_stride]), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
677 a= LD32(&src1[i*src_stride1+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
678 b= LD32(&src2[i*src_stride2+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
679 c= LD32(&src3[i*src_stride3+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
680 d= LD32(&src4[i*src_stride4+4]);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
681 l0= (a&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
682 + (b&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
683 + 0x01010101UL;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
684 h0= ((a&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
685 + ((b&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
686 l1= (c&0x03030303UL)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
687 + (d&0x03030303UL);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
688 h1= ((c&0xFCFCFCFCUL)>>2)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
689 + ((d&0xFCFCFCFCUL)>>2);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
690 OP(*((uint32_t*)&dst[i*dst_stride+4]), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
691 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
692 }\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
693 static inline void OPNAME ## _pixels16_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4,\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
694 int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h){\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
695 OPNAME ## _pixels8_l4(dst , src1 , src2 , src3 , src4 , dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
696 OPNAME ## _pixels8_l4(dst+8, src1+8, src2+8, src3+8, src4+8, dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
697 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
698 static inline void OPNAME ## _no_rnd_pixels16_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4,\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
699 int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h){\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
700 OPNAME ## _no_rnd_pixels8_l4(dst , src1 , src2 , src3 , src4 , dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
701 OPNAME ## _no_rnd_pixels8_l4(dst+8, src1+8, src2+8, src3+8, src4+8, dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
702 }\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
703 \
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
704 static inline void OPNAME ## _pixels2_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
705 {\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
706 int i, a0, b0, a1, b1;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
707 a0= pixels[0];\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
708 b0= pixels[1] + 2;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
709 a0 += b0;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
710 b0 += pixels[2];\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
711 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
712 pixels+=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
713 for(i=0; i<h; i+=2){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
714 a1= pixels[0];\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
715 b1= pixels[1];\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
716 a1 += b1;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
717 b1 += pixels[2];\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
718 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
719 block[0]= (a1+a0)>>2; /* FIXME non put */\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
720 block[1]= (b1+b0)>>2;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
721 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
722 pixels+=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
723 block +=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
724 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
725 a0= pixels[0];\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
726 b0= pixels[1] + 2;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
727 a0 += b0;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
728 b0 += pixels[2];\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
729 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
730 block[0]= (a1+a0)>>2;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
731 block[1]= (b1+b0)>>2;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
732 pixels+=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
733 block +=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
734 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
735 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
736 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
737 static inline void OPNAME ## _pixels4_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
738 {\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
739 int i;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
740 const uint32_t a= LD32(pixels );\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
741 const uint32_t b= LD32(pixels+1);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
742 uint32_t l0= (a&0x03030303UL)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
743 + (b&0x03030303UL)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
744 + 0x02020202UL;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
745 uint32_t h0= ((a&0xFCFCFCFCUL)>>2)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
746 + ((b&0xFCFCFCFCUL)>>2);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
747 uint32_t l1,h1;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
748 \
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
749 pixels+=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
750 for(i=0; i<h; i+=2){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
751 uint32_t a= LD32(pixels );\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
752 uint32_t b= LD32(pixels+1);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
753 l1= (a&0x03030303UL)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
754 + (b&0x03030303UL);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
755 h1= ((a&0xFCFCFCFCUL)>>2)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
756 + ((b&0xFCFCFCFCUL)>>2);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
757 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
758 pixels+=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
759 block +=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
760 a= LD32(pixels );\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
761 b= LD32(pixels+1);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
762 l0= (a&0x03030303UL)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
763 + (b&0x03030303UL)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
764 + 0x02020202UL;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
765 h0= ((a&0xFCFCFCFCUL)>>2)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
766 + ((b&0xFCFCFCFCUL)>>2);\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
767 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
768 pixels+=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
769 block +=line_size;\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
770 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
771 }\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
772 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
773 static inline void OPNAME ## _pixels8_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
774 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
775 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
776 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
777 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
778 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
779 const uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
780 uint32_t l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
781 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
782 + 0x02020202UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
783 uint32_t h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
784 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
785 uint32_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
786 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
787 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
788 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
789 uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
790 uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
791 l1= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
792 + (b&0x03030303UL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
793 h1= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
794 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
795 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
796 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
797 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
798 a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
799 b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
800 l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
801 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
802 + 0x02020202UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
803 h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
804 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
805 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
806 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
807 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
808 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
809 pixels+=4-line_size*(h+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
810 block +=4-line_size*h;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
811 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
812 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
813 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
814 static inline void OPNAME ## _no_rnd_pixels8_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
815 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
816 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
817 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
818 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
819 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
820 const uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
821 uint32_t l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
822 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
823 + 0x01010101UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
824 uint32_t h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
825 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
826 uint32_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
827 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
828 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
829 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
830 uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
831 uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
832 l1= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
833 + (b&0x03030303UL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
834 h1= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
835 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
836 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
837 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
838 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
839 a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
840 b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
841 l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
842 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
843 + 0x01010101UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
844 h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
845 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
846 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
847 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
848 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
849 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
850 pixels+=4-line_size*(h+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
851 block +=4-line_size*h;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
852 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
853 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
854 \
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
855 CALL_2X_PIXELS(OPNAME ## _pixels16_c , OPNAME ## _pixels8_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
856 CALL_2X_PIXELS(OPNAME ## _pixels16_x2_c , OPNAME ## _pixels8_x2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
857 CALL_2X_PIXELS(OPNAME ## _pixels16_y2_c , OPNAME ## _pixels8_y2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
858 CALL_2X_PIXELS(OPNAME ## _pixels16_xy2_c, OPNAME ## _pixels8_xy2_c, 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
859 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_c , OPNAME ## _pixels8_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
860 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_x2_c , OPNAME ## _no_rnd_pixels8_x2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
861 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_y2_c , OPNAME ## _no_rnd_pixels8_y2_c , 8)\
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
862 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_xy2_c, OPNAME ## _no_rnd_pixels8_xy2_c, 8)\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
863
1264
2fa34e615c76 cleanup
michaelni
parents: 1259
diff changeset
864 #define op_avg(a, b) a = rnd_avg32(a, b)
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
865 #endif
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
866 #define op_put(a, b) a = b
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
867
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
868 PIXOP2(avg, op_avg)
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
869 PIXOP2(put, op_put)
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
870 #undef op_avg
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
871 #undef op_put
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
872
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
873 #define avg2(a,b) ((a+b+1)>>1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
874 #define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
986e461dc072 Initial revision
glantau
parents:
diff changeset
875
753
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
876
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
877 static void gmc1_c(uint8_t *dst, uint8_t *src, int stride, int h, int x16, int y16, int rounder)
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
878 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
879 const int A=(16-x16)*(16-y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
880 const int B=( x16)*(16-y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
881 const int C=(16-x16)*( y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
882 const int D=( x16)*( y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
883 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
884
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
885 for(i=0; i<h; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
886 {
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
887 dst[0]= (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
888 dst[1]= (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
889 dst[2]= (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
890 dst[3]= (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
891 dst[4]= (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
892 dst[5]= (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
893 dst[6]= (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
894 dst[7]= (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8] + rounder)>>8;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
895 dst+= stride;
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
896 src+= stride;
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
897 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
898 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
899
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
900 static void gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
753
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
901 int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height)
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
902 {
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
903 int y, vx, vy;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
904 const int s= 1<<shift;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
905
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
906 width--;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
907 height--;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
908
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
909 for(y=0; y<h; y++){
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
910 int x;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
911
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
912 vx= ox;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
913 vy= oy;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
914 for(x=0; x<8; x++){ //XXX FIXME optimize
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
915 int src_x, src_y, frac_x, frac_y, index;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
916
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
917 src_x= vx>>16;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
918 src_y= vy>>16;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
919 frac_x= src_x&(s-1);
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
920 frac_y= src_y&(s-1);
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
921 src_x>>=shift;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
922 src_y>>=shift;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
923
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
924 if((unsigned)src_x < width){
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
925 if((unsigned)src_y < height){
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
926 index= src_x + src_y*stride;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
927 dst[y*stride + x]= ( ( src[index ]*(s-frac_x)
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
928 + src[index +1]* frac_x )*(s-frac_y)
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
929 + ( src[index+stride ]*(s-frac_x)
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
930 + src[index+stride+1]* frac_x )* frac_y
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
931 + r)>>(shift*2);
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
932 }else{
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
933 index= src_x + clip(src_y, 0, height)*stride;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
934 dst[y*stride + x]= ( ( src[index ]*(s-frac_x)
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
935 + src[index +1]* frac_x )*s
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
936 + r)>>(shift*2);
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
937 }
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
938 }else{
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
939 if((unsigned)src_y < height){
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
940 index= clip(src_x, 0, width) + src_y*stride;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
941 dst[y*stride + x]= ( ( src[index ]*(s-frac_y)
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
942 + src[index+stride ]* frac_y )*s
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
943 + r)>>(shift*2);
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
944 }else{
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
945 index= clip(src_x, 0, width) + clip(src_y, 0, height)*stride;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
946 dst[y*stride + x]= src[index ];
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
947 }
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
948 }
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
949
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
950 vx+= dxx;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
951 vy+= dyx;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
952 }
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
953 ox += dxy;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
954 oy += dyy;
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
955 }
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
956 }
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
957
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
958 static inline void put_tpel_pixels_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
959 switch(width){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
960 case 2: put_pixels2_c (dst, src, stride, height); break;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
961 case 4: put_pixels4_c (dst, src, stride, height); break;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
962 case 8: put_pixels8_c (dst, src, stride, height); break;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
963 case 16:put_pixels16_c(dst, src, stride, height); break;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
964 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
965 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
966
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
967 static inline void put_tpel_pixels_mc10_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
968 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
969 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
970 for (j=0; j < width; j++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
971 dst[j] = (683*(2*src[j] + src[j+1] + 1)) >> 11;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
972 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
973 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
974 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
975 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
976 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
977
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
978 static inline void put_tpel_pixels_mc20_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
979 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
980 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
981 for (j=0; j < width; j++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
982 dst[j] = (683*(src[j] + 2*src[j+1] + 1)) >> 11;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
983 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
984 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
985 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
986 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
987 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
988
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
989 static inline void put_tpel_pixels_mc01_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
990 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
991 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
992 for (j=0; j < width; j++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
993 dst[j] = (683*(2*src[j] + src[j+stride] + 1)) >> 11;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
994 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
995 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
996 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
997 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
998 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
999
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1000 static inline void put_tpel_pixels_mc11_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1001 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1002 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1003 for (j=0; j < width; j++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1004 dst[j] = (2731*(4*src[j] + 3*src[j+1] + 3*src[j+stride] + 2*src[j+stride+1] + 6)) >> 15;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1005 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1006 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1007 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1008 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1009 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1010
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1011 static inline void put_tpel_pixels_mc12_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1012 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1013 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1014 for (j=0; j < width; j++) {
1329
2114c1e206e8 Fix third pixel motion compensation
tmmm
parents: 1324
diff changeset
1015 dst[j] = (2731*(3*src[j] + 2*src[j+1] + 4*src[j+stride] + 3*src[j+stride+1] + 6)) >> 15;
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1016 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1017 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1018 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1019 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1020 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1021
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1022 static inline void put_tpel_pixels_mc02_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1023 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1024 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1025 for (j=0; j < width; j++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1026 dst[j] = (683*(src[j] + 2*src[j+stride] + 1)) >> 11;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1027 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1028 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1029 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1030 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1031 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1032
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1033 static inline void put_tpel_pixels_mc21_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1034 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1035 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1036 for (j=0; j < width; j++) {
1329
2114c1e206e8 Fix third pixel motion compensation
tmmm
parents: 1324
diff changeset
1037 dst[j] = (2731*(3*src[j] + 4*src[j+1] + 2*src[j+stride] + 3*src[j+stride+1] + 6)) >> 15;
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1038 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1039 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1040 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1041 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1042 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1043
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1044 static inline void put_tpel_pixels_mc22_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1045 int i,j;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1046 for (i=0; i < height; i++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1047 for (j=0; j < width; j++) {
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1048 dst[j] = (2731*(2*src[j] + 3*src[j+1] + 3*src[j+stride] + 4*src[j+stride+1] + 6)) >> 15;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1049 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1050 src += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1051 dst += stride;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1052 }
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1053 }
1319
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1054
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1055 static inline void avg_tpel_pixels_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1056 switch(width){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1057 case 2: avg_pixels2_c (dst, src, stride, height); break;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1058 case 4: avg_pixels4_c (dst, src, stride, height); break;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1059 case 8: avg_pixels8_c (dst, src, stride, height); break;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1060 case 16:avg_pixels16_c(dst, src, stride, height); break;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1061 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1062 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1063
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1064 static inline void avg_tpel_pixels_mc10_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1065 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1066 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1067 for (j=0; j < width; j++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1068 dst[j] = (dst[j] + ((683*(2*src[j] + src[j+1] + 1)) >> 11) + 1) >> 1;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1069 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1070 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1071 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1072 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1073 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1074
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1075 static inline void avg_tpel_pixels_mc20_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1076 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1077 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1078 for (j=0; j < width; j++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1079 dst[j] = (dst[j] + ((683*(src[j] + 2*src[j+1] + 1)) >> 11) + 1) >> 1;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1080 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1081 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1082 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1083 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1084 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1085
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1086 static inline void avg_tpel_pixels_mc01_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1087 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1088 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1089 for (j=0; j < width; j++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1090 dst[j] = (dst[j] + ((683*(2*src[j] + src[j+stride] + 1)) >> 11) + 1) >> 1;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1091 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1092 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1093 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1094 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1095 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1096
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1097 static inline void avg_tpel_pixels_mc11_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1098 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1099 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1100 for (j=0; j < width; j++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1101 dst[j] = (dst[j] + ((2731*(4*src[j] + 3*src[j+1] + 3*src[j+stride] + 2*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1102 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1103 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1104 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1105 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1106 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1107
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1108 static inline void avg_tpel_pixels_mc12_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1109 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1110 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1111 for (j=0; j < width; j++) {
1329
2114c1e206e8 Fix third pixel motion compensation
tmmm
parents: 1324
diff changeset
1112 dst[j] = (dst[j] + ((2731*(3*src[j] + 2*src[j+1] + 4*src[j+stride] + 3*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
1319
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1113 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1114 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1115 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1116 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1117 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1118
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1119 static inline void avg_tpel_pixels_mc02_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1120 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1121 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1122 for (j=0; j < width; j++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1123 dst[j] = (dst[j] + ((683*(src[j] + 2*src[j+stride] + 1)) >> 11) + 1) >> 1;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1124 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1125 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1126 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1127 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1128 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1129
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1130 static inline void avg_tpel_pixels_mc21_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1131 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1132 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1133 for (j=0; j < width; j++) {
1329
2114c1e206e8 Fix third pixel motion compensation
tmmm
parents: 1324
diff changeset
1134 dst[j] = (dst[j] + ((2731*(3*src[j] + 4*src[j+1] + 2*src[j+stride] + 3*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
1319
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1135 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1136 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1137 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1138 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1139 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1140
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1141 static inline void avg_tpel_pixels_mc22_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1142 int i,j;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1143 for (i=0; i < height; i++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1144 for (j=0; j < width; j++) {
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1145 dst[j] = (dst[j] + ((2731*(2*src[j] + 3*src[j+1] + 3*src[j+stride] + 4*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1146 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1147 src += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1148 dst += stride;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1149 }
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
1150 }
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1151 #if 0
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1152 #define TPEL_WIDTH(width)\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1153 static void put_tpel_pixels ## width ## _mc00_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1154 void put_tpel_pixels_mc00_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1155 static void put_tpel_pixels ## width ## _mc10_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1156 void put_tpel_pixels_mc10_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1157 static void put_tpel_pixels ## width ## _mc20_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1158 void put_tpel_pixels_mc20_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1159 static void put_tpel_pixels ## width ## _mc01_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1160 void put_tpel_pixels_mc01_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1161 static void put_tpel_pixels ## width ## _mc11_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1162 void put_tpel_pixels_mc11_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1163 static void put_tpel_pixels ## width ## _mc21_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1164 void put_tpel_pixels_mc21_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1165 static void put_tpel_pixels ## width ## _mc02_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1166 void put_tpel_pixels_mc02_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1167 static void put_tpel_pixels ## width ## _mc12_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1168 void put_tpel_pixels_mc12_c(dst, src, stride, width, height);}\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1169 static void put_tpel_pixels ## width ## _mc22_c(uint8_t *dst, const uint8_t *src, int stride, int height){\
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1170 void put_tpel_pixels_mc22_c(dst, src, stride, width, height);}
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1171 #endif
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
1172
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1173 #define H264_CHROMA_MC(OPNAME, OP)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1174 static void OPNAME ## h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1175 const int A=(8-x)*(8-y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1176 const int B=( x)*(8-y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1177 const int C=(8-x)*( y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1178 const int D=( x)*( y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1179 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1180 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1181 assert(x<8 && y<8 && x>=0 && y>=0);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1182 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1183 for(i=0; i<h; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1184 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1185 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1186 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1187 dst+= stride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1188 src+= stride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1189 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1190 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1191 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1192 static void OPNAME ## h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1193 const int A=(8-x)*(8-y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1194 const int B=( x)*(8-y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1195 const int C=(8-x)*( y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1196 const int D=( x)*( y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1197 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1198 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1199 assert(x<8 && y<8 && x>=0 && y>=0);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1200 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1201 for(i=0; i<h; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1202 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1203 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1204 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1205 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1206 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1207 dst+= stride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1208 src+= stride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1209 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1210 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1211 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1212 static void OPNAME ## h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1213 const int A=(8-x)*(8-y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1214 const int B=( x)*(8-y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1215 const int C=(8-x)*( y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1216 const int D=( x)*( y);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1217 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1218 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1219 assert(x<8 && y<8 && x>=0 && y>=0);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1220 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1221 for(i=0; i<h; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1222 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1223 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1224 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1225 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1226 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1227 OP(dst[4], (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1228 OP(dst[5], (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1229 OP(dst[6], (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1230 OP(dst[7], (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1231 dst+= stride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1232 src+= stride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1233 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1234 }
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1235
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1236 #define op_avg(a, b) a = (((a)+(((b) + 32)>>6)+1)>>1)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1237 #define op_put(a, b) a = (((b) + 32)>>6)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1238
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1239 H264_CHROMA_MC(put_ , op_put)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1240 H264_CHROMA_MC(avg_ , op_avg)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1241 #undef op_avg
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1242 #undef op_put
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1243
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1244 static inline void copy_block4(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1245 {
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1246 int i;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1247 for(i=0; i<h; i++)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1248 {
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1249 ST32(dst , LD32(src ));
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1250 dst+=dstStride;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1251 src+=srcStride;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1252 }
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1253 }
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1254
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1255 static inline void copy_block8(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1256 {
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1257 int i;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1258 for(i=0; i<h; i++)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1259 {
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1260 ST32(dst , LD32(src ));
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1261 ST32(dst+4 , LD32(src+4 ));
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1262 dst+=dstStride;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1263 src+=srcStride;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1264 }
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1265 }
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1266
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1267 static inline void copy_block16(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1268 {
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1269 int i;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1270 for(i=0; i<h; i++)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1271 {
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1272 ST32(dst , LD32(src ));
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1273 ST32(dst+4 , LD32(src+4 ));
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1274 ST32(dst+8 , LD32(src+8 ));
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1275 ST32(dst+12, LD32(src+12));
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1276 dst+=dstStride;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1277 src+=srcStride;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1278 }
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1279 }
753
8e1f0939d15d complete mpeg4 GMC decoding support
michaelni
parents: 751
diff changeset
1280
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1281 static inline void copy_block17(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1282 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1283 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1284 for(i=0; i<h; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1285 {
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1286 ST32(dst , LD32(src ));
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1287 ST32(dst+4 , LD32(src+4 ));
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1288 ST32(dst+8 , LD32(src+8 ));
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1289 ST32(dst+12, LD32(src+12));
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1290 dst[16]= src[16];
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1291 dst+=dstStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1292 src+=srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1293 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1294 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1295
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1296 static inline void copy_block9(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1297 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1298 int i;
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1299 for(i=0; i<h; i++)
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1300 {
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1301 ST32(dst , LD32(src ));
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1302 ST32(dst+4 , LD32(src+4 ));
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1303 dst[8]= src[8];
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1304 dst+=dstStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1305 src+=srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1306 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1307 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1308
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1309
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1310 #define QPEL_MC(r, OPNAME, RND, OP) \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1311 static void OPNAME ## mpeg4_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1312 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1313 int i;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1314 for(i=0; i<h; i++)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1315 {\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1316 OP(dst[0], (src[0]+src[1])*20 - (src[0]+src[2])*6 + (src[1]+src[3])*3 - (src[2]+src[4]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1317 OP(dst[1], (src[1]+src[2])*20 - (src[0]+src[3])*6 + (src[0]+src[4])*3 - (src[1]+src[5]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1318 OP(dst[2], (src[2]+src[3])*20 - (src[1]+src[4])*6 + (src[0]+src[5])*3 - (src[0]+src[6]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1319 OP(dst[3], (src[3]+src[4])*20 - (src[2]+src[5])*6 + (src[1]+src[6])*3 - (src[0]+src[7]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1320 OP(dst[4], (src[4]+src[5])*20 - (src[3]+src[6])*6 + (src[2]+src[7])*3 - (src[1]+src[8]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1321 OP(dst[5], (src[5]+src[6])*20 - (src[4]+src[7])*6 + (src[3]+src[8])*3 - (src[2]+src[8]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1322 OP(dst[6], (src[6]+src[7])*20 - (src[5]+src[8])*6 + (src[4]+src[8])*3 - (src[3]+src[7]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1323 OP(dst[7], (src[7]+src[8])*20 - (src[6]+src[8])*6 + (src[5]+src[7])*3 - (src[4]+src[6]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1324 dst+=dstStride;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1325 src+=srcStride;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1326 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1327 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1328 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1329 static void OPNAME ## mpeg4_qpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1330 const int w=8;\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1331 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1332 int i;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1333 for(i=0; i<w; i++)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1334 {\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1335 const int src0= src[0*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1336 const int src1= src[1*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1337 const int src2= src[2*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1338 const int src3= src[3*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1339 const int src4= src[4*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1340 const int src5= src[5*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1341 const int src6= src[6*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1342 const int src7= src[7*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1343 const int src8= src[8*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1344 OP(dst[0*dstStride], (src0+src1)*20 - (src0+src2)*6 + (src1+src3)*3 - (src2+src4));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1345 OP(dst[1*dstStride], (src1+src2)*20 - (src0+src3)*6 + (src0+src4)*3 - (src1+src5));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1346 OP(dst[2*dstStride], (src2+src3)*20 - (src1+src4)*6 + (src0+src5)*3 - (src0+src6));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1347 OP(dst[3*dstStride], (src3+src4)*20 - (src2+src5)*6 + (src1+src6)*3 - (src0+src7));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1348 OP(dst[4*dstStride], (src4+src5)*20 - (src3+src6)*6 + (src2+src7)*3 - (src1+src8));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1349 OP(dst[5*dstStride], (src5+src6)*20 - (src4+src7)*6 + (src3+src8)*3 - (src2+src8));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1350 OP(dst[6*dstStride], (src6+src7)*20 - (src5+src8)*6 + (src4+src8)*3 - (src3+src7));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1351 OP(dst[7*dstStride], (src7+src8)*20 - (src6+src8)*6 + (src5+src7)*3 - (src4+src6));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1352 dst++;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1353 src++;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1354 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1355 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1356 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1357 static void OPNAME ## mpeg4_qpel16_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1358 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1359 int i;\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1360 \
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1361 for(i=0; i<h; i++)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1362 {\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1363 OP(dst[ 0], (src[ 0]+src[ 1])*20 - (src[ 0]+src[ 2])*6 + (src[ 1]+src[ 3])*3 - (src[ 2]+src[ 4]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1364 OP(dst[ 1], (src[ 1]+src[ 2])*20 - (src[ 0]+src[ 3])*6 + (src[ 0]+src[ 4])*3 - (src[ 1]+src[ 5]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1365 OP(dst[ 2], (src[ 2]+src[ 3])*20 - (src[ 1]+src[ 4])*6 + (src[ 0]+src[ 5])*3 - (src[ 0]+src[ 6]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1366 OP(dst[ 3], (src[ 3]+src[ 4])*20 - (src[ 2]+src[ 5])*6 + (src[ 1]+src[ 6])*3 - (src[ 0]+src[ 7]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1367 OP(dst[ 4], (src[ 4]+src[ 5])*20 - (src[ 3]+src[ 6])*6 + (src[ 2]+src[ 7])*3 - (src[ 1]+src[ 8]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1368 OP(dst[ 5], (src[ 5]+src[ 6])*20 - (src[ 4]+src[ 7])*6 + (src[ 3]+src[ 8])*3 - (src[ 2]+src[ 9]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1369 OP(dst[ 6], (src[ 6]+src[ 7])*20 - (src[ 5]+src[ 8])*6 + (src[ 4]+src[ 9])*3 - (src[ 3]+src[10]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1370 OP(dst[ 7], (src[ 7]+src[ 8])*20 - (src[ 6]+src[ 9])*6 + (src[ 5]+src[10])*3 - (src[ 4]+src[11]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1371 OP(dst[ 8], (src[ 8]+src[ 9])*20 - (src[ 7]+src[10])*6 + (src[ 6]+src[11])*3 - (src[ 5]+src[12]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1372 OP(dst[ 9], (src[ 9]+src[10])*20 - (src[ 8]+src[11])*6 + (src[ 7]+src[12])*3 - (src[ 6]+src[13]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1373 OP(dst[10], (src[10]+src[11])*20 - (src[ 9]+src[12])*6 + (src[ 8]+src[13])*3 - (src[ 7]+src[14]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1374 OP(dst[11], (src[11]+src[12])*20 - (src[10]+src[13])*6 + (src[ 9]+src[14])*3 - (src[ 8]+src[15]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1375 OP(dst[12], (src[12]+src[13])*20 - (src[11]+src[14])*6 + (src[10]+src[15])*3 - (src[ 9]+src[16]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1376 OP(dst[13], (src[13]+src[14])*20 - (src[12]+src[15])*6 + (src[11]+src[16])*3 - (src[10]+src[16]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1377 OP(dst[14], (src[14]+src[15])*20 - (src[13]+src[16])*6 + (src[12]+src[16])*3 - (src[11]+src[15]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1378 OP(dst[15], (src[15]+src[16])*20 - (src[14]+src[16])*6 + (src[13]+src[15])*3 - (src[12]+src[14]));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1379 dst+=dstStride;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1380 src+=srcStride;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1381 }\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1382 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1383 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1384 static void OPNAME ## mpeg4_qpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1385 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1386 int i;\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1387 const int w=16;\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1388 for(i=0; i<w; i++)\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1389 {\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1390 const int src0= src[0*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1391 const int src1= src[1*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1392 const int src2= src[2*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1393 const int src3= src[3*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1394 const int src4= src[4*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1395 const int src5= src[5*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1396 const int src6= src[6*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1397 const int src7= src[7*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1398 const int src8= src[8*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1399 const int src9= src[9*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1400 const int src10= src[10*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1401 const int src11= src[11*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1402 const int src12= src[12*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1403 const int src13= src[13*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1404 const int src14= src[14*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1405 const int src15= src[15*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1406 const int src16= src[16*srcStride];\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1407 OP(dst[ 0*dstStride], (src0 +src1 )*20 - (src0 +src2 )*6 + (src1 +src3 )*3 - (src2 +src4 ));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1408 OP(dst[ 1*dstStride], (src1 +src2 )*20 - (src0 +src3 )*6 + (src0 +src4 )*3 - (src1 +src5 ));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1409 OP(dst[ 2*dstStride], (src2 +src3 )*20 - (src1 +src4 )*6 + (src0 +src5 )*3 - (src0 +src6 ));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1410 OP(dst[ 3*dstStride], (src3 +src4 )*20 - (src2 +src5 )*6 + (src1 +src6 )*3 - (src0 +src7 ));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1411 OP(dst[ 4*dstStride], (src4 +src5 )*20 - (src3 +src6 )*6 + (src2 +src7 )*3 - (src1 +src8 ));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1412 OP(dst[ 5*dstStride], (src5 +src6 )*20 - (src4 +src7 )*6 + (src3 +src8 )*3 - (src2 +src9 ));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1413 OP(dst[ 6*dstStride], (src6 +src7 )*20 - (src5 +src8 )*6 + (src4 +src9 )*3 - (src3 +src10));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1414 OP(dst[ 7*dstStride], (src7 +src8 )*20 - (src6 +src9 )*6 + (src5 +src10)*3 - (src4 +src11));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1415 OP(dst[ 8*dstStride], (src8 +src9 )*20 - (src7 +src10)*6 + (src6 +src11)*3 - (src5 +src12));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1416 OP(dst[ 9*dstStride], (src9 +src10)*20 - (src8 +src11)*6 + (src7 +src12)*3 - (src6 +src13));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1417 OP(dst[10*dstStride], (src10+src11)*20 - (src9 +src12)*6 + (src8 +src13)*3 - (src7 +src14));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1418 OP(dst[11*dstStride], (src11+src12)*20 - (src10+src13)*6 + (src9 +src14)*3 - (src8 +src15));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1419 OP(dst[12*dstStride], (src12+src13)*20 - (src11+src14)*6 + (src10+src15)*3 - (src9 +src16));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1420 OP(dst[13*dstStride], (src13+src14)*20 - (src12+src15)*6 + (src11+src16)*3 - (src10+src16));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1421 OP(dst[14*dstStride], (src14+src15)*20 - (src13+src16)*6 + (src12+src16)*3 - (src11+src15));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1422 OP(dst[15*dstStride], (src15+src16)*20 - (src14+src16)*6 + (src13+src15)*3 - (src12+src14));\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1423 dst++;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1424 src++;\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1425 }\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1426 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1427 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1428 static void OPNAME ## qpel8_mc00_c (uint8_t *dst, uint8_t *src, int stride){\
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
1429 OPNAME ## pixels8_c(dst, src, stride, 8);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1430 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1431 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1432 static void OPNAME ## qpel8_mc10_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1433 uint8_t half[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1434 put ## RND ## mpeg4_qpel8_h_lowpass(half, src, 8, stride, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1435 OPNAME ## pixels8_l2(dst, src, half, stride, stride, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1436 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1437 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1438 static void OPNAME ## qpel8_mc20_c(uint8_t *dst, uint8_t *src, int stride){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1439 OPNAME ## mpeg4_qpel8_h_lowpass(dst, src, stride, stride, 8);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1440 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1441 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1442 static void OPNAME ## qpel8_mc30_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1443 uint8_t half[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1444 put ## RND ## mpeg4_qpel8_h_lowpass(half, src, 8, stride, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1445 OPNAME ## pixels8_l2(dst, src+1, half, stride, stride, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1446 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1447 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1448 static void OPNAME ## qpel8_mc01_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1449 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1450 uint8_t half[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1451 copy_block9(full, src, 16, stride, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1452 put ## RND ## mpeg4_qpel8_v_lowpass(half, full, 8, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1453 OPNAME ## pixels8_l2(dst, full, half, stride, 16, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1454 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1455 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1456 static void OPNAME ## qpel8_mc02_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1457 uint8_t full[16*9];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1458 copy_block9(full, src, 16, stride, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1459 OPNAME ## mpeg4_qpel8_v_lowpass(dst, full, stride, 16);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1460 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1461 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1462 static void OPNAME ## qpel8_mc03_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1463 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1464 uint8_t half[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1465 copy_block9(full, src, 16, stride, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1466 put ## RND ## mpeg4_qpel8_v_lowpass(half, full, 8, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1467 OPNAME ## pixels8_l2(dst, full+16, half, stride, 16, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1468 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1469 void ff_ ## OPNAME ## qpel8_mc11_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1470 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1471 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1472 uint8_t halfV[64];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1473 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1474 copy_block9(full, src, 16, stride, 9);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1475 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1476 put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full, 8, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1477 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1478 OPNAME ## pixels8_l4(dst, full, halfH, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1479 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1480 static void OPNAME ## qpel8_mc11_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1481 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1482 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1483 uint8_t halfHV[64];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1484 copy_block9(full, src, 16, stride, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1485 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1486 put ## RND ## pixels8_l2(halfH, halfH, full, 8, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1487 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1488 OPNAME ## pixels8_l2(dst, halfH, halfHV, stride, 8, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1489 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1490 void ff_ ## OPNAME ## qpel8_mc31_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1491 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1492 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1493 uint8_t halfV[64];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1494 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1495 copy_block9(full, src, 16, stride, 9);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1496 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1497 put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full+1, 8, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1498 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1499 OPNAME ## pixels8_l4(dst, full+1, halfH, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1500 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1501 static void OPNAME ## qpel8_mc31_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1502 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1503 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1504 uint8_t halfHV[64];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1505 copy_block9(full, src, 16, stride, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1506 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1507 put ## RND ## pixels8_l2(halfH, halfH, full+1, 8, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1508 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1509 OPNAME ## pixels8_l2(dst, halfH, halfHV, stride, 8, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1510 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1511 void ff_ ## OPNAME ## qpel8_mc13_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1512 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1513 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1514 uint8_t halfV[64];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1515 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1516 copy_block9(full, src, 16, stride, 9);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1517 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1518 put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full, 8, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1519 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1520 OPNAME ## pixels8_l4(dst, full+16, halfH+8, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1521 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1522 static void OPNAME ## qpel8_mc13_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1523 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1524 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1525 uint8_t halfHV[64];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1526 copy_block9(full, src, 16, stride, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1527 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1528 put ## RND ## pixels8_l2(halfH, halfH, full, 8, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1529 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1530 OPNAME ## pixels8_l2(dst, halfH+8, halfHV, stride, 8, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1531 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1532 void ff_ ## OPNAME ## qpel8_mc33_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1533 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1534 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1535 uint8_t halfV[64];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1536 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1537 copy_block9(full, src, 16, stride, 9);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1538 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full , 8, 16, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1539 put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full+1, 8, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1540 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1541 OPNAME ## pixels8_l4(dst, full+17, halfH+8, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1542 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1543 static void OPNAME ## qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1544 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1545 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1546 uint8_t halfHV[64];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1547 copy_block9(full, src, 16, stride, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1548 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1549 put ## RND ## pixels8_l2(halfH, halfH, full+1, 8, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1550 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1551 OPNAME ## pixels8_l2(dst, halfH+8, halfHV, stride, 8, 8, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1552 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1553 static void OPNAME ## qpel8_mc21_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1554 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1555 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1556 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, src, 8, stride, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1557 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1558 OPNAME ## pixels8_l2(dst, halfH, halfHV, stride, 8, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1559 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1560 static void OPNAME ## qpel8_mc23_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1561 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1562 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1563 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, src, 8, stride, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1564 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1565 OPNAME ## pixels8_l2(dst, halfH+8, halfHV, stride, 8, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1566 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1567 void ff_ ## OPNAME ## qpel8_mc12_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1568 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1569 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1570 uint8_t halfV[64];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1571 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1572 copy_block9(full, src, 16, stride, 9);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1573 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1574 put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full, 8, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1575 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1576 OPNAME ## pixels8_l2(dst, halfV, halfHV, stride, 8, 8, 8);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1577 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1578 static void OPNAME ## qpel8_mc12_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1579 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1580 uint8_t halfH[72];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1581 copy_block9(full, src, 16, stride, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1582 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1583 put ## RND ## pixels8_l2(halfH, halfH, full, 8, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1584 OPNAME ## mpeg4_qpel8_v_lowpass(dst, halfH, stride, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1585 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1586 void ff_ ## OPNAME ## qpel8_mc32_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1587 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1588 uint8_t halfH[72];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1589 uint8_t halfV[64];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1590 uint8_t halfHV[64];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1591 copy_block9(full, src, 16, stride, 9);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1592 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1593 put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full+1, 8, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1594 put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1595 OPNAME ## pixels8_l2(dst, halfV, halfHV, stride, 8, 8, 8);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1596 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1597 static void OPNAME ## qpel8_mc32_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1598 uint8_t full[16*9];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1599 uint8_t halfH[72];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1600 copy_block9(full, src, 16, stride, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1601 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1602 put ## RND ## pixels8_l2(halfH, halfH, full+1, 8, 8, 16, 9);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1603 OPNAME ## mpeg4_qpel8_v_lowpass(dst, halfH, stride, 8);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1604 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1605 static void OPNAME ## qpel8_mc22_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1606 uint8_t halfH[72];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1607 put ## RND ## mpeg4_qpel8_h_lowpass(halfH, src, 8, stride, 9);\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1608 OPNAME ## mpeg4_qpel8_v_lowpass(dst, halfH, stride, 8);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1609 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1610 static void OPNAME ## qpel16_mc00_c (uint8_t *dst, uint8_t *src, int stride){\
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
1611 OPNAME ## pixels16_c(dst, src, stride, 16);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1612 }\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1613 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1614 static void OPNAME ## qpel16_mc10_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1615 uint8_t half[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1616 put ## RND ## mpeg4_qpel16_h_lowpass(half, src, 16, stride, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1617 OPNAME ## pixels16_l2(dst, src, half, stride, stride, 16, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1618 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1619 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1620 static void OPNAME ## qpel16_mc20_c(uint8_t *dst, uint8_t *src, int stride){\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1621 OPNAME ## mpeg4_qpel16_h_lowpass(dst, src, stride, stride, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1622 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1623 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1624 static void OPNAME ## qpel16_mc30_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1625 uint8_t half[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1626 put ## RND ## mpeg4_qpel16_h_lowpass(half, src, 16, stride, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1627 OPNAME ## pixels16_l2(dst, src+1, half, stride, stride, 16, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1628 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1629 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1630 static void OPNAME ## qpel16_mc01_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1631 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1632 uint8_t half[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1633 copy_block17(full, src, 24, stride, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1634 put ## RND ## mpeg4_qpel16_v_lowpass(half, full, 16, 24);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1635 OPNAME ## pixels16_l2(dst, full, half, stride, 24, 16, 16);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1636 }\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1637 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1638 static void OPNAME ## qpel16_mc02_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1639 uint8_t full[24*17];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1640 copy_block17(full, src, 24, stride, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1641 OPNAME ## mpeg4_qpel16_v_lowpass(dst, full, stride, 24);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1642 }\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1643 \
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1644 static void OPNAME ## qpel16_mc03_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1645 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1646 uint8_t half[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1647 copy_block17(full, src, 24, stride, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1648 put ## RND ## mpeg4_qpel16_v_lowpass(half, full, 16, 24);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1649 OPNAME ## pixels16_l2(dst, full+24, half, stride, 24, 16, 16);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1650 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1651 void ff_ ## OPNAME ## qpel16_mc11_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1652 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1653 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1654 uint8_t halfV[256];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1655 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1656 copy_block17(full, src, 24, stride, 17);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1657 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1658 put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full, 16, 24);\
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1659 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1660 OPNAME ## pixels16_l4(dst, full, halfH, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1661 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1662 static void OPNAME ## qpel16_mc11_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1663 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1664 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1665 uint8_t halfHV[256];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1666 copy_block17(full, src, 24, stride, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1667 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1668 put ## RND ## pixels16_l2(halfH, halfH, full, 16, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1669 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1670 OPNAME ## pixels16_l2(dst, halfH, halfHV, stride, 16, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1671 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1672 void ff_ ## OPNAME ## qpel16_mc31_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1673 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1674 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1675 uint8_t halfV[256];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1676 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1677 copy_block17(full, src, 24, stride, 17);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1678 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1679 put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full+1, 16, 24);\
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1680 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1681 OPNAME ## pixels16_l4(dst, full+1, halfH, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1682 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1683 static void OPNAME ## qpel16_mc31_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1684 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1685 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1686 uint8_t halfHV[256];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1687 copy_block17(full, src, 24, stride, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1688 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1689 put ## RND ## pixels16_l2(halfH, halfH, full+1, 16, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1690 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1691 OPNAME ## pixels16_l2(dst, halfH, halfHV, stride, 16, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1692 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1693 void ff_ ## OPNAME ## qpel16_mc13_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1694 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1695 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1696 uint8_t halfV[256];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1697 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1698 copy_block17(full, src, 24, stride, 17);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1699 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1700 put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full, 16, 24);\
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1701 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1702 OPNAME ## pixels16_l4(dst, full+24, halfH+16, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1703 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1704 static void OPNAME ## qpel16_mc13_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1705 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1706 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1707 uint8_t halfHV[256];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1708 copy_block17(full, src, 24, stride, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1709 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1710 put ## RND ## pixels16_l2(halfH, halfH, full, 16, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1711 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1712 OPNAME ## pixels16_l2(dst, halfH+16, halfHV, stride, 16, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1713 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1714 void ff_ ## OPNAME ## qpel16_mc33_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1715 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1716 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1717 uint8_t halfV[256];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1718 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1719 copy_block17(full, src, 24, stride, 17);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1720 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full , 16, 24, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1721 put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full+1, 16, 24);\
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1722 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1723 OPNAME ## pixels16_l4(dst, full+25, halfH+16, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1724 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1725 static void OPNAME ## qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1726 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1727 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1728 uint8_t halfHV[256];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1729 copy_block17(full, src, 24, stride, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1730 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1731 put ## RND ## pixels16_l2(halfH, halfH, full+1, 16, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1732 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1733 OPNAME ## pixels16_l2(dst, halfH+16, halfHV, stride, 16, 16, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1734 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1735 static void OPNAME ## qpel16_mc21_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1736 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1737 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1738 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, src, 16, stride, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1739 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1740 OPNAME ## pixels16_l2(dst, halfH, halfHV, stride, 16, 16, 16);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1741 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1742 static void OPNAME ## qpel16_mc23_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1743 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1744 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1745 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, src, 16, stride, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1746 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1747 OPNAME ## pixels16_l2(dst, halfH+16, halfHV, stride, 16, 16, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1748 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1749 void ff_ ## OPNAME ## qpel16_mc12_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1750 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1751 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1752 uint8_t halfV[256];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1753 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1754 copy_block17(full, src, 24, stride, 17);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1755 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1756 put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full, 16, 24);\
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1757 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1758 OPNAME ## pixels16_l2(dst, halfV, halfHV, stride, 16, 16, 16);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1759 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1760 static void OPNAME ## qpel16_mc12_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1761 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1762 uint8_t halfH[272];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1763 copy_block17(full, src, 24, stride, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1764 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1765 put ## RND ## pixels16_l2(halfH, halfH, full, 16, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1766 OPNAME ## mpeg4_qpel16_v_lowpass(dst, halfH, stride, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1767 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1768 void ff_ ## OPNAME ## qpel16_mc32_old_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1769 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1770 uint8_t halfH[272];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1771 uint8_t halfV[256];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1772 uint8_t halfHV[256];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1773 copy_block17(full, src, 24, stride, 17);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1774 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1775 put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full+1, 16, 24);\
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1776 put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1777 OPNAME ## pixels16_l2(dst, halfV, halfHV, stride, 16, 16, 16);\
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1778 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1779 static void OPNAME ## qpel16_mc32_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1780 uint8_t full[24*17];\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1781 uint8_t halfH[272];\
984
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1782 copy_block17(full, src, 24, stride, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1783 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1784 put ## RND ## pixels16_l2(halfH, halfH, full+1, 16, 16, 24, 17);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1785 OPNAME ## mpeg4_qpel16_v_lowpass(dst, halfH, stride, 16);\
e162c09efbe7 qpel fix
michaelni
parents: 954
diff changeset
1786 }\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1787 static void OPNAME ## qpel16_mc22_c(uint8_t *dst, uint8_t *src, int stride){\
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
1788 uint8_t halfH[272];\
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1789 put ## RND ## mpeg4_qpel16_h_lowpass(halfH, src, 16, stride, 17);\
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 945
diff changeset
1790 OPNAME ## mpeg4_qpel16_v_lowpass(dst, halfH, stride, 16);\
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
1791 }
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1792
651
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1793 #define op_avg(a, b) a = (((a)+cm[((b) + 16)>>5]+1)>>1)
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1794 #define op_avg_no_rnd(a, b) a = (((a)+cm[((b) + 15)>>5])>>1)
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1795 #define op_put(a, b) a = cm[((b) + 16)>>5]
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1796 #define op_put_no_rnd(a, b) a = cm[((b) + 15)>>5]
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1797
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1798 QPEL_MC(0, put_ , _ , op_put)
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1799 QPEL_MC(1, put_no_rnd_, _no_rnd_, op_put_no_rnd)
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1800 QPEL_MC(0, avg_ , _ , op_avg)
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1801 //QPEL_MC(1, avg_no_rnd , _ , op_avg)
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1802 #undef op_avg
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1803 #undef op_avg_no_rnd
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1804 #undef op_put
45e8f39fda50 put/avg_pixels16
michaelni
parents: 638
diff changeset
1805 #undef op_put_no_rnd
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1806
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1807 #if 1
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1808 #define H264_LOWPASS(OPNAME, OP, OP2) \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1809 static void OPNAME ## h264_qpel4_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1810 const int h=4;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1811 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1812 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1813 for(i=0; i<h; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1814 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1815 OP(dst[0], (src[0]+src[1])*20 - (src[-1]+src[2])*5 + (src[-2]+src[3]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1816 OP(dst[1], (src[1]+src[2])*20 - (src[0 ]+src[3])*5 + (src[-1]+src[4]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1817 OP(dst[2], (src[2]+src[3])*20 - (src[1 ]+src[4])*5 + (src[0 ]+src[5]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1818 OP(dst[3], (src[3]+src[4])*20 - (src[2 ]+src[5])*5 + (src[1 ]+src[6]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1819 dst+=dstStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1820 src+=srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1821 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1822 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1823 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1824 static void OPNAME ## h264_qpel4_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1825 const int w=4;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1826 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1827 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1828 for(i=0; i<w; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1829 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1830 const int srcB= src[-2*srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1831 const int srcA= src[-1*srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1832 const int src0= src[0 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1833 const int src1= src[1 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1834 const int src2= src[2 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1835 const int src3= src[3 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1836 const int src4= src[4 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1837 const int src5= src[5 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1838 const int src6= src[6 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1839 OP(dst[0*dstStride], (src0+src1)*20 - (srcA+src2)*5 + (srcB+src3));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1840 OP(dst[1*dstStride], (src1+src2)*20 - (src0+src3)*5 + (srcA+src4));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1841 OP(dst[2*dstStride], (src2+src3)*20 - (src1+src4)*5 + (src0+src5));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1842 OP(dst[3*dstStride], (src3+src4)*20 - (src2+src5)*5 + (src1+src6));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1843 dst++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1844 src++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1845 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1846 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1847 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1848 static void OPNAME ## h264_qpel4_hv_lowpass(uint8_t *dst, int16_t *tmp, uint8_t *src, int dstStride, int tmpStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1849 const int h=4;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1850 const int w=4;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1851 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1852 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1853 src -= 2*srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1854 for(i=0; i<h+5; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1855 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1856 tmp[0]= (src[0]+src[1])*20 - (src[-1]+src[2])*5 + (src[-2]+src[3]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1857 tmp[1]= (src[1]+src[2])*20 - (src[0 ]+src[3])*5 + (src[-1]+src[4]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1858 tmp[2]= (src[2]+src[3])*20 - (src[1 ]+src[4])*5 + (src[0 ]+src[5]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1859 tmp[3]= (src[3]+src[4])*20 - (src[2 ]+src[5])*5 + (src[1 ]+src[6]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1860 tmp+=tmpStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1861 src+=srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1862 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1863 tmp -= tmpStride*(h+5-2);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1864 for(i=0; i<w; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1865 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1866 const int tmpB= tmp[-2*tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1867 const int tmpA= tmp[-1*tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1868 const int tmp0= tmp[0 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1869 const int tmp1= tmp[1 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1870 const int tmp2= tmp[2 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1871 const int tmp3= tmp[3 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1872 const int tmp4= tmp[4 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1873 const int tmp5= tmp[5 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1874 const int tmp6= tmp[6 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1875 OP2(dst[0*dstStride], (tmp0+tmp1)*20 - (tmpA+tmp2)*5 + (tmpB+tmp3));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1876 OP2(dst[1*dstStride], (tmp1+tmp2)*20 - (tmp0+tmp3)*5 + (tmpA+tmp4));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1877 OP2(dst[2*dstStride], (tmp2+tmp3)*20 - (tmp1+tmp4)*5 + (tmp0+tmp5));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1878 OP2(dst[3*dstStride], (tmp3+tmp4)*20 - (tmp2+tmp5)*5 + (tmp1+tmp6));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1879 dst++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1880 tmp++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1881 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1882 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1883 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1884 static void OPNAME ## h264_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1885 const int h=8;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1886 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1887 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1888 for(i=0; i<h; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1889 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1890 OP(dst[0], (src[0]+src[1])*20 - (src[-1]+src[2])*5 + (src[-2]+src[3 ]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1891 OP(dst[1], (src[1]+src[2])*20 - (src[0 ]+src[3])*5 + (src[-1]+src[4 ]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1892 OP(dst[2], (src[2]+src[3])*20 - (src[1 ]+src[4])*5 + (src[0 ]+src[5 ]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1893 OP(dst[3], (src[3]+src[4])*20 - (src[2 ]+src[5])*5 + (src[1 ]+src[6 ]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1894 OP(dst[4], (src[4]+src[5])*20 - (src[3 ]+src[6])*5 + (src[2 ]+src[7 ]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1895 OP(dst[5], (src[5]+src[6])*20 - (src[4 ]+src[7])*5 + (src[3 ]+src[8 ]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1896 OP(dst[6], (src[6]+src[7])*20 - (src[5 ]+src[8])*5 + (src[4 ]+src[9 ]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1897 OP(dst[7], (src[7]+src[8])*20 - (src[6 ]+src[9])*5 + (src[5 ]+src[10]));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1898 dst+=dstStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1899 src+=srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1900 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1901 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1902 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1903 static void OPNAME ## h264_qpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1904 const int w=8;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1905 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1906 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1907 for(i=0; i<w; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1908 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1909 const int srcB= src[-2*srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1910 const int srcA= src[-1*srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1911 const int src0= src[0 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1912 const int src1= src[1 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1913 const int src2= src[2 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1914 const int src3= src[3 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1915 const int src4= src[4 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1916 const int src5= src[5 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1917 const int src6= src[6 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1918 const int src7= src[7 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1919 const int src8= src[8 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1920 const int src9= src[9 *srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1921 const int src10=src[10*srcStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1922 OP(dst[0*dstStride], (src0+src1)*20 - (srcA+src2)*5 + (srcB+src3));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1923 OP(dst[1*dstStride], (src1+src2)*20 - (src0+src3)*5 + (srcA+src4));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1924 OP(dst[2*dstStride], (src2+src3)*20 - (src1+src4)*5 + (src0+src5));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1925 OP(dst[3*dstStride], (src3+src4)*20 - (src2+src5)*5 + (src1+src6));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1926 OP(dst[4*dstStride], (src4+src5)*20 - (src3+src6)*5 + (src2+src7));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1927 OP(dst[5*dstStride], (src5+src6)*20 - (src4+src7)*5 + (src3+src8));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1928 OP(dst[6*dstStride], (src6+src7)*20 - (src5+src8)*5 + (src4+src9));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1929 OP(dst[7*dstStride], (src7+src8)*20 - (src6+src9)*5 + (src5+src10));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1930 dst++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1931 src++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1932 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1933 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1934 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1935 static void OPNAME ## h264_qpel8_hv_lowpass(uint8_t *dst, int16_t *tmp, uint8_t *src, int dstStride, int tmpStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1936 const int h=8;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1937 const int w=8;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1938 uint8_t *cm = cropTbl + MAX_NEG_CROP;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1939 int i;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1940 src -= 2*srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1941 for(i=0; i<h+5; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1942 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1943 tmp[0]= (src[0]+src[1])*20 - (src[-1]+src[2])*5 + (src[-2]+src[3 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1944 tmp[1]= (src[1]+src[2])*20 - (src[0 ]+src[3])*5 + (src[-1]+src[4 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1945 tmp[2]= (src[2]+src[3])*20 - (src[1 ]+src[4])*5 + (src[0 ]+src[5 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1946 tmp[3]= (src[3]+src[4])*20 - (src[2 ]+src[5])*5 + (src[1 ]+src[6 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1947 tmp[4]= (src[4]+src[5])*20 - (src[3 ]+src[6])*5 + (src[2 ]+src[7 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1948 tmp[5]= (src[5]+src[6])*20 - (src[4 ]+src[7])*5 + (src[3 ]+src[8 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1949 tmp[6]= (src[6]+src[7])*20 - (src[5 ]+src[8])*5 + (src[4 ]+src[9 ]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1950 tmp[7]= (src[7]+src[8])*20 - (src[6 ]+src[9])*5 + (src[5 ]+src[10]);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1951 tmp+=tmpStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1952 src+=srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1953 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1954 tmp -= tmpStride*(h+5-2);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1955 for(i=0; i<w; i++)\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1956 {\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1957 const int tmpB= tmp[-2*tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1958 const int tmpA= tmp[-1*tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1959 const int tmp0= tmp[0 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1960 const int tmp1= tmp[1 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1961 const int tmp2= tmp[2 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1962 const int tmp3= tmp[3 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1963 const int tmp4= tmp[4 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1964 const int tmp5= tmp[5 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1965 const int tmp6= tmp[6 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1966 const int tmp7= tmp[7 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1967 const int tmp8= tmp[8 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1968 const int tmp9= tmp[9 *tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1969 const int tmp10=tmp[10*tmpStride];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1970 OP2(dst[0*dstStride], (tmp0+tmp1)*20 - (tmpA+tmp2)*5 + (tmpB+tmp3));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1971 OP2(dst[1*dstStride], (tmp1+tmp2)*20 - (tmp0+tmp3)*5 + (tmpA+tmp4));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1972 OP2(dst[2*dstStride], (tmp2+tmp3)*20 - (tmp1+tmp4)*5 + (tmp0+tmp5));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1973 OP2(dst[3*dstStride], (tmp3+tmp4)*20 - (tmp2+tmp5)*5 + (tmp1+tmp6));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1974 OP2(dst[4*dstStride], (tmp4+tmp5)*20 - (tmp3+tmp6)*5 + (tmp2+tmp7));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1975 OP2(dst[5*dstStride], (tmp5+tmp6)*20 - (tmp4+tmp7)*5 + (tmp3+tmp8));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1976 OP2(dst[6*dstStride], (tmp6+tmp7)*20 - (tmp5+tmp8)*5 + (tmp4+tmp9));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1977 OP2(dst[7*dstStride], (tmp7+tmp8)*20 - (tmp6+tmp9)*5 + (tmp5+tmp10));\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1978 dst++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1979 tmp++;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1980 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1981 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1982 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1983 static void OPNAME ## h264_qpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1984 OPNAME ## h264_qpel8_v_lowpass(dst , src , dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1985 OPNAME ## h264_qpel8_v_lowpass(dst+8, src+8, dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1986 src += 8*srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1987 dst += 8*dstStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1988 OPNAME ## h264_qpel8_v_lowpass(dst , src , dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1989 OPNAME ## h264_qpel8_v_lowpass(dst+8, src+8, dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1990 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1991 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1992 static void OPNAME ## h264_qpel16_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1993 OPNAME ## h264_qpel8_h_lowpass(dst , src , dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1994 OPNAME ## h264_qpel8_h_lowpass(dst+8, src+8, dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1995 src += 8*srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1996 dst += 8*dstStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1997 OPNAME ## h264_qpel8_h_lowpass(dst , src , dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1998 OPNAME ## h264_qpel8_h_lowpass(dst+8, src+8, dstStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
1999 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2000 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2001 static void OPNAME ## h264_qpel16_hv_lowpass(uint8_t *dst, int16_t *tmp, uint8_t *src, int dstStride, int tmpStride, int srcStride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2002 OPNAME ## h264_qpel8_hv_lowpass(dst , tmp , src , dstStride, tmpStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2003 OPNAME ## h264_qpel8_hv_lowpass(dst+8, tmp+8, src+8, dstStride, tmpStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2004 src += 8*srcStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2005 tmp += 8*tmpStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2006 dst += 8*dstStride;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2007 OPNAME ## h264_qpel8_hv_lowpass(dst , tmp , src , dstStride, tmpStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2008 OPNAME ## h264_qpel8_hv_lowpass(dst+8, tmp+8, src+8, dstStride, tmpStride, srcStride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2009 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2010
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2011 #define H264_MC(OPNAME, SIZE) \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2012 static void OPNAME ## h264_qpel ## SIZE ## _mc00_c (uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2013 OPNAME ## pixels ## SIZE ## _c(dst, src, stride, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2014 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2015 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2016 static void OPNAME ## h264_qpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2017 uint8_t half[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2018 put_h264_qpel ## SIZE ## _h_lowpass(half, src, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2019 OPNAME ## pixels ## SIZE ## _l2(dst, src, half, stride, stride, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2020 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2021 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2022 static void OPNAME ## h264_qpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2023 OPNAME ## h264_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2024 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2025 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2026 static void OPNAME ## h264_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2027 uint8_t half[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2028 put_h264_qpel ## SIZE ## _h_lowpass(half, src, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2029 OPNAME ## pixels ## SIZE ## _l2(dst, src+1, half, stride, stride, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2030 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2031 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2032 static void OPNAME ## h264_qpel ## SIZE ## _mc01_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2033 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2034 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2035 uint8_t half[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2036 copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2037 put_h264_qpel ## SIZE ## _v_lowpass(half, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2038 OPNAME ## pixels ## SIZE ## _l2(dst, full_mid, half, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2039 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2040 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2041 static void OPNAME ## h264_qpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2042 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2043 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2044 copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2045 OPNAME ## h264_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2046 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2047 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2048 static void OPNAME ## h264_qpel ## SIZE ## _mc03_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2049 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2050 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2051 uint8_t half[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2052 copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2053 put_h264_qpel ## SIZE ## _v_lowpass(half, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2054 OPNAME ## pixels ## SIZE ## _l2(dst, full_mid+SIZE, half, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2055 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2056 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2057 static void OPNAME ## h264_qpel ## SIZE ## _mc11_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2058 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2059 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2060 uint8_t halfH[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2061 uint8_t halfV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2062 put_h264_qpel ## SIZE ## _h_lowpass(halfH, src, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2063 copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2064 put_h264_qpel ## SIZE ## _v_lowpass(halfV, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2065 OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2066 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2067 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2068 static void OPNAME ## h264_qpel ## SIZE ## _mc31_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2069 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2070 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2071 uint8_t halfH[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2072 uint8_t halfV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2073 put_h264_qpel ## SIZE ## _h_lowpass(halfH, src, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2074 copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2075 put_h264_qpel ## SIZE ## _v_lowpass(halfV, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2076 OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2077 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2078 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2079 static void OPNAME ## h264_qpel ## SIZE ## _mc13_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2080 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2081 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2082 uint8_t halfH[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2083 uint8_t halfV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2084 put_h264_qpel ## SIZE ## _h_lowpass(halfH, src + stride, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2085 copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2086 put_h264_qpel ## SIZE ## _v_lowpass(halfV, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2087 OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2088 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2089 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2090 static void OPNAME ## h264_qpel ## SIZE ## _mc33_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2091 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2092 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2093 uint8_t halfH[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2094 uint8_t halfV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2095 put_h264_qpel ## SIZE ## _h_lowpass(halfH, src + stride, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2096 copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2097 put_h264_qpel ## SIZE ## _v_lowpass(halfV, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2098 OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2099 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2100 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2101 static void OPNAME ## h264_qpel ## SIZE ## _mc22_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2102 int16_t tmp[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2103 OPNAME ## h264_qpel ## SIZE ## _hv_lowpass(dst, tmp, src, stride, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2104 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2105 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2106 static void OPNAME ## h264_qpel ## SIZE ## _mc21_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2107 int16_t tmp[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2108 uint8_t halfH[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2109 uint8_t halfHV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2110 put_h264_qpel ## SIZE ## _h_lowpass(halfH, src, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2111 put_h264_qpel ## SIZE ## _hv_lowpass(halfHV, tmp, src, SIZE, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2112 OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2113 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2114 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2115 static void OPNAME ## h264_qpel ## SIZE ## _mc23_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2116 int16_t tmp[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2117 uint8_t halfH[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2118 uint8_t halfHV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2119 put_h264_qpel ## SIZE ## _h_lowpass(halfH, src + stride, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2120 put_h264_qpel ## SIZE ## _hv_lowpass(halfHV, tmp, src, SIZE, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2121 OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2122 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2123 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2124 static void OPNAME ## h264_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2125 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2126 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2127 int16_t tmp[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2128 uint8_t halfV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2129 uint8_t halfHV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2130 copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2131 put_h264_qpel ## SIZE ## _v_lowpass(halfV, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2132 put_h264_qpel ## SIZE ## _hv_lowpass(halfHV, tmp, src, SIZE, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2133 OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2134 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2135 \
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2136 static void OPNAME ## h264_qpel ## SIZE ## _mc32_c(uint8_t *dst, uint8_t *src, int stride){\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2137 uint8_t full[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2138 uint8_t * const full_mid= full + SIZE*2;\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2139 int16_t tmp[SIZE*(SIZE+5)];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2140 uint8_t halfV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2141 uint8_t halfHV[SIZE*SIZE];\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2142 copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2143 put_h264_qpel ## SIZE ## _v_lowpass(halfV, full_mid, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2144 put_h264_qpel ## SIZE ## _hv_lowpass(halfHV, tmp, src, SIZE, SIZE, stride);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2145 OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2146 }\
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2147
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2148 #define op_avg(a, b) a = (((a)+cm[((b) + 16)>>5]+1)>>1)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2149 //#define op_avg2(a, b) a = (((a)*w1+cm[((b) + 16)>>5]*w2 + o + 64)>>7)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2150 #define op_put(a, b) a = cm[((b) + 16)>>5]
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2151 #define op2_avg(a, b) a = (((a)+cm[((b) + 512)>>10]+1)>>1)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2152 #define op2_put(a, b) a = cm[((b) + 512)>>10]
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2153
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2154 H264_LOWPASS(put_ , op_put, op2_put)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2155 H264_LOWPASS(avg_ , op_avg, op2_avg)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2156 H264_MC(put_, 4)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2157 H264_MC(put_, 8)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2158 H264_MC(put_, 16)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2159 H264_MC(avg_, 4)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2160 H264_MC(avg_, 8)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2161 H264_MC(avg_, 16)
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2162
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2163 #undef op_avg
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2164 #undef op_put
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2165 #undef op2_avg
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2166 #undef op2_put
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2167 #endif
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
2168
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2169 static void wmv2_mspel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2170 uint8_t *cm = cropTbl + MAX_NEG_CROP;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2171 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2172
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2173 for(i=0; i<h; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2174 dst[0]= cm[(9*(src[0] + src[1]) - (src[-1] + src[2]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2175 dst[1]= cm[(9*(src[1] + src[2]) - (src[ 0] + src[3]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2176 dst[2]= cm[(9*(src[2] + src[3]) - (src[ 1] + src[4]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2177 dst[3]= cm[(9*(src[3] + src[4]) - (src[ 2] + src[5]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2178 dst[4]= cm[(9*(src[4] + src[5]) - (src[ 3] + src[6]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2179 dst[5]= cm[(9*(src[5] + src[6]) - (src[ 4] + src[7]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2180 dst[6]= cm[(9*(src[6] + src[7]) - (src[ 5] + src[8]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2181 dst[7]= cm[(9*(src[7] + src[8]) - (src[ 6] + src[9]) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2182 dst+=dstStride;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2183 src+=srcStride;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2184 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2185 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2186
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2187 static void wmv2_mspel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int w){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2188 uint8_t *cm = cropTbl + MAX_NEG_CROP;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2189 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2190
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2191 for(i=0; i<w; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2192 const int src_1= src[ -srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2193 const int src0 = src[0 ];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2194 const int src1 = src[ srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2195 const int src2 = src[2*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2196 const int src3 = src[3*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2197 const int src4 = src[4*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2198 const int src5 = src[5*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2199 const int src6 = src[6*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2200 const int src7 = src[7*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2201 const int src8 = src[8*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2202 const int src9 = src[9*srcStride];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2203 dst[0*dstStride]= cm[(9*(src0 + src1) - (src_1 + src2) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2204 dst[1*dstStride]= cm[(9*(src1 + src2) - (src0 + src3) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2205 dst[2*dstStride]= cm[(9*(src2 + src3) - (src1 + src4) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2206 dst[3*dstStride]= cm[(9*(src3 + src4) - (src2 + src5) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2207 dst[4*dstStride]= cm[(9*(src4 + src5) - (src3 + src6) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2208 dst[5*dstStride]= cm[(9*(src5 + src6) - (src4 + src7) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2209 dst[6*dstStride]= cm[(9*(src6 + src7) - (src5 + src8) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2210 dst[7*dstStride]= cm[(9*(src7 + src8) - (src6 + src9) + 8)>>4];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2211 src++;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2212 dst++;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2213 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2214 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2215
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2216 static void put_mspel8_mc00_c (uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2217 put_pixels8_c(dst, src, stride, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2218 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2219
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2220 static void put_mspel8_mc10_c(uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2221 uint8_t half[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2222 wmv2_mspel8_h_lowpass(half, src, 8, stride, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2223 put_pixels8_l2(dst, src, half, stride, stride, 8, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2224 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2225
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2226 static void put_mspel8_mc20_c(uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2227 wmv2_mspel8_h_lowpass(dst, src, stride, stride, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2228 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2229
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2230 static void put_mspel8_mc30_c(uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2231 uint8_t half[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2232 wmv2_mspel8_h_lowpass(half, src, 8, stride, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2233 put_pixels8_l2(dst, src+1, half, stride, stride, 8, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2234 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2235
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2236 static void put_mspel8_mc02_c(uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2237 wmv2_mspel8_v_lowpass(dst, src, stride, stride, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2238 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2239
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2240 static void put_mspel8_mc12_c(uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2241 uint8_t halfH[88];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2242 uint8_t halfV[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2243 uint8_t halfHV[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2244 wmv2_mspel8_h_lowpass(halfH, src-stride, 8, stride, 11);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2245 wmv2_mspel8_v_lowpass(halfV, src, 8, stride, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2246 wmv2_mspel8_v_lowpass(halfHV, halfH+8, 8, 8, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2247 put_pixels8_l2(dst, halfV, halfHV, stride, 8, 8, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2248 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2249 static void put_mspel8_mc32_c(uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2250 uint8_t halfH[88];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2251 uint8_t halfV[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2252 uint8_t halfHV[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2253 wmv2_mspel8_h_lowpass(halfH, src-stride, 8, stride, 11);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2254 wmv2_mspel8_v_lowpass(halfV, src+1, 8, stride, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2255 wmv2_mspel8_v_lowpass(halfHV, halfH+8, 8, 8, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2256 put_pixels8_l2(dst, halfV, halfHV, stride, 8, 8, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2257 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2258 static void put_mspel8_mc22_c(uint8_t *dst, uint8_t *src, int stride){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2259 uint8_t halfH[88];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2260 wmv2_mspel8_h_lowpass(halfH, src-stride, 8, stride, 11);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2261 wmv2_mspel8_v_lowpass(dst, halfH+8, stride, 8, 8);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2262 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2263
1644
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2264 static void h263_v_loop_filter_c(uint8_t *src, int stride, int qscale){
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2265 int x;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2266 const int strength= ff_h263_loop_filter_strength[qscale];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2267
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2268 for(x=0; x<8; x++){
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2269 int d1, d2, ad1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2270 int p0= src[x-2*stride];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2271 int p1= src[x-1*stride];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2272 int p2= src[x+0*stride];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2273 int p3= src[x+1*stride];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2274 int d = (p0 - p3 + 4*(p2 - p1)) / 8;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2275
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2276 if (d<-2*strength) d1= 0;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2277 else if(d<- strength) d1=-2*strength - d;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2278 else if(d< strength) d1= d;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2279 else if(d< 2*strength) d1= 2*strength - d;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2280 else d1= 0;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2281
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2282 p1 += d1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2283 p2 -= d1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2284 if(p1&256) p1= ~(p1>>31);
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2285 if(p2&256) p2= ~(p2>>31);
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2286
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2287 src[x-1*stride] = p1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2288 src[x+0*stride] = p2;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2289
1645
michael
parents: 1644
diff changeset
2290 ad1= ABS(d1)>>1;
1644
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2291
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2292 d2= clip((p0-p3)/4, -ad1, ad1);
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2293
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2294 src[x-2*stride] = p0 - d2;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2295 src[x+ stride] = p3 + d2;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2296 }
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2297 }
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2298
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2299 static void h263_h_loop_filter_c(uint8_t *src, int stride, int qscale){
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2300 int y;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2301 const int strength= ff_h263_loop_filter_strength[qscale];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2302
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2303 for(y=0; y<8; y++){
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2304 int d1, d2, ad1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2305 int p0= src[y*stride-2];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2306 int p1= src[y*stride-1];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2307 int p2= src[y*stride+0];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2308 int p3= src[y*stride+1];
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2309 int d = (p0 - p3 + 4*(p2 - p1)) / 8;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2310
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2311 if (d<-2*strength) d1= 0;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2312 else if(d<- strength) d1=-2*strength - d;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2313 else if(d< strength) d1= d;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2314 else if(d< 2*strength) d1= 2*strength - d;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2315 else d1= 0;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2316
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2317 p1 += d1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2318 p2 -= d1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2319 if(p1&256) p1= ~(p1>>31);
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2320 if(p2&256) p2= ~(p2>>31);
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2321
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2322 src[y*stride-1] = p1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2323 src[y*stride+0] = p2;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2324
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2325 ad1= ABS(d1)>>1;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2326
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2327 d2= clip((p0-p3)/4, -ad1, ad1);
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2328
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2329 src[y*stride-2] = p0 - d2;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2330 src[y*stride+1] = p3 + d2;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2331 }
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
2332 }
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2333
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2334 static inline int pix_abs16_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2335 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
2336 int s, i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2337
986e461dc072 Initial revision
glantau
parents:
diff changeset
2338 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2339 for(i=0;i<h;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2340 s += abs(pix1[0] - pix2[0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2341 s += abs(pix1[1] - pix2[1]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2342 s += abs(pix1[2] - pix2[2]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2343 s += abs(pix1[3] - pix2[3]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2344 s += abs(pix1[4] - pix2[4]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2345 s += abs(pix1[5] - pix2[5]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2346 s += abs(pix1[6] - pix2[6]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2347 s += abs(pix1[7] - pix2[7]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2348 s += abs(pix1[8] - pix2[8]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2349 s += abs(pix1[9] - pix2[9]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2350 s += abs(pix1[10] - pix2[10]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2351 s += abs(pix1[11] - pix2[11]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2352 s += abs(pix1[12] - pix2[12]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2353 s += abs(pix1[13] - pix2[13]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2354 s += abs(pix1[14] - pix2[14]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2355 s += abs(pix1[15] - pix2[15]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
2356 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2357 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2358 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2359 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2360 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2361
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2362 static int pix_abs16_x2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2363 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
2364 int s, i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2365
986e461dc072 Initial revision
glantau
parents:
diff changeset
2366 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2367 for(i=0;i<h;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2368 s += abs(pix1[0] - avg2(pix2[0], pix2[1]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2369 s += abs(pix1[1] - avg2(pix2[1], pix2[2]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2370 s += abs(pix1[2] - avg2(pix2[2], pix2[3]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2371 s += abs(pix1[3] - avg2(pix2[3], pix2[4]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2372 s += abs(pix1[4] - avg2(pix2[4], pix2[5]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2373 s += abs(pix1[5] - avg2(pix2[5], pix2[6]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2374 s += abs(pix1[6] - avg2(pix2[6], pix2[7]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2375 s += abs(pix1[7] - avg2(pix2[7], pix2[8]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2376 s += abs(pix1[8] - avg2(pix2[8], pix2[9]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2377 s += abs(pix1[9] - avg2(pix2[9], pix2[10]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2378 s += abs(pix1[10] - avg2(pix2[10], pix2[11]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2379 s += abs(pix1[11] - avg2(pix2[11], pix2[12]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2380 s += abs(pix1[12] - avg2(pix2[12], pix2[13]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2381 s += abs(pix1[13] - avg2(pix2[13], pix2[14]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2382 s += abs(pix1[14] - avg2(pix2[14], pix2[15]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2383 s += abs(pix1[15] - avg2(pix2[15], pix2[16]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2384 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2385 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2386 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2387 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2388 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2389
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2390 static int pix_abs16_y2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2391 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
2392 int s, i;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
2393 uint8_t *pix3 = pix2 + line_size;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2394
986e461dc072 Initial revision
glantau
parents:
diff changeset
2395 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2396 for(i=0;i<h;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2397 s += abs(pix1[0] - avg2(pix2[0], pix3[0]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2398 s += abs(pix1[1] - avg2(pix2[1], pix3[1]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2399 s += abs(pix1[2] - avg2(pix2[2], pix3[2]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2400 s += abs(pix1[3] - avg2(pix2[3], pix3[3]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2401 s += abs(pix1[4] - avg2(pix2[4], pix3[4]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2402 s += abs(pix1[5] - avg2(pix2[5], pix3[5]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2403 s += abs(pix1[6] - avg2(pix2[6], pix3[6]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2404 s += abs(pix1[7] - avg2(pix2[7], pix3[7]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2405 s += abs(pix1[8] - avg2(pix2[8], pix3[8]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2406 s += abs(pix1[9] - avg2(pix2[9], pix3[9]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2407 s += abs(pix1[10] - avg2(pix2[10], pix3[10]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2408 s += abs(pix1[11] - avg2(pix2[11], pix3[11]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2409 s += abs(pix1[12] - avg2(pix2[12], pix3[12]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2410 s += abs(pix1[13] - avg2(pix2[13], pix3[13]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2411 s += abs(pix1[14] - avg2(pix2[14], pix3[14]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2412 s += abs(pix1[15] - avg2(pix2[15], pix3[15]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2413 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2414 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2415 pix3 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2416 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2417 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2418 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2419
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2420 static int pix_abs16_xy2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2421 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
2422 int s, i;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
2423 uint8_t *pix3 = pix2 + line_size;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2424
986e461dc072 Initial revision
glantau
parents:
diff changeset
2425 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2426 for(i=0;i<h;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2427 s += abs(pix1[0] - avg4(pix2[0], pix2[1], pix3[0], pix3[1]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2428 s += abs(pix1[1] - avg4(pix2[1], pix2[2], pix3[1], pix3[2]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2429 s += abs(pix1[2] - avg4(pix2[2], pix2[3], pix3[2], pix3[3]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2430 s += abs(pix1[3] - avg4(pix2[3], pix2[4], pix3[3], pix3[4]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2431 s += abs(pix1[4] - avg4(pix2[4], pix2[5], pix3[4], pix3[5]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2432 s += abs(pix1[5] - avg4(pix2[5], pix2[6], pix3[5], pix3[6]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2433 s += abs(pix1[6] - avg4(pix2[6], pix2[7], pix3[6], pix3[7]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2434 s += abs(pix1[7] - avg4(pix2[7], pix2[8], pix3[7], pix3[8]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2435 s += abs(pix1[8] - avg4(pix2[8], pix2[9], pix3[8], pix3[9]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2436 s += abs(pix1[9] - avg4(pix2[9], pix2[10], pix3[9], pix3[10]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2437 s += abs(pix1[10] - avg4(pix2[10], pix2[11], pix3[10], pix3[11]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2438 s += abs(pix1[11] - avg4(pix2[11], pix2[12], pix3[11], pix3[12]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2439 s += abs(pix1[12] - avg4(pix2[12], pix2[13], pix3[12], pix3[13]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2440 s += abs(pix1[13] - avg4(pix2[13], pix2[14], pix3[13], pix3[14]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2441 s += abs(pix1[14] - avg4(pix2[14], pix2[15], pix3[14], pix3[15]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2442 s += abs(pix1[15] - avg4(pix2[15], pix2[16], pix3[15], pix3[16]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
2443 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2444 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2445 pix3 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2446 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2447 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
2448 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
2449
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2450 static inline int pix_abs8_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2451 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2452 int s, i;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2453
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2454 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2455 for(i=0;i<h;i++) {
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2456 s += abs(pix1[0] - pix2[0]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2457 s += abs(pix1[1] - pix2[1]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2458 s += abs(pix1[2] - pix2[2]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2459 s += abs(pix1[3] - pix2[3]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2460 s += abs(pix1[4] - pix2[4]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2461 s += abs(pix1[5] - pix2[5]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2462 s += abs(pix1[6] - pix2[6]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2463 s += abs(pix1[7] - pix2[7]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2464 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2465 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2466 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2467 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2468 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2469
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2470 static int pix_abs8_x2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2471 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2472 int s, i;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2473
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2474 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2475 for(i=0;i<h;i++) {
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2476 s += abs(pix1[0] - avg2(pix2[0], pix2[1]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2477 s += abs(pix1[1] - avg2(pix2[1], pix2[2]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2478 s += abs(pix1[2] - avg2(pix2[2], pix2[3]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2479 s += abs(pix1[3] - avg2(pix2[3], pix2[4]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2480 s += abs(pix1[4] - avg2(pix2[4], pix2[5]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2481 s += abs(pix1[5] - avg2(pix2[5], pix2[6]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2482 s += abs(pix1[6] - avg2(pix2[6], pix2[7]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2483 s += abs(pix1[7] - avg2(pix2[7], pix2[8]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2484 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2485 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2486 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2487 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2488 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2489
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2490 static int pix_abs8_y2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2491 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2492 int s, i;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
2493 uint8_t *pix3 = pix2 + line_size;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2494
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2495 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2496 for(i=0;i<h;i++) {
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2497 s += abs(pix1[0] - avg2(pix2[0], pix3[0]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2498 s += abs(pix1[1] - avg2(pix2[1], pix3[1]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2499 s += abs(pix1[2] - avg2(pix2[2], pix3[2]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2500 s += abs(pix1[3] - avg2(pix2[3], pix3[3]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2501 s += abs(pix1[4] - avg2(pix2[4], pix3[4]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2502 s += abs(pix1[5] - avg2(pix2[5], pix3[5]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2503 s += abs(pix1[6] - avg2(pix2[6], pix3[6]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2504 s += abs(pix1[7] - avg2(pix2[7], pix3[7]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2505 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2506 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2507 pix3 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2508 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2509 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2510 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2511
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2512 static int pix_abs8_xy2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2513 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2514 int s, i;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
2515 uint8_t *pix3 = pix2 + line_size;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2516
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2517 s = 0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2518 for(i=0;i<h;i++) {
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2519 s += abs(pix1[0] - avg4(pix2[0], pix2[1], pix3[0], pix3[1]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2520 s += abs(pix1[1] - avg4(pix2[1], pix2[2], pix3[1], pix3[2]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2521 s += abs(pix1[2] - avg4(pix2[2], pix2[3], pix3[2], pix3[3]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2522 s += abs(pix1[3] - avg4(pix2[3], pix2[4], pix3[3], pix3[4]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2523 s += abs(pix1[4] - avg4(pix2[4], pix2[5], pix3[4], pix3[5]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2524 s += abs(pix1[5] - avg4(pix2[5], pix2[6], pix3[5], pix3[6]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2525 s += abs(pix1[6] - avg4(pix2[6], pix2[7], pix3[6], pix3[7]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2526 s += abs(pix1[7] - avg4(pix2[7], pix2[8], pix3[7], pix3[8]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2527 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2528 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2529 pix3 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2530 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2531 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2532 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
2533
1100
207f27932628 ff_block_permute() dox
michaelni
parents: 1092
diff changeset
2534 /**
207f27932628 ff_block_permute() dox
michaelni
parents: 1092
diff changeset
2535 * permutes an 8x8 block.
1101
a3a8017dee70 more idiot proof dox
michaelni
parents: 1100
diff changeset
2536 * @param block the block which will be permuted according to the given permutation vector
1100
207f27932628 ff_block_permute() dox
michaelni
parents: 1092
diff changeset
2537 * @param permutation the permutation vector
207f27932628 ff_block_permute() dox
michaelni
parents: 1092
diff changeset
2538 * @param last the last non zero coefficient in scantable order, used to speed the permutation up
1101
a3a8017dee70 more idiot proof dox
michaelni
parents: 1100
diff changeset
2539 * @param scantable the used scantable, this is only used to speed the permutation up, the block is not
a3a8017dee70 more idiot proof dox
michaelni
parents: 1100
diff changeset
2540 * (inverse) permutated to scantable order!
1100
207f27932628 ff_block_permute() dox
michaelni
parents: 1092
diff changeset
2541 */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
2542 void ff_block_permute(DCTELEM *block, uint8_t *permutation, const uint8_t *scantable, int last)
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
2543 {
764
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2544 int i;
945
463f7260b155 trellis quantization
michaelni
parents: 936
diff changeset
2545 DCTELEM temp[64];
764
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2546
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2547 if(last<=0) return;
882
34943cb0c2fb * remaining part of John Ryland's patch
kabi
parents: 866
diff changeset
2548 //if(permutation[1]==1) return; //FIXME its ok but not clean and might fail for some perms
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
2549
764
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2550 for(i=0; i<=last; i++){
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2551 const int j= scantable[i];
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2552 temp[j]= block[j];
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2553 block[j]=0;
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2554 }
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2555
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2556 for(i=0; i<=last; i++){
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2557 const int j= scantable[i];
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2558 const int perm_j= permutation[j];
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2559 block[perm_j]= temp[j];
d4726182dfd2 optimize block_permute()
michaelni
parents: 753
diff changeset
2560 }
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
2561 }
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
2562
1101
a3a8017dee70 more idiot proof dox
michaelni
parents: 1100
diff changeset
2563 /**
a3a8017dee70 more idiot proof dox
michaelni
parents: 1100
diff changeset
2564 * memset(blocks, 0, sizeof(DCTELEM)*6*64)
a3a8017dee70 more idiot proof dox
michaelni
parents: 1100
diff changeset
2565 */
853
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2566 static void clear_blocks_c(DCTELEM *blocks)
296
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
2567 {
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
2568 memset(blocks, 0, sizeof(DCTELEM)*6*64);
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
2569 }
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
2570
866
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2571 static void add_bytes_c(uint8_t *dst, uint8_t *src, int w){
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2572 int i;
996
ad44196ea483 add/diff_bytes bugfix patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>)
michaelni
parents: 984
diff changeset
2573 for(i=0; i+7<w; i+=8){
866
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2574 dst[i+0] += src[i+0];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2575 dst[i+1] += src[i+1];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2576 dst[i+2] += src[i+2];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2577 dst[i+3] += src[i+3];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2578 dst[i+4] += src[i+4];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2579 dst[i+5] += src[i+5];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2580 dst[i+6] += src[i+6];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2581 dst[i+7] += src[i+7];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2582 }
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2583 for(; i<w; i++)
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2584 dst[i+0] += src[i+0];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2585 }
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2586
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2587 static void diff_bytes_c(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w){
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2588 int i;
996
ad44196ea483 add/diff_bytes bugfix patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>)
michaelni
parents: 984
diff changeset
2589 for(i=0; i+7<w; i+=8){
866
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2590 dst[i+0] = src1[i+0]-src2[i+0];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2591 dst[i+1] = src1[i+1]-src2[i+1];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2592 dst[i+2] = src1[i+2]-src2[i+2];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2593 dst[i+3] = src1[i+3]-src2[i+3];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2594 dst[i+4] = src1[i+4]-src2[i+4];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2595 dst[i+5] = src1[i+5]-src2[i+5];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2596 dst[i+6] = src1[i+6]-src2[i+6];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2597 dst[i+7] = src1[i+7]-src2[i+7];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2598 }
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2599 for(; i<w; i++)
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2600 dst[i+0] = src1[i+0]-src2[i+0];
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2601 }
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
2602
1527
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2603 static void sub_hfyu_median_prediction_c(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w, int *left, int *left_top){
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2604 int i;
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2605 uint8_t l, lt;
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2606
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2607 l= *left;
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2608 lt= *left_top;
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2609
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2610 for(i=0; i<w; i++){
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2611 const int pred= mid_pred(l, src1[i], (l + src1[i] - lt)&0xFF);
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2612 lt= src1[i];
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2613 l= src2[i];
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2614 dst[i]= l - pred;
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2615 }
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2616
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2617 *left= l;
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2618 *left_top= lt;
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2619 }
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
2620
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2621 #define BUTTERFLY2(o1,o2,i1,i2) \
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2622 o1= (i1)+(i2);\
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2623 o2= (i1)-(i2);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2624
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2625 #define BUTTERFLY1(x,y) \
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2626 {\
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2627 int a,b;\
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2628 a= x;\
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2629 b= y;\
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2630 x= a+b;\
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2631 y= a-b;\
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2632 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2633
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2634 #define BUTTERFLYA(x,y) (ABS((x)+(y)) + ABS((x)-(y)))
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2635
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2636 static int hadamard8_diff8x8_c(/*MpegEncContext*/ void *s, uint8_t *dst, uint8_t *src, int stride, int h){
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2637 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2638 int temp[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2639 int sum=0;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2640
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2641 assert(h==8);
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2642
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2643 for(i=0; i<8; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2644 //FIXME try pointer walks
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2645 BUTTERFLY2(temp[8*i+0], temp[8*i+1], src[stride*i+0]-dst[stride*i+0],src[stride*i+1]-dst[stride*i+1]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2646 BUTTERFLY2(temp[8*i+2], temp[8*i+3], src[stride*i+2]-dst[stride*i+2],src[stride*i+3]-dst[stride*i+3]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2647 BUTTERFLY2(temp[8*i+4], temp[8*i+5], src[stride*i+4]-dst[stride*i+4],src[stride*i+5]-dst[stride*i+5]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2648 BUTTERFLY2(temp[8*i+6], temp[8*i+7], src[stride*i+6]-dst[stride*i+6],src[stride*i+7]-dst[stride*i+7]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2649
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2650 BUTTERFLY1(temp[8*i+0], temp[8*i+2]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2651 BUTTERFLY1(temp[8*i+1], temp[8*i+3]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2652 BUTTERFLY1(temp[8*i+4], temp[8*i+6]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2653 BUTTERFLY1(temp[8*i+5], temp[8*i+7]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2654
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2655 BUTTERFLY1(temp[8*i+0], temp[8*i+4]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2656 BUTTERFLY1(temp[8*i+1], temp[8*i+5]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2657 BUTTERFLY1(temp[8*i+2], temp[8*i+6]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2658 BUTTERFLY1(temp[8*i+3], temp[8*i+7]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2659 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2660
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2661 for(i=0; i<8; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2662 BUTTERFLY1(temp[8*0+i], temp[8*1+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2663 BUTTERFLY1(temp[8*2+i], temp[8*3+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2664 BUTTERFLY1(temp[8*4+i], temp[8*5+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2665 BUTTERFLY1(temp[8*6+i], temp[8*7+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2666
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2667 BUTTERFLY1(temp[8*0+i], temp[8*2+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2668 BUTTERFLY1(temp[8*1+i], temp[8*3+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2669 BUTTERFLY1(temp[8*4+i], temp[8*6+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2670 BUTTERFLY1(temp[8*5+i], temp[8*7+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2671
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2672 sum +=
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2673 BUTTERFLYA(temp[8*0+i], temp[8*4+i])
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2674 +BUTTERFLYA(temp[8*1+i], temp[8*5+i])
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2675 +BUTTERFLYA(temp[8*2+i], temp[8*6+i])
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2676 +BUTTERFLYA(temp[8*3+i], temp[8*7+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2677 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2678 #if 0
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2679 static int maxi=0;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2680 if(sum>maxi){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2681 maxi=sum;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2682 printf("MAX:%d\n", maxi);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2683 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2684 #endif
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2685 return sum;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2686 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2687
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2688 static int hadamard8_abs_c(uint8_t *src, int stride, int mean){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2689 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2690 int temp[64];
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2691 int sum=0;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2692 //FIXME OOOPS ignore 0 term instead of mean mess
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2693 for(i=0; i<8; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2694 //FIXME try pointer walks
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2695 BUTTERFLY2(temp[8*i+0], temp[8*i+1], src[stride*i+0]-mean,src[stride*i+1]-mean);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2696 BUTTERFLY2(temp[8*i+2], temp[8*i+3], src[stride*i+2]-mean,src[stride*i+3]-mean);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2697 BUTTERFLY2(temp[8*i+4], temp[8*i+5], src[stride*i+4]-mean,src[stride*i+5]-mean);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2698 BUTTERFLY2(temp[8*i+6], temp[8*i+7], src[stride*i+6]-mean,src[stride*i+7]-mean);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2699
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2700 BUTTERFLY1(temp[8*i+0], temp[8*i+2]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2701 BUTTERFLY1(temp[8*i+1], temp[8*i+3]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2702 BUTTERFLY1(temp[8*i+4], temp[8*i+6]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2703 BUTTERFLY1(temp[8*i+5], temp[8*i+7]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2704
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2705 BUTTERFLY1(temp[8*i+0], temp[8*i+4]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2706 BUTTERFLY1(temp[8*i+1], temp[8*i+5]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2707 BUTTERFLY1(temp[8*i+2], temp[8*i+6]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2708 BUTTERFLY1(temp[8*i+3], temp[8*i+7]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2709 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2710
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2711 for(i=0; i<8; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2712 BUTTERFLY1(temp[8*0+i], temp[8*1+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2713 BUTTERFLY1(temp[8*2+i], temp[8*3+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2714 BUTTERFLY1(temp[8*4+i], temp[8*5+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2715 BUTTERFLY1(temp[8*6+i], temp[8*7+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2716
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2717 BUTTERFLY1(temp[8*0+i], temp[8*2+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2718 BUTTERFLY1(temp[8*1+i], temp[8*3+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2719 BUTTERFLY1(temp[8*4+i], temp[8*6+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2720 BUTTERFLY1(temp[8*5+i], temp[8*7+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2721
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2722 sum +=
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2723 BUTTERFLYA(temp[8*0+i], temp[8*4+i])
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2724 +BUTTERFLYA(temp[8*1+i], temp[8*5+i])
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2725 +BUTTERFLYA(temp[8*2+i], temp[8*6+i])
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2726 +BUTTERFLYA(temp[8*3+i], temp[8*7+i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2727 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2728
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2729 return sum;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2730 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2731
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2732 static int dct_sad8x8_c(/*MpegEncContext*/ void *c, uint8_t *src1, uint8_t *src2, int stride, int h){
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2733 MpegEncContext * const s= (MpegEncContext *)c;
1016
michaelni
parents: 1013
diff changeset
2734 uint64_t __align8 aligned_temp[sizeof(DCTELEM)*64/8];
michaelni
parents: 1013
diff changeset
2735 DCTELEM * const temp= (DCTELEM*)aligned_temp;
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2736 int sum=0, i;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2737
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2738 assert(h==8);
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2739
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2740 s->dsp.diff_pixels(temp, src1, src2, stride);
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2741 s->dsp.fdct(temp);
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2742
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2743 for(i=0; i<64; i++)
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2744 sum+= ABS(temp[i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2745
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2746 return sum;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2747 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2748
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 1007
diff changeset
2749 void simple_idct(DCTELEM *block); //FIXME
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2750
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2751 static int quant_psnr8x8_c(/*MpegEncContext*/ void *c, uint8_t *src1, uint8_t *src2, int stride, int h){
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2752 MpegEncContext * const s= (MpegEncContext *)c;
1016
michaelni
parents: 1013
diff changeset
2753 uint64_t __align8 aligned_temp[sizeof(DCTELEM)*64*2/8];
michaelni
parents: 1013
diff changeset
2754 DCTELEM * const temp= (DCTELEM*)aligned_temp;
michaelni
parents: 1013
diff changeset
2755 DCTELEM * const bak = ((DCTELEM*)aligned_temp)+64;
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2756 int sum=0, i;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2757
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2758 assert(h==8);
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2759 s->mb_intra=0;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2760
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2761 s->dsp.diff_pixels(temp, src1, src2, stride);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2762
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2763 memcpy(bak, temp, 64*sizeof(DCTELEM));
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2764
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2765 s->block_last_index[0/*FIXME*/]= s->fast_dct_quantize(s, temp, 0/*FIXME*/, s->qscale, &i);
1689
1a2db2073848 split intra / inter dequantization
michael
parents: 1645
diff changeset
2766 s->dct_unquantize_inter(s, temp, 0, s->qscale);
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2767 simple_idct(temp); //FIXME
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2768
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2769 for(i=0; i<64; i++)
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2770 sum+= (temp[i]-bak[i])*(temp[i]-bak[i]);
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2771
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2772 return sum;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2773 }
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2774
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2775 static int rd8x8_c(/*MpegEncContext*/ void *c, uint8_t *src1, uint8_t *src2, int stride, int h){
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2776 MpegEncContext * const s= (MpegEncContext *)c;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
2777 const uint8_t *scantable= s->intra_scantable.permutated;
1016
michaelni
parents: 1013
diff changeset
2778 uint64_t __align8 aligned_temp[sizeof(DCTELEM)*64/8];
michaelni
parents: 1013
diff changeset
2779 uint64_t __align8 aligned_bak[stride];
michaelni
parents: 1013
diff changeset
2780 DCTELEM * const temp= (DCTELEM*)aligned_temp;
michaelni
parents: 1013
diff changeset
2781 uint8_t * const bak= (uint8_t*)aligned_bak;
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2782 int i, last, run, bits, level, distoration, start_i;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2783 const int esc_length= s->ac_esc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2784 uint8_t * length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2785 uint8_t * last_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2786
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2787 assert(h==8);
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2788
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2789 for(i=0; i<8; i++){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2790 ((uint32_t*)(bak + i*stride))[0]= ((uint32_t*)(src2 + i*stride))[0];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2791 ((uint32_t*)(bak + i*stride))[1]= ((uint32_t*)(src2 + i*stride))[1];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2792 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2793
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2794 s->dsp.diff_pixels(temp, src1, src2, stride);
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2795
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2796 s->block_last_index[0/*FIXME*/]= last= s->fast_dct_quantize(s, temp, 0/*FIXME*/, s->qscale, &i);
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2797
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2798 bits=0;
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2799
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2800 if (s->mb_intra) {
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2801 start_i = 1;
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2802 length = s->intra_ac_vlc_length;
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2803 last_length= s->intra_ac_vlc_last_length;
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2804 bits+= s->luma_dc_vlc_length[temp[0] + 256]; //FIXME chroma
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2805 } else {
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2806 start_i = 0;
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2807 length = s->inter_ac_vlc_length;
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2808 last_length= s->inter_ac_vlc_last_length;
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2809 }
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2810
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2811 if(last>=start_i){
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2812 run=0;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2813 for(i=start_i; i<last; i++){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2814 int j= scantable[i];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2815 level= temp[j];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2816
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2817 if(level){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2818 level+=64;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2819 if((level&(~127)) == 0){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2820 bits+= length[UNI_AC_ENC_INDEX(run, level)];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2821 }else
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2822 bits+= esc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2823 run=0;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2824 }else
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2825 run++;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2826 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2827 i= scantable[last];
1011
michaelni
parents: 1008
diff changeset
2828
michaelni
parents: 1008
diff changeset
2829 level= temp[i] + 64;
michaelni
parents: 1008
diff changeset
2830
michaelni
parents: 1008
diff changeset
2831 assert(level - 64);
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2832
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2833 if((level&(~127)) == 0){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2834 bits+= last_length[UNI_AC_ENC_INDEX(run, level)];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2835 }else
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2836 bits+= esc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2837
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2838 }
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2839
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2840 if(last>=0){
1689
1a2db2073848 split intra / inter dequantization
michael
parents: 1645
diff changeset
2841 if(s->mb_intra)
1a2db2073848 split intra / inter dequantization
michael
parents: 1645
diff changeset
2842 s->dct_unquantize_intra(s, temp, 0, s->qscale);
1a2db2073848 split intra / inter dequantization
michael
parents: 1645
diff changeset
2843 else
1a2db2073848 split intra / inter dequantization
michael
parents: 1645
diff changeset
2844 s->dct_unquantize_inter(s, temp, 0, s->qscale);
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2845 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2846
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2847 s->dsp.idct_add(bak, stride, temp);
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2848
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2849 distoration= s->dsp.sse[1](NULL, bak, src1, stride, 8);
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2850
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2851 return distoration + ((bits*s->qscale*s->qscale*109 + 64)>>7);
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2852 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2853
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2854 static int bit8x8_c(/*MpegEncContext*/ void *c, uint8_t *src1, uint8_t *src2, int stride, int h){
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2855 MpegEncContext * const s= (MpegEncContext *)c;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1016
diff changeset
2856 const uint8_t *scantable= s->intra_scantable.permutated;
1016
michaelni
parents: 1013
diff changeset
2857 uint64_t __align8 aligned_temp[sizeof(DCTELEM)*64/8];
michaelni
parents: 1013
diff changeset
2858 DCTELEM * const temp= (DCTELEM*)aligned_temp;
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2859 int i, last, run, bits, level, start_i;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2860 const int esc_length= s->ac_esc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2861 uint8_t * length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2862 uint8_t * last_length;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2863
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2864 assert(h==8);
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2865
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2866 s->dsp.diff_pixels(temp, src1, src2, stride);
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2867
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2868 s->block_last_index[0/*FIXME*/]= last= s->fast_dct_quantize(s, temp, 0/*FIXME*/, s->qscale, &i);
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2869
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2870 bits=0;
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2871
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2872 if (s->mb_intra) {
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2873 start_i = 1;
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2874 length = s->intra_ac_vlc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2875 last_length= s->intra_ac_vlc_last_length;
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2876 bits+= s->luma_dc_vlc_length[temp[0] + 256]; //FIXME chroma
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2877 } else {
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2878 start_i = 0;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2879 length = s->inter_ac_vlc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2880 last_length= s->inter_ac_vlc_last_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2881 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2882
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2883 if(last>=start_i){
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2884 run=0;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2885 for(i=start_i; i<last; i++){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2886 int j= scantable[i];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2887 level= temp[j];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2888
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2889 if(level){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2890 level+=64;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2891 if((level&(~127)) == 0){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2892 bits+= length[UNI_AC_ENC_INDEX(run, level)];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2893 }else
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2894 bits+= esc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2895 run=0;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2896 }else
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2897 run++;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2898 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2899 i= scantable[last];
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2900
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2901 level= temp[i] + 64;
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2902
1013
5d4c95f323d0 finetuneing thresholds/factors
michaelni
parents: 1012
diff changeset
2903 assert(level - 64);
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2904
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2905 if((level&(~127)) == 0){
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2906 bits+= last_length[UNI_AC_ENC_INDEX(run, level)];
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2907 }else
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2908 bits+= esc_length;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2909 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2910
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2911 return bits;
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2912 }
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
2913
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2914 WARPER8_16_SQ(hadamard8_diff8x8_c, hadamard8_diff16_c)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2915 WARPER8_16_SQ(dct_sad8x8_c, dct_sad16_c)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2916 WARPER8_16_SQ(quant_psnr8x8_c, quant_psnr16_c)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2917 WARPER8_16_SQ(rd8x8_c, rd16_c)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2918 WARPER8_16_SQ(bit8x8_c, bit16_c)
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
2919
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2920 /* XXX: those functions should be suppressed ASAP when all IDCTs are
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2921 converted */
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2922 static void ff_jref_idct_put(uint8_t *dest, int line_size, DCTELEM *block)
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2923 {
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2924 j_rev_dct (block);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2925 put_pixels_clamped_c(block, dest, line_size);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2926 }
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2927 static void ff_jref_idct_add(uint8_t *dest, int line_size, DCTELEM *block)
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2928 {
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2929 j_rev_dct (block);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2930 add_pixels_clamped_c(block, dest, line_size);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2931 }
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2932
1201
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2933 /* init static data */
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2934 void dsputil_static_init(void)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2935 {
751
cbe316f082bc warning fixes
michaelni
parents: 706
diff changeset
2936 int i;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2937
1201
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2938 for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2939 for(i=0;i<MAX_NEG_CROP;i++) {
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2940 cropTbl[i] = 0;
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2941 cropTbl[i + MAX_NEG_CROP + 256] = 255;
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2942 }
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2943
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2944 for(i=0;i<512;i++) {
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2945 squareTbl[i] = (i - 256) * (i - 256);
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2946 }
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2947
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2948 for(i=0; i<64; i++) inv_zigzag_direct16[ff_zigzag_direct[i]]= i+1;
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2949 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2950
861
243cc33da3eb * init for inv_zigzag_direct16 moved to init block
kabi
parents: 860
diff changeset
2951
1201
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2952 void dsputil_init(DSPContext* c, AVCodecContext *avctx)
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2953 {
e0fc95a6eb4e fixed static init
bellard
parents: 1168
diff changeset
2954 int i;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2955
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2956 #ifdef CONFIG_ENCODERS
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
2957 if(avctx->dct_algo==FF_DCT_FASTINT) {
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2958 c->fdct = fdct_ifast;
1571
aa4dc16c0f18 * adding integer/floating point AAN implementations for DCT 2-4-8
romansh
parents: 1567
diff changeset
2959 c->fdct248 = fdct_ifast248;
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
2960 }
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
2961 else if(avctx->dct_algo==FF_DCT_FAAN) {
1557
5d53c03186a1 floating point AAN DCT
michael
parents: 1527
diff changeset
2962 c->fdct = ff_faandct;
1571
aa4dc16c0f18 * adding integer/floating point AAN implementations for DCT 2-4-8
romansh
parents: 1567
diff changeset
2963 c->fdct248 = ff_faandct248;
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
2964 }
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
2965 else {
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2966 c->fdct = ff_jpeg_fdct_islow; //slow/accurate/default
1567
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
2967 c->fdct248 = ff_fdct248_islow;
e08df4d22d27 * introducing dct248 into the DSP context.
romansh
parents: 1557
diff changeset
2968 }
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2969 #endif //CONFIG_ENCODERS
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2970
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2971 if(avctx->idct_algo==FF_IDCT_INT){
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2972 c->idct_put= ff_jref_idct_put;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2973 c->idct_add= ff_jref_idct_add;
1324
7d328fd9d8a5 the return of the idct with 16bit output by ("Ivan Kalvachev" <ivan at cacad dot com>)
michaelni
parents: 1319
diff changeset
2974 c->idct = j_rev_dct;
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2975 c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2976 }else{ //accurate/default
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2977 c->idct_put= simple_idct_put;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2978 c->idct_add= simple_idct_add;
1324
7d328fd9d8a5 the return of the idct with 16bit output by ("Ivan Kalvachev" <ivan at cacad dot com>)
michaelni
parents: 1319
diff changeset
2979 c->idct = simple_idct;
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2980 c->idct_permutation_type= FF_NO_IDCT_PERM;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2981 }
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
2982
853
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2983 c->get_pixels = get_pixels_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2984 c->diff_pixels = diff_pixels_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2985 c->put_pixels_clamped = put_pixels_clamped_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2986 c->add_pixels_clamped = add_pixels_clamped_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2987 c->gmc1 = gmc1_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2988 c->gmc = gmc_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2989 c->clear_blocks = clear_blocks_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2990 c->pix_sum = pix_sum_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2991 c->pix_norm1 = pix_norm1_c;
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
2992
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
2993 /* TODO [0] 16 [1] 8 */
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2994 c->pix_abs[0][0] = pix_abs16_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2995 c->pix_abs[0][1] = pix_abs16_x2_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2996 c->pix_abs[0][2] = pix_abs16_y2_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2997 c->pix_abs[0][3] = pix_abs16_xy2_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2998 c->pix_abs[1][0] = pix_abs8_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
2999 c->pix_abs[1][1] = pix_abs8_x2_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3000 c->pix_abs[1][2] = pix_abs8_y2_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3001 c->pix_abs[1][3] = pix_abs8_xy2_c;
853
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
3002
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3003 #define dspfunc(PFX, IDX, NUM) \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3004 c->PFX ## _pixels_tab[IDX][0] = PFX ## _pixels ## NUM ## _c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3005 c->PFX ## _pixels_tab[IDX][1] = PFX ## _pixels ## NUM ## _x2_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3006 c->PFX ## _pixels_tab[IDX][2] = PFX ## _pixels ## NUM ## _y2_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3007 c->PFX ## _pixels_tab[IDX][3] = PFX ## _pixels ## NUM ## _xy2_c
853
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 764
diff changeset
3008
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3009 dspfunc(put, 0, 16);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3010 dspfunc(put_no_rnd, 0, 16);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3011 dspfunc(put, 1, 8);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3012 dspfunc(put_no_rnd, 1, 8);
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3013 dspfunc(put, 2, 4);
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3014 dspfunc(put, 3, 2);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
3015
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3016 dspfunc(avg, 0, 16);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3017 dspfunc(avg_no_rnd, 0, 16);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3018 dspfunc(avg, 1, 8);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3019 dspfunc(avg_no_rnd, 1, 8);
1319
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3020 dspfunc(avg, 2, 4);
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3021 dspfunc(avg, 3, 2);
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3022 #undef dspfunc
857
b510a7b6decd 100l for kabi (fixing qpel)
michaelni
parents: 853
diff changeset
3023
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3024 c->put_tpel_pixels_tab[ 0] = put_tpel_pixels_mc00_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3025 c->put_tpel_pixels_tab[ 1] = put_tpel_pixels_mc10_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3026 c->put_tpel_pixels_tab[ 2] = put_tpel_pixels_mc20_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3027 c->put_tpel_pixels_tab[ 4] = put_tpel_pixels_mc01_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3028 c->put_tpel_pixels_tab[ 5] = put_tpel_pixels_mc11_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3029 c->put_tpel_pixels_tab[ 6] = put_tpel_pixels_mc21_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3030 c->put_tpel_pixels_tab[ 8] = put_tpel_pixels_mc02_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3031 c->put_tpel_pixels_tab[ 9] = put_tpel_pixels_mc12_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3032 c->put_tpel_pixels_tab[10] = put_tpel_pixels_mc22_c;
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3033
1319
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3034 c->avg_tpel_pixels_tab[ 0] = avg_tpel_pixels_mc00_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3035 c->avg_tpel_pixels_tab[ 1] = avg_tpel_pixels_mc10_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3036 c->avg_tpel_pixels_tab[ 2] = avg_tpel_pixels_mc20_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3037 c->avg_tpel_pixels_tab[ 4] = avg_tpel_pixels_mc01_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3038 c->avg_tpel_pixels_tab[ 5] = avg_tpel_pixels_mc11_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3039 c->avg_tpel_pixels_tab[ 6] = avg_tpel_pixels_mc21_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3040 c->avg_tpel_pixels_tab[ 8] = avg_tpel_pixels_mc02_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3041 c->avg_tpel_pixels_tab[ 9] = avg_tpel_pixels_mc12_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3042 c->avg_tpel_pixels_tab[10] = avg_tpel_pixels_mc22_c;
449f6e32b425 added support for B-frames and multiple slices
tmmm
parents: 1273
diff changeset
3043
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3044 #define dspfunc(PFX, IDX, NUM) \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3045 c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3046 c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3047 c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3048 c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3049 c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3050 c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3051 c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3052 c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3053 c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3054 c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3055 c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3056 c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3057 c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3058 c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3059 c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_c; \
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3060 c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_c
857
b510a7b6decd 100l for kabi (fixing qpel)
michaelni
parents: 853
diff changeset
3061
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3062 dspfunc(put_qpel, 0, 16);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3063 dspfunc(put_no_rnd_qpel, 0, 16);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3064
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3065 dspfunc(avg_qpel, 0, 16);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3066 /* dspfunc(avg_no_rnd_qpel, 0, 16); */
857
b510a7b6decd 100l for kabi (fixing qpel)
michaelni
parents: 853
diff changeset
3067
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3068 dspfunc(put_qpel, 1, 8);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3069 dspfunc(put_no_rnd_qpel, 1, 8);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3070
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3071 dspfunc(avg_qpel, 1, 8);
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3072 /* dspfunc(avg_no_rnd_qpel, 1, 8); */
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3073
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3074 dspfunc(put_h264_qpel, 0, 16);
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3075 dspfunc(put_h264_qpel, 1, 8);
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3076 dspfunc(put_h264_qpel, 2, 4);
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3077 dspfunc(avg_h264_qpel, 0, 16);
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3078 dspfunc(avg_h264_qpel, 1, 8);
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3079 dspfunc(avg_h264_qpel, 2, 4);
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3080
859
9512471dec40 * using macros to shorten init part
kabi
parents: 858
diff changeset
3081 #undef dspfunc
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3082 c->put_h264_chroma_pixels_tab[0]= put_h264_chroma_mc8_c;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3083 c->put_h264_chroma_pixels_tab[1]= put_h264_chroma_mc4_c;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3084 c->put_h264_chroma_pixels_tab[2]= put_h264_chroma_mc2_c;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3085 c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_c;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3086 c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_c;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
3087 c->avg_h264_chroma_pixels_tab[2]= avg_h264_chroma_mc2_c;
857
b510a7b6decd 100l for kabi (fixing qpel)
michaelni
parents: 853
diff changeset
3088
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3089 c->put_mspel_pixels_tab[0]= put_mspel8_mc00_c;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3090 c->put_mspel_pixels_tab[1]= put_mspel8_mc10_c;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3091 c->put_mspel_pixels_tab[2]= put_mspel8_mc20_c;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3092 c->put_mspel_pixels_tab[3]= put_mspel8_mc30_c;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3093 c->put_mspel_pixels_tab[4]= put_mspel8_mc02_c;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3094 c->put_mspel_pixels_tab[5]= put_mspel8_mc12_c;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3095 c->put_mspel_pixels_tab[6]= put_mspel8_mc22_c;
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3096 c->put_mspel_pixels_tab[7]= put_mspel8_mc32_c;
1267
85b71f9f7450 moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...)
michaelni
parents: 1264
diff changeset
3097
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3098 c->hadamard8_abs = hadamard8_abs_c;
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3099
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3100 #define SET_CMP_FUNC(name) \
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3101 c->name[0]= name ## 16_c;\
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3102 c->name[1]= name ## 8x8_c;
936
caa77cd960c0 qpel encoding
michaelni
parents: 909
diff changeset
3103
1708
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3104 SET_CMP_FUNC(hadamard8_diff)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3105 SET_CMP_FUNC(dct_sad)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3106 c->sad[0]= pix_abs16_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3107 c->sad[1]= pix_abs8_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3108 c->sse[0]= sse16_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3109 c->sse[1]= sse8_c;
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3110 SET_CMP_FUNC(quant_psnr)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3111 SET_CMP_FUNC(rd)
dea5b2946999 interlaced motion estimation
michael
parents: 1689
diff changeset
3112 SET_CMP_FUNC(bit)
1007
b2cf2a1d9a51 more compare functions (rd & bit)
michaelni
parents: 997
diff changeset
3113
866
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
3114 c->add_bytes= add_bytes_c;
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
3115 c->diff_bytes= diff_bytes_c;
1527
8ffd0c00e6df mmx2 optimization of huffyuv median encoding
michael
parents: 1329
diff changeset
3116 c->sub_hfyu_median_prediction= sub_hfyu_median_prediction_c;
1273
a979fab41ed8 ASV1 codec
michaelni
parents: 1267
diff changeset
3117 c->bswap_buf= bswap_buf;
1644
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
3118
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
3119 c->h263_h_loop_filter= h263_h_loop_filter_c;
835cf346975e h263 loop filter
michael
parents: 1598
diff changeset
3120 c->h263_v_loop_filter= h263_v_loop_filter_c;
866
725ef4ea3ecc huffyuv
michaelni
parents: 861
diff changeset
3121
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
3122 #ifdef HAVE_MMX
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3123 dsputil_init_mmx(c, avctx);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
3124 #endif
62
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
3125 #ifdef ARCH_ARMV4L
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3126 dsputil_init_armv4l(c, avctx);
62
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
3127 #endif
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
3128 #ifdef HAVE_MLIB
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3129 dsputil_init_mlib(c, avctx);
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
3130 #endif
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 209
diff changeset
3131 #ifdef ARCH_ALPHA
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3132 dsputil_init_alpha(c, avctx);
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 209
diff changeset
3133 #endif
623
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
3134 #ifdef ARCH_POWERPC
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3135 dsputil_init_ppc(c, avctx);
626
23a093d6e450 patch by Heliodoro Tammaro <helio at interactives dot org>
michaelni
parents: 625
diff changeset
3136 #endif
689
efcbfbd18864 ps2 idct patch by (Leon van Stuivenberg <leonvs at iae dot nl>)
michaelni
parents: 676
diff changeset
3137 #ifdef HAVE_MMI
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3138 dsputil_init_mmi(c, avctx);
689
efcbfbd18864 ps2 idct patch by (Leon van Stuivenberg <leonvs at iae dot nl>)
michaelni
parents: 676
diff changeset
3139 #endif
1259
e8c3884f2c7e sh4 optimized idct & bswap patch by (BERO <bero at geocities dot co dot jp>)
michaelni
parents: 1201
diff changeset
3140 #ifdef ARCH_SH4
e8c3884f2c7e sh4 optimized idct & bswap patch by (BERO <bero at geocities dot co dot jp>)
michaelni
parents: 1201
diff changeset
3141 dsputil_init_sh4(c,avctx);
e8c3884f2c7e sh4 optimized idct & bswap patch by (BERO <bero at geocities dot co dot jp>)
michaelni
parents: 1201
diff changeset
3142 #endif
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3143
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3144 switch(c->idct_permutation_type){
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3145 case FF_NO_IDCT_PERM:
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3146 for(i=0; i<64; i++)
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3147 c->idct_permutation[i]= i;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3148 break;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3149 case FF_LIBMPEG2_IDCT_PERM:
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3150 for(i=0; i<64; i++)
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3151 c->idct_permutation[i]= (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3152 break;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3153 case FF_SIMPLE_IDCT_PERM:
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3154 for(i=0; i<64; i++)
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3155 c->idct_permutation[i]= simple_mmx_permutation[i];
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3156 break;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3157 case FF_TRANSPOSE_IDCT_PERM:
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3158 for(i=0; i<64; i++)
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3159 c->idct_permutation[i]= ((i&7)<<3) | (i>>3);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3160 break;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3161 default:
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1571
diff changeset
3162 av_log(avctx, AV_LOG_ERROR, "Internal error, IDCT permutation not set\n");
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 1064
diff changeset
3163 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
3164 }
252
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
3165