annotate rv30dsp.c @ 7855:9a135b6a1dc7 libavcodec

Correct order of parsing for pulse scalefactor band and offset to match the specification. Patch by Alex Converse (alex converse gmail com)
author superdump
date Sat, 13 Sep 2008 18:47:43 +0000
parents 7185e3bb0614
children 84a066542cd4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6106
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
1 /*
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
2 * RV30 decoder motion compensation functions
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
3 * Copyright (c) 2007 Konstantin Shishkov
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
4 *
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
5 * This file is part of FFmpeg.
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
6 *
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
11 *
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
15 * Lesser General Public License for more details.
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
16 *
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
20 */
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
21
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
22 /**
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
23 * @file rv30dsp.c
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
24 * RV30 decoder motion compensation functions
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
25 */
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
26
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
27 #include "avcodec.h"
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
28 #include "dsputil.h"
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
29
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
30 #define RV30_LOWPASS(OPNAME, OP) \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
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){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
32 const int h=8;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
33 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
34 int i;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
35 for(i=0; i<h; i++)\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
36 {\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
37 OP(dst[0], -(src[-1]+src[2]) + src[0]*C1 + src[1]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
38 OP(dst[1], -(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
39 OP(dst[2], -(src[ 1]+src[4]) + src[2]*C1 + src[3]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
40 OP(dst[3], -(src[ 2]+src[5]) + src[3]*C1 + src[4]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
41 OP(dst[4], -(src[ 3]+src[6]) + src[4]*C1 + src[5]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
42 OP(dst[5], -(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
43 OP(dst[6], -(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
44 OP(dst[7], -(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
45 dst+=dstStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
46 src+=srcStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
47 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
48 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
49 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
50 static void OPNAME ## rv30_tpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
51 const int w=8;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
52 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
53 int i;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
54 for(i=0; i<w; i++)\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
55 {\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
56 const int srcA= src[-1*srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
57 const int src0= src[0 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
58 const int src1= src[1 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
59 const int src2= src[2 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
60 const int src3= src[3 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
61 const int src4= src[4 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
62 const int src5= src[5 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
63 const int src6= src[6 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
64 const int src7= src[7 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
65 const int src8= src[8 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
66 const int src9= src[9 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
67 OP(dst[0*dstStride], -(srcA+src2) + src0*C1 + src1*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
68 OP(dst[1*dstStride], -(src0+src3) + src1*C1 + src2*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
69 OP(dst[2*dstStride], -(src1+src4) + src2*C1 + src3*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
70 OP(dst[3*dstStride], -(src2+src5) + src3*C1 + src4*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
71 OP(dst[4*dstStride], -(src3+src6) + src4*C1 + src5*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
72 OP(dst[5*dstStride], -(src4+src7) + src5*C1 + src6*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
73 OP(dst[6*dstStride], -(src5+src8) + src6*C1 + src7*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
74 OP(dst[7*dstStride], -(src6+src9) + src7*C1 + src8*C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
75 dst++;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
76 src++;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
77 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
78 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
79 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
80 static void OPNAME ## rv30_tpel8_h3_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
81 const int h=8+2;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
82 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
83 int i;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
84 for(i=0; i<h; i++)\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
85 {\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
86 OP(dst[0], 6*src[0]+9*src[1]+src[2]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
87 OP(dst[1], 6*src[1]+9*src[2]+src[3]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
88 OP(dst[2], 6*src[2]+9*src[3]+src[4]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
89 OP(dst[3], 6*src[3]+9*src[4]+src[5]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
90 OP(dst[4], 6*src[4]+9*src[5]+src[6]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
91 OP(dst[5], 6*src[5]+9*src[6]+src[7]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
92 OP(dst[6], 6*src[6]+9*src[7]+src[8]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
93 OP(dst[7], 6*src[7]+9*src[8]+src[9]);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
94 dst+=dstStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
95 src+=srcStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
96 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
97 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
98 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
99 static void OPNAME ## rv30_tpel8_v3_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
100 const int w=8;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
101 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
102 int i;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
103 for(i=0; i<w; i++)\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
104 {\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
105 const int src0= src[0 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
106 const int src1= src[1 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
107 const int src2= src[2 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
108 const int src3= src[3 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
109 const int src4= src[4 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
110 const int src5= src[5 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
111 const int src6= src[6 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
112 const int src7= src[7 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
113 const int src8= src[8 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
114 const int src9= src[9 *srcStride];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
115 OP(dst[0*dstStride], 6*src0 + 9*src1 + src2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
116 OP(dst[1*dstStride], 6*src1 + 9*src2 + src3);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
117 OP(dst[2*dstStride], 6*src2 + 9*src3 + src4);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
118 OP(dst[3*dstStride], 6*src3 + 9*src4 + src5);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
119 OP(dst[4*dstStride], 6*src4 + 9*src5 + src6);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
120 OP(dst[5*dstStride], 6*src5 + 9*src6 + src7);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
121 OP(dst[6*dstStride], 6*src6 + 9*src7 + src8);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
122 OP(dst[7*dstStride], 6*src7 + 9*src8 + src9);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
123 dst ++;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
124 src ++;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
125 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
126 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
127 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
128 static void OPNAME ## rv30_tpel8_hv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
129 uint8_t half[8*10];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
130 put_rv30_tpel8_h3_lowpass(half, src, 8, srcStride);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
131 OPNAME ## rv30_tpel8_v3_lowpass(dst, half, dstStride, 8);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
132 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
133 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
134 static void OPNAME ## rv30_tpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
135 OPNAME ## rv30_tpel8_v_lowpass(dst , src , dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
136 OPNAME ## rv30_tpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
137 src += 8*srcStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
138 dst += 8*dstStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
139 OPNAME ## rv30_tpel8_v_lowpass(dst , src , dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
140 OPNAME ## rv30_tpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
141 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
142 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
143 static void OPNAME ## rv30_tpel16_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
144 OPNAME ## rv30_tpel8_h_lowpass(dst , src , dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
145 OPNAME ## rv30_tpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
146 src += 8*srcStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
147 dst += 8*dstStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
148 OPNAME ## rv30_tpel8_h_lowpass(dst , src , dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
149 OPNAME ## rv30_tpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, C1, C2);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
150 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
151 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
152 static void OPNAME ## rv30_tpel16_hv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
153 OPNAME ## rv30_tpel8_hv_lowpass(dst , src , dstStride, srcStride);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
154 OPNAME ## rv30_tpel8_hv_lowpass(dst+8, src+8, dstStride, srcStride);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
155 src += 8*srcStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
156 dst += 8*dstStride;\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
157 OPNAME ## rv30_tpel8_hv_lowpass(dst , src , dstStride, srcStride);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
158 OPNAME ## rv30_tpel8_hv_lowpass(dst+8, src+8, dstStride, srcStride);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
159 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
160 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
161
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
162 #define RV30_MC(OPNAME, SIZE) \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
163 static void OPNAME ## rv30_tpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
164 OPNAME ## rv30_tpel ## SIZE ## _h_lowpass(dst, src, stride, stride, 12, 6);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
165 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
166 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
167 static void OPNAME ## rv30_tpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
168 OPNAME ## rv30_tpel ## SIZE ## _h_lowpass(dst, src, stride, stride, 6, 12);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
169 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
170 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
171 static void OPNAME ## rv30_tpel ## SIZE ## _mc01_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
172 OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 12, 6);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
173 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
174 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
175 static void OPNAME ## rv30_tpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
176 OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 6, 12);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
177 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
178 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
179 static void OPNAME ## rv30_tpel ## SIZE ## _mc11_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
180 uint8_t half[SIZE*SIZE];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
181 put_rv30_tpel ## SIZE ## _h_lowpass(half, src, SIZE, stride, 12, 6);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
182 OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 12, 6);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
183 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
184 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
185 static void OPNAME ## rv30_tpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
186 uint8_t half[SIZE*SIZE];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
187 put_rv30_tpel ## SIZE ## _h_lowpass(half, src, SIZE, stride, 12, 6);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
188 OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 6, 12);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
189 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
190 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
191 static void OPNAME ## rv30_tpel ## SIZE ## _mc21_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
192 uint8_t half[SIZE*SIZE];\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
193 put_rv30_tpel ## SIZE ## _h_lowpass(half, src, SIZE, stride, 6, 12);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
194 OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 12, 6);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
195 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
196 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
197 static void OPNAME ## rv30_tpel ## SIZE ## _mc22_c(uint8_t *dst, uint8_t *src, int stride){\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
198 OPNAME ## rv30_tpel ## SIZE ## _hv_lowpass(dst, src, stride, stride);\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
199 }\
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
200 \
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
201
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
202 #define op_avg(a, b) a = (((a)+cm[((b) + 8)>>4]+1)>>1)
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
203 #define op_put(a, b) a = cm[((b) + 8)>>4]
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
204
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
205 RV30_LOWPASS(put_ , op_put)
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
206 RV30_LOWPASS(avg_ , op_avg)
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
207 RV30_MC(put_, 8)
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
208 RV30_MC(put_, 16)
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
209 RV30_MC(avg_, 8)
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
210 RV30_MC(avg_, 16)
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
211
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
212 void ff_rv30dsp_init(DSPContext* c, AVCodecContext *avctx) {
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
213 c->put_rv30_tpel_pixels_tab[0][ 0] = c->put_h264_qpel_pixels_tab[0][0];
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
214 c->put_rv30_tpel_pixels_tab[0][ 1] = put_rv30_tpel16_mc10_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
215 c->put_rv30_tpel_pixels_tab[0][ 2] = put_rv30_tpel16_mc20_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
216 c->put_rv30_tpel_pixels_tab[0][ 4] = put_rv30_tpel16_mc01_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
217 c->put_rv30_tpel_pixels_tab[0][ 5] = put_rv30_tpel16_mc11_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
218 c->put_rv30_tpel_pixels_tab[0][ 6] = put_rv30_tpel16_mc21_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
219 c->put_rv30_tpel_pixels_tab[0][ 8] = put_rv30_tpel16_mc02_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
220 c->put_rv30_tpel_pixels_tab[0][ 9] = put_rv30_tpel16_mc12_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
221 c->put_rv30_tpel_pixels_tab[0][10] = put_rv30_tpel16_mc22_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
222 c->avg_rv30_tpel_pixels_tab[0][ 0] = c->avg_h264_qpel_pixels_tab[0][0];
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
223 c->avg_rv30_tpel_pixels_tab[0][ 1] = avg_rv30_tpel16_mc10_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
224 c->avg_rv30_tpel_pixels_tab[0][ 2] = avg_rv30_tpel16_mc20_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
225 c->avg_rv30_tpel_pixels_tab[0][ 4] = avg_rv30_tpel16_mc01_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
226 c->avg_rv30_tpel_pixels_tab[0][ 5] = avg_rv30_tpel16_mc11_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
227 c->avg_rv30_tpel_pixels_tab[0][ 6] = avg_rv30_tpel16_mc21_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
228 c->avg_rv30_tpel_pixels_tab[0][ 8] = avg_rv30_tpel16_mc02_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
229 c->avg_rv30_tpel_pixels_tab[0][ 9] = avg_rv30_tpel16_mc12_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
230 c->avg_rv30_tpel_pixels_tab[0][10] = avg_rv30_tpel16_mc22_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
231 c->put_rv30_tpel_pixels_tab[1][ 0] = c->put_h264_qpel_pixels_tab[1][0];
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
232 c->put_rv30_tpel_pixels_tab[1][ 1] = put_rv30_tpel8_mc10_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
233 c->put_rv30_tpel_pixels_tab[1][ 2] = put_rv30_tpel8_mc20_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
234 c->put_rv30_tpel_pixels_tab[1][ 4] = put_rv30_tpel8_mc01_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
235 c->put_rv30_tpel_pixels_tab[1][ 5] = put_rv30_tpel8_mc11_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
236 c->put_rv30_tpel_pixels_tab[1][ 6] = put_rv30_tpel8_mc21_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
237 c->put_rv30_tpel_pixels_tab[1][ 8] = put_rv30_tpel8_mc02_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
238 c->put_rv30_tpel_pixels_tab[1][ 9] = put_rv30_tpel8_mc12_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
239 c->put_rv30_tpel_pixels_tab[1][10] = put_rv30_tpel8_mc22_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
240 c->avg_rv30_tpel_pixels_tab[1][ 0] = c->avg_h264_qpel_pixels_tab[1][0];
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
241 c->avg_rv30_tpel_pixels_tab[1][ 1] = avg_rv30_tpel8_mc10_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
242 c->avg_rv30_tpel_pixels_tab[1][ 2] = avg_rv30_tpel8_mc20_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
243 c->avg_rv30_tpel_pixels_tab[1][ 4] = avg_rv30_tpel8_mc01_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
244 c->avg_rv30_tpel_pixels_tab[1][ 5] = avg_rv30_tpel8_mc11_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
245 c->avg_rv30_tpel_pixels_tab[1][ 6] = avg_rv30_tpel8_mc21_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
246 c->avg_rv30_tpel_pixels_tab[1][ 8] = avg_rv30_tpel8_mc02_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
247 c->avg_rv30_tpel_pixels_tab[1][ 9] = avg_rv30_tpel8_mc12_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
248 c->avg_rv30_tpel_pixels_tab[1][10] = avg_rv30_tpel8_mc22_c;
7185e3bb0614 RV30 thirdpel motion compensation support
kostya
parents:
diff changeset
249 }