Mercurial > libavcodec.hg
annotate rv30dsp.c @ 8404:60b6a780100b libavcodec
Port x264 deblocking code to libavcodec.
This includes SSE2 luma deblocking code and both MMXEXT and SSE2 luma
intra deblocking code for H.264 decoding. This assembly is available
under --enable-gpl and speeds decoding of Cathedral by 7%.
author | darkshikari |
---|---|
date | Fri, 19 Dec 2008 13:45:13 +0000 |
parents | 84a066542cd4 |
children | e9d9d946f213 |
rev | line source |
---|---|
6106 | 1 /* |
2 * RV30 decoder motion compensation functions | |
3 * Copyright (c) 2007 Konstantin Shishkov | |
4 * | |
5 * This file is part of FFmpeg. | |
6 * | |
7 * FFmpeg is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Lesser General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2.1 of the License, or (at your option) any later version. | |
11 * | |
12 * FFmpeg is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Lesser General Public | |
18 * License along with FFmpeg; if not, write to the Free Software | |
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 */ | |
21 | |
22 /** | |
23 * @file rv30dsp.c | |
24 * RV30 decoder motion compensation functions | |
25 */ | |
26 | |
27 #include "avcodec.h" | |
28 #include "dsputil.h" | |
29 | |
30 #define RV30_LOWPASS(OPNAME, OP) \ | |
31 static av_unused void OPNAME ## rv30_tpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\ | |
32 const int h=8;\ | |
33 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ | |
34 int i;\ | |
35 for(i=0; i<h; i++)\ | |
36 {\ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
37 OP(dst[0], (-(src[-1]+src[2]) + src[0]*C1 + src[1]*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
38 OP(dst[1], (-(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
39 OP(dst[2], (-(src[ 1]+src[4]) + src[2]*C1 + src[3]*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
40 OP(dst[3], (-(src[ 2]+src[5]) + src[3]*C1 + src[4]*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
41 OP(dst[4], (-(src[ 3]+src[6]) + src[4]*C1 + src[5]*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
42 OP(dst[5], (-(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
43 OP(dst[6], (-(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
44 OP(dst[7], (-(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2 + 8)>>4);\ |
6106 | 45 dst+=dstStride;\ |
46 src+=srcStride;\ | |
47 }\ | |
48 }\ | |
49 \ | |
50 static void OPNAME ## rv30_tpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\ | |
51 const int w=8;\ | |
52 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ | |
53 int i;\ | |
54 for(i=0; i<w; i++)\ | |
55 {\ | |
56 const int srcA= src[-1*srcStride];\ | |
57 const int src0= src[0 *srcStride];\ | |
58 const int src1= src[1 *srcStride];\ | |
59 const int src2= src[2 *srcStride];\ | |
60 const int src3= src[3 *srcStride];\ | |
61 const int src4= src[4 *srcStride];\ | |
62 const int src5= src[5 *srcStride];\ | |
63 const int src6= src[6 *srcStride];\ | |
64 const int src7= src[7 *srcStride];\ | |
65 const int src8= src[8 *srcStride];\ | |
66 const int src9= src[9 *srcStride];\ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
67 OP(dst[0*dstStride], (-(srcA+src2) + src0*C1 + src1*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
68 OP(dst[1*dstStride], (-(src0+src3) + src1*C1 + src2*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
69 OP(dst[2*dstStride], (-(src1+src4) + src2*C1 + src3*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
70 OP(dst[3*dstStride], (-(src2+src5) + src3*C1 + src4*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
71 OP(dst[4*dstStride], (-(src3+src6) + src4*C1 + src5*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
72 OP(dst[5*dstStride], (-(src4+src7) + src5*C1 + src6*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
73 OP(dst[6*dstStride], (-(src5+src8) + src6*C1 + src7*C2 + 8)>>4);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
74 OP(dst[7*dstStride], (-(src6+src9) + src7*C1 + src8*C2 + 8)>>4);\ |
6106 | 75 dst++;\ |
76 src++;\ | |
77 }\ | |
78 }\ | |
79 \ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
80 static void OPNAME ## rv30_tpel8_hv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
81 const int w = 8;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
82 const int h = 8;\ |
6106 | 83 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
84 int i, j;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
85 for(j = 0; j < h; j++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
86 for(i = 0; i < w; i++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
87 OP(dst[i], (\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
88 src[srcStride*-1+i-1] -12*src[srcStride*-1+i] -6*src[srcStride*-1+i+1] +src[srcStride*-1+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
89 -12*src[srcStride* 0+i-1] +144*src[srcStride* 0+i] +72*src[srcStride* 0+i+1] -12*src[srcStride* 0+i+2] +\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
90 -6*src[srcStride* 1+i-1] +72*src[srcStride* 1+i] +36*src[srcStride* 1+i+1] -6*src[srcStride* 1+i+2] +\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
91 src[srcStride* 2+i-1] -12*src[srcStride* 2+i] -6*src[srcStride* 2+i+1] +src[srcStride* 2+i+2] +\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
92 128)>>8);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
93 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
94 src += srcStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
95 dst += dstStride;\ |
6106 | 96 }\ |
97 }\ | |
98 \ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
99 static void OPNAME ## rv30_tpel8_hhv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
100 const int w = 8;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
101 const int h = 8;\ |
6106 | 102 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
103 int i, j;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
104 for(j = 0; j < h; j++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
105 for(i = 0; i < w; i++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
106 OP(dst[i], (\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
107 src[srcStride*-1+i-1] -12*src[srcStride*-1+i+1] -6*src[srcStride*-1+i] +src[srcStride*-1+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
108 -12*src[srcStride* 0+i-1] +144*src[srcStride* 0+i+1] +72*src[srcStride* 0+i] -12*src[srcStride* 0+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
109 -6*src[srcStride* 1+i-1] +72*src[srcStride* 1+i+1] +36*src[srcStride* 1+i] -6*src[srcStride* 1+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
110 src[srcStride* 2+i-1] -12*src[srcStride* 2+i+1] -6*src[srcStride* 2+i] +src[srcStride* 2+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
111 128)>>8);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
112 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
113 src += srcStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
114 dst += dstStride;\ |
6106 | 115 }\ |
116 }\ | |
117 \ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
118 static void OPNAME ## rv30_tpel8_hvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
119 const int w = 8;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
120 const int h = 8;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
121 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
122 int i, j;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
123 for(j = 0; j < h; j++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
124 for(i = 0; i < w; i++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
125 OP(dst[i], (\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
126 src[srcStride*-1+i-1] -12*src[srcStride*-1+i] -6*src[srcStride*-1+i+1] +src[srcStride*-1+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
127 -6*src[srcStride* 0+i-1] +72*src[srcStride* 0+i] +36*src[srcStride* 0+i+1] -6*src[srcStride* 0+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
128 -12*src[srcStride* 1+i-1] +144*src[srcStride* 1+i] +72*src[srcStride* 1+i+1] -12*src[srcStride* 1+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
129 src[srcStride* 2+i-1] -12*src[srcStride* 2+i] -6*src[srcStride* 2+i+1] +src[srcStride* 2+i+2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
130 128)>>8);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
131 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
132 src += srcStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
133 dst += dstStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
134 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
135 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
136 \ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
137 static void OPNAME ## rv30_tpel8_hhvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
138 const int w = 8;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
139 const int h = 8;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
140 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
141 int i, j;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
142 for(j = 0; j < h; j++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
143 for(i = 0; i < w; i++){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
144 OP(dst[i], (\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
145 36*src[i+srcStride*0] +54*src[i+1+srcStride*0] +6*src[i+2+srcStride*0]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
146 54*src[i+srcStride*1] +81*src[i+1+srcStride*1] +9*src[i+2+srcStride*1]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
147 6*src[i+srcStride*2] + 9*src[i+1+srcStride*2] + src[i+2+srcStride*2]+\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
148 128)>>8);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
149 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
150 src += srcStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
151 dst += dstStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
152 }\ |
6106 | 153 }\ |
154 \ | |
155 static void OPNAME ## rv30_tpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\ | |
156 OPNAME ## rv30_tpel8_v_lowpass(dst , src , dstStride, srcStride, C1, C2);\ | |
157 OPNAME ## rv30_tpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\ | |
158 src += 8*srcStride;\ | |
159 dst += 8*dstStride;\ | |
160 OPNAME ## rv30_tpel8_v_lowpass(dst , src , dstStride, srcStride, C1, C2);\ | |
161 OPNAME ## rv30_tpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\ | |
162 }\ | |
163 \ | |
164 static void OPNAME ## rv30_tpel16_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\ | |
165 OPNAME ## rv30_tpel8_h_lowpass(dst , src , dstStride, srcStride, C1, C2);\ | |
166 OPNAME ## rv30_tpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\ | |
167 src += 8*srcStride;\ | |
168 dst += 8*dstStride;\ | |
169 OPNAME ## rv30_tpel8_h_lowpass(dst , src , dstStride, srcStride, C1, C2);\ | |
170 OPNAME ## rv30_tpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\ | |
171 }\ | |
172 \ | |
173 static void OPNAME ## rv30_tpel16_hv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ | |
174 OPNAME ## rv30_tpel8_hv_lowpass(dst , src , dstStride, srcStride);\ | |
175 OPNAME ## rv30_tpel8_hv_lowpass(dst+8, src+8, dstStride, srcStride);\ | |
176 src += 8*srcStride;\ | |
177 dst += 8*dstStride;\ | |
178 OPNAME ## rv30_tpel8_hv_lowpass(dst , src , dstStride, srcStride);\ | |
179 OPNAME ## rv30_tpel8_hv_lowpass(dst+8, src+8, dstStride, srcStride);\ | |
180 }\ | |
181 \ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
182 static void OPNAME ## rv30_tpel16_hhv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
183 OPNAME ## rv30_tpel8_hhv_lowpass(dst , src , dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
184 OPNAME ## rv30_tpel8_hhv_lowpass(dst+8, src+8, dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
185 src += 8*srcStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
186 dst += 8*dstStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
187 OPNAME ## rv30_tpel8_hhv_lowpass(dst , src , dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
188 OPNAME ## rv30_tpel8_hhv_lowpass(dst+8, src+8, dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
189 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
190 \ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
191 static void OPNAME ## rv30_tpel16_hvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
192 OPNAME ## rv30_tpel8_hvv_lowpass(dst , src , dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
193 OPNAME ## rv30_tpel8_hvv_lowpass(dst+8, src+8, dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
194 src += 8*srcStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
195 dst += 8*dstStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
196 OPNAME ## rv30_tpel8_hvv_lowpass(dst , src , dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
197 OPNAME ## rv30_tpel8_hvv_lowpass(dst+8, src+8, dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
198 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
199 \ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
200 static void OPNAME ## rv30_tpel16_hhvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
201 OPNAME ## rv30_tpel8_hhvv_lowpass(dst , src , dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
202 OPNAME ## rv30_tpel8_hhvv_lowpass(dst+8, src+8, dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
203 src += 8*srcStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
204 dst += 8*dstStride;\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
205 OPNAME ## rv30_tpel8_hhvv_lowpass(dst , src , dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
206 OPNAME ## rv30_tpel8_hhvv_lowpass(dst+8, src+8, dstStride, srcStride);\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
207 }\ |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
208 \ |
6106 | 209 |
210 #define RV30_MC(OPNAME, SIZE) \ | |
211 static void OPNAME ## rv30_tpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, int stride){\ | |
212 OPNAME ## rv30_tpel ## SIZE ## _h_lowpass(dst, src, stride, stride, 12, 6);\ | |
213 }\ | |
214 \ | |
215 static void OPNAME ## rv30_tpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\ | |
216 OPNAME ## rv30_tpel ## SIZE ## _h_lowpass(dst, src, stride, stride, 6, 12);\ | |
217 }\ | |
218 \ | |
219 static void OPNAME ## rv30_tpel ## SIZE ## _mc01_c(uint8_t *dst, uint8_t *src, int stride){\ | |
220 OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 12, 6);\ | |
221 }\ | |
222 \ | |
223 static void OPNAME ## rv30_tpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\ | |
224 OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 6, 12);\ | |
225 }\ | |
226 \ | |
227 static void OPNAME ## rv30_tpel ## SIZE ## _mc11_c(uint8_t *dst, uint8_t *src, int stride){\ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
228 OPNAME ## rv30_tpel ## SIZE ## _hv_lowpass(dst, src, stride, stride);\ |
6106 | 229 }\ |
230 \ | |
231 static void OPNAME ## rv30_tpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
232 OPNAME ## rv30_tpel ## SIZE ## _hvv_lowpass(dst, src, stride, stride);\ |
6106 | 233 }\ |
234 \ | |
235 static void OPNAME ## rv30_tpel ## SIZE ## _mc21_c(uint8_t *dst, uint8_t *src, int stride){\ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
236 OPNAME ## rv30_tpel ## SIZE ## _hhv_lowpass(dst, src, stride, stride);\ |
6106 | 237 }\ |
238 \ | |
239 static void OPNAME ## rv30_tpel ## SIZE ## _mc22_c(uint8_t *dst, uint8_t *src, int stride){\ | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
240 OPNAME ## rv30_tpel ## SIZE ## _hhvv_lowpass(dst, src, stride, stride);\ |
6106 | 241 }\ |
242 \ | |
243 | |
8367
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
244 #define op_avg(a, b) a = (((a)+cm[b]+1)>>1) |
84a066542cd4
Unfortunately RV30 luma thirdpel MC functions cannot be substituted with
kostya
parents:
6106
diff
changeset
|
245 #define op_put(a, b) a = cm[b] |
6106 | 246 |
247 RV30_LOWPASS(put_ , op_put) | |
248 RV30_LOWPASS(avg_ , op_avg) | |
249 RV30_MC(put_, 8) | |
250 RV30_MC(put_, 16) | |
251 RV30_MC(avg_, 8) | |
252 RV30_MC(avg_, 16) | |
253 | |
254 void ff_rv30dsp_init(DSPContext* c, AVCodecContext *avctx) { | |
255 c->put_rv30_tpel_pixels_tab[0][ 0] = c->put_h264_qpel_pixels_tab[0][0]; | |
256 c->put_rv30_tpel_pixels_tab[0][ 1] = put_rv30_tpel16_mc10_c; | |
257 c->put_rv30_tpel_pixels_tab[0][ 2] = put_rv30_tpel16_mc20_c; | |
258 c->put_rv30_tpel_pixels_tab[0][ 4] = put_rv30_tpel16_mc01_c; | |
259 c->put_rv30_tpel_pixels_tab[0][ 5] = put_rv30_tpel16_mc11_c; | |
260 c->put_rv30_tpel_pixels_tab[0][ 6] = put_rv30_tpel16_mc21_c; | |
261 c->put_rv30_tpel_pixels_tab[0][ 8] = put_rv30_tpel16_mc02_c; | |
262 c->put_rv30_tpel_pixels_tab[0][ 9] = put_rv30_tpel16_mc12_c; | |
263 c->put_rv30_tpel_pixels_tab[0][10] = put_rv30_tpel16_mc22_c; | |
264 c->avg_rv30_tpel_pixels_tab[0][ 0] = c->avg_h264_qpel_pixels_tab[0][0]; | |
265 c->avg_rv30_tpel_pixels_tab[0][ 1] = avg_rv30_tpel16_mc10_c; | |
266 c->avg_rv30_tpel_pixels_tab[0][ 2] = avg_rv30_tpel16_mc20_c; | |
267 c->avg_rv30_tpel_pixels_tab[0][ 4] = avg_rv30_tpel16_mc01_c; | |
268 c->avg_rv30_tpel_pixels_tab[0][ 5] = avg_rv30_tpel16_mc11_c; | |
269 c->avg_rv30_tpel_pixels_tab[0][ 6] = avg_rv30_tpel16_mc21_c; | |
270 c->avg_rv30_tpel_pixels_tab[0][ 8] = avg_rv30_tpel16_mc02_c; | |
271 c->avg_rv30_tpel_pixels_tab[0][ 9] = avg_rv30_tpel16_mc12_c; | |
272 c->avg_rv30_tpel_pixels_tab[0][10] = avg_rv30_tpel16_mc22_c; | |
273 c->put_rv30_tpel_pixels_tab[1][ 0] = c->put_h264_qpel_pixels_tab[1][0]; | |
274 c->put_rv30_tpel_pixels_tab[1][ 1] = put_rv30_tpel8_mc10_c; | |
275 c->put_rv30_tpel_pixels_tab[1][ 2] = put_rv30_tpel8_mc20_c; | |
276 c->put_rv30_tpel_pixels_tab[1][ 4] = put_rv30_tpel8_mc01_c; | |
277 c->put_rv30_tpel_pixels_tab[1][ 5] = put_rv30_tpel8_mc11_c; | |
278 c->put_rv30_tpel_pixels_tab[1][ 6] = put_rv30_tpel8_mc21_c; | |
279 c->put_rv30_tpel_pixels_tab[1][ 8] = put_rv30_tpel8_mc02_c; | |
280 c->put_rv30_tpel_pixels_tab[1][ 9] = put_rv30_tpel8_mc12_c; | |
281 c->put_rv30_tpel_pixels_tab[1][10] = put_rv30_tpel8_mc22_c; | |
282 c->avg_rv30_tpel_pixels_tab[1][ 0] = c->avg_h264_qpel_pixels_tab[1][0]; | |
283 c->avg_rv30_tpel_pixels_tab[1][ 1] = avg_rv30_tpel8_mc10_c; | |
284 c->avg_rv30_tpel_pixels_tab[1][ 2] = avg_rv30_tpel8_mc20_c; | |
285 c->avg_rv30_tpel_pixels_tab[1][ 4] = avg_rv30_tpel8_mc01_c; | |
286 c->avg_rv30_tpel_pixels_tab[1][ 5] = avg_rv30_tpel8_mc11_c; | |
287 c->avg_rv30_tpel_pixels_tab[1][ 6] = avg_rv30_tpel8_mc21_c; | |
288 c->avg_rv30_tpel_pixels_tab[1][ 8] = avg_rv30_tpel8_mc02_c; | |
289 c->avg_rv30_tpel_pixels_tab[1][ 9] = avg_rv30_tpel8_mc12_c; | |
290 c->avg_rv30_tpel_pixels_tab[1][10] = avg_rv30_tpel8_mc22_c; | |
291 } |