annotate vc1dsp.c @ 4443:54bed3ee58f3 libavcodec

simpify state and make code 2% faster reimar, dont hesitate to flame me for not sending patches and feel free to revert any or all of my changes to lzo.c if you dont like them
author michael
date Wed, 31 Jan 2007 10:34:13 +0000
parents d6f83e2f8804
children a96d905dcbaa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
1 /*
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
2 * VC-1 and WMV3 decoder - DSP functions
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
3 * Copyright (c) 2006 Konstantin Shishkov
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3665
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3665
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3665
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3665
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3665
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
15 * Lesser General Public License for more details.
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
16 *
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3665
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
20 *
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
21 */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
22
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
23 /**
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
24 * @file vc1dsp.c
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
25 * VC-1 and WMV3 decoder
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
26 *
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
27 */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
28
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
29 #include "dsputil.h"
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
30
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
31
4210
6f6fe05712e4 Fix comments
kostya
parents: 3947
diff changeset
32 /** Apply overlap transform to horizontal edge
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
33 */
4239
30b14d0f2324 Correct rounding values in overlap filtering
kostya
parents: 4211
diff changeset
34 static void vc1_v_overlap_c(uint8_t* src, int stride)
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
35 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
36 int i;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
37 int a, b, c, d;
4211
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
38 int d1, d2;
4239
30b14d0f2324 Correct rounding values in overlap filtering
kostya
parents: 4211
diff changeset
39 int rnd = 1;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
40 for(i = 0; i < 8; i++) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
41 a = src[-2*stride];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
42 b = src[-stride];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
43 c = src[0];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
44 d = src[stride];
4211
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
45 d1 = (a - d + 3 + rnd) >> 3;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
46 d2 = (a - d + b - c + 4 - rnd) >> 3;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
47
4211
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
48 src[-2*stride] = a - d1;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
49 src[-stride] = b - d2;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
50 src[0] = c + d2;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
51 src[stride] = d + d1;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
52 src++;
4239
30b14d0f2324 Correct rounding values in overlap filtering
kostya
parents: 4211
diff changeset
53 rnd = !rnd;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
54 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
55 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
56
4210
6f6fe05712e4 Fix comments
kostya
parents: 3947
diff changeset
57 /** Apply overlap transform to vertical edge
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
58 */
4239
30b14d0f2324 Correct rounding values in overlap filtering
kostya
parents: 4211
diff changeset
59 static void vc1_h_overlap_c(uint8_t* src, int stride)
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
60 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
61 int i;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
62 int a, b, c, d;
4211
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
63 int d1, d2;
4239
30b14d0f2324 Correct rounding values in overlap filtering
kostya
parents: 4211
diff changeset
64 int rnd = 1;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
65 for(i = 0; i < 8; i++) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
66 a = src[-2];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
67 b = src[-1];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
68 c = src[0];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
69 d = src[1];
4211
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
70 d1 = (a - d + 3 + rnd) >> 3;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
71 d2 = (a - d + b - c + 4 - rnd) >> 3;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
72
4211
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
73 src[-2] = a - d1;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
74 src[-1] = b - d2;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
75 src[0] = c + d2;
ff9a94fce879 Optimize overlapping
kostya
parents: 4210
diff changeset
76 src[1] = d + d1;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
77 src += stride;
4239
30b14d0f2324 Correct rounding values in overlap filtering
kostya
parents: 4211
diff changeset
78 rnd = !rnd;
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
79 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
80 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
81
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
82
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
83 /** Do inverse transform on 8x8 block
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
84 */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
85 static void vc1_inv_trans_8x8_c(DCTELEM block[64])
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
86 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
87 int i;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
88 register int t1,t2,t3,t4,t5,t6,t7,t8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
89 DCTELEM *src, *dst;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
90
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
91 src = block;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
92 dst = block;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
93 for(i = 0; i < 8; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
94 t1 = 12 * (src[0] + src[4]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
95 t2 = 12 * (src[0] - src[4]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
96 t3 = 16 * src[2] + 6 * src[6];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
97 t4 = 6 * src[2] - 16 * src[6];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
98
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
99 t5 = t1 + t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
100 t6 = t2 + t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
101 t7 = t2 - t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
102 t8 = t1 - t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
103
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
104 t1 = 16 * src[1] + 15 * src[3] + 9 * src[5] + 4 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
105 t2 = 15 * src[1] - 4 * src[3] - 16 * src[5] - 9 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
106 t3 = 9 * src[1] - 16 * src[3] + 4 * src[5] + 15 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
107 t4 = 4 * src[1] - 9 * src[3] + 15 * src[5] - 16 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
108
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
109 dst[0] = (t5 + t1 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
110 dst[1] = (t6 + t2 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
111 dst[2] = (t7 + t3 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
112 dst[3] = (t8 + t4 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
113 dst[4] = (t8 - t4 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
114 dst[5] = (t7 - t3 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
115 dst[6] = (t6 - t2 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
116 dst[7] = (t5 - t1 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
117
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
118 src += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
119 dst += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
120 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
121
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
122 src = block;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
123 dst = block;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
124 for(i = 0; i < 8; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
125 t1 = 12 * (src[ 0] + src[32]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
126 t2 = 12 * (src[ 0] - src[32]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
127 t3 = 16 * src[16] + 6 * src[48];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
128 t4 = 6 * src[16] - 16 * src[48];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
129
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
130 t5 = t1 + t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
131 t6 = t2 + t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
132 t7 = t2 - t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
133 t8 = t1 - t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
134
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
135 t1 = 16 * src[ 8] + 15 * src[24] + 9 * src[40] + 4 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
136 t2 = 15 * src[ 8] - 4 * src[24] - 16 * src[40] - 9 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
137 t3 = 9 * src[ 8] - 16 * src[24] + 4 * src[40] + 15 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
138 t4 = 4 * src[ 8] - 9 * src[24] + 15 * src[40] - 16 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
139
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
140 dst[ 0] = (t5 + t1 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
141 dst[ 8] = (t6 + t2 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
142 dst[16] = (t7 + t3 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
143 dst[24] = (t8 + t4 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
144 dst[32] = (t8 - t4 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
145 dst[40] = (t7 - t3 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
146 dst[48] = (t6 - t2 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
147 dst[56] = (t5 - t1 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
148
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
149 src++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
150 dst++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
151 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
152 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
153
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
154 /** Do inverse transform on 8x4 part of block
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
155 */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
156 static void vc1_inv_trans_8x4_c(DCTELEM block[64], int n)
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
157 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
158 int i;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
159 register int t1,t2,t3,t4,t5,t6,t7,t8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
160 DCTELEM *src, *dst;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
161 int off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
162
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
163 off = n * 32;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
164 src = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
165 dst = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
166 for(i = 0; i < 4; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
167 t1 = 12 * (src[0] + src[4]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
168 t2 = 12 * (src[0] - src[4]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
169 t3 = 16 * src[2] + 6 * src[6];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
170 t4 = 6 * src[2] - 16 * src[6];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
171
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
172 t5 = t1 + t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
173 t6 = t2 + t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
174 t7 = t2 - t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
175 t8 = t1 - t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
176
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
177 t1 = 16 * src[1] + 15 * src[3] + 9 * src[5] + 4 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
178 t2 = 15 * src[1] - 4 * src[3] - 16 * src[5] - 9 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
179 t3 = 9 * src[1] - 16 * src[3] + 4 * src[5] + 15 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
180 t4 = 4 * src[1] - 9 * src[3] + 15 * src[5] - 16 * src[7];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
181
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
182 dst[0] = (t5 + t1 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
183 dst[1] = (t6 + t2 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
184 dst[2] = (t7 + t3 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
185 dst[3] = (t8 + t4 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
186 dst[4] = (t8 - t4 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
187 dst[5] = (t7 - t3 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
188 dst[6] = (t6 - t2 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
189 dst[7] = (t5 - t1 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
190
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
191 src += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
192 dst += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
193 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
194
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
195 src = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
196 dst = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
197 for(i = 0; i < 8; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
198 t1 = 17 * (src[ 0] + src[16]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
199 t2 = 17 * (src[ 0] - src[16]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
200 t3 = 22 * src[ 8];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
201 t4 = 22 * src[24];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
202 t5 = 10 * src[ 8];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
203 t6 = 10 * src[24];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
204
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
205 dst[ 0] = (t1 + t3 + t6 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
206 dst[ 8] = (t2 - t4 + t5 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
207 dst[16] = (t2 + t4 - t5 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
208 dst[24] = (t1 - t3 - t6 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
209
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
210 src ++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
211 dst ++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
212 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
213 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
214
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
215 /** Do inverse transform on 4x8 parts of block
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
216 */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
217 static void vc1_inv_trans_4x8_c(DCTELEM block[64], int n)
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
218 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
219 int i;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
220 register int t1,t2,t3,t4,t5,t6,t7,t8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
221 DCTELEM *src, *dst;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
222 int off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
223
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
224 off = n * 4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
225 src = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
226 dst = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
227 for(i = 0; i < 8; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
228 t1 = 17 * (src[0] + src[2]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
229 t2 = 17 * (src[0] - src[2]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
230 t3 = 22 * src[1];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
231 t4 = 22 * src[3];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
232 t5 = 10 * src[1];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
233 t6 = 10 * src[3];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
234
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
235 dst[0] = (t1 + t3 + t6 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
236 dst[1] = (t2 - t4 + t5 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
237 dst[2] = (t2 + t4 - t5 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
238 dst[3] = (t1 - t3 - t6 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
239
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
240 src += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
241 dst += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
242 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
243
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
244 src = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
245 dst = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
246 for(i = 0; i < 4; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
247 t1 = 12 * (src[ 0] + src[32]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
248 t2 = 12 * (src[ 0] - src[32]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
249 t3 = 16 * src[16] + 6 * src[48];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
250 t4 = 6 * src[16] - 16 * src[48];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
251
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
252 t5 = t1 + t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
253 t6 = t2 + t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
254 t7 = t2 - t4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
255 t8 = t1 - t3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
256
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
257 t1 = 16 * src[ 8] + 15 * src[24] + 9 * src[40] + 4 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
258 t2 = 15 * src[ 8] - 4 * src[24] - 16 * src[40] - 9 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
259 t3 = 9 * src[ 8] - 16 * src[24] + 4 * src[40] + 15 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
260 t4 = 4 * src[ 8] - 9 * src[24] + 15 * src[40] - 16 * src[56];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
261
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
262 dst[ 0] = (t5 + t1 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
263 dst[ 8] = (t6 + t2 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
264 dst[16] = (t7 + t3 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
265 dst[24] = (t8 + t4 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
266 dst[32] = (t8 - t4 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
267 dst[40] = (t7 - t3 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
268 dst[48] = (t6 - t2 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
269 dst[56] = (t5 - t1 + 64 + 1) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
270
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
271 src++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
272 dst++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
273 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
274 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
275
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
276 /** Do inverse transform on 4x4 part of block
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
277 */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
278 static void vc1_inv_trans_4x4_c(DCTELEM block[64], int n)
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
279 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
280 int i;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
281 register int t1,t2,t3,t4,t5,t6;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
282 DCTELEM *src, *dst;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
283 int off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
284
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
285 off = (n&1) * 4 + (n&2) * 16;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
286 src = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
287 dst = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
288 for(i = 0; i < 4; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
289 t1 = 17 * (src[0] + src[2]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
290 t2 = 17 * (src[0] - src[2]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
291 t3 = 22 * src[1];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
292 t4 = 22 * src[3];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
293 t5 = 10 * src[1];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
294 t6 = 10 * src[3];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
295
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
296 dst[0] = (t1 + t3 + t6 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
297 dst[1] = (t2 - t4 + t5 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
298 dst[2] = (t2 + t4 - t5 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
299 dst[3] = (t1 - t3 - t6 + 4) >> 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
300
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
301 src += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
302 dst += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
303 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
304
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
305 src = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
306 dst = block + off;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
307 for(i = 0; i < 4; i++){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
308 t1 = 17 * (src[ 0] + src[16]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
309 t2 = 17 * (src[ 0] - src[16]);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
310 t3 = 22 * src[ 8];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
311 t4 = 22 * src[24];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
312 t5 = 10 * src[ 8];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
313 t6 = 10 * src[24];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
314
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
315 dst[ 0] = (t1 + t3 + t6 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
316 dst[ 8] = (t2 - t4 + t5 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
317 dst[16] = (t2 + t4 - t5 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
318 dst[24] = (t1 - t3 - t6 + 64) >> 7;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
319
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
320 src ++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
321 dst ++;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
322 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
323 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
324
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
325 /* motion compensation functions */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
326
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
327 /** Filter used to interpolate fractional pel values
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
328 */
4283
d6f83e2f8804 rename always_inline to av_always_inline and move to common.h
mru
parents: 4239
diff changeset
329 static av_always_inline int vc1_mspel_filter(const uint8_t *src, int stride, int mode, int r)
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
330 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
331 switch(mode){
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
332 case 0: //no shift
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
333 return src[0];
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
334 case 1: // 1/4 shift
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
335 return (-4*src[-stride] + 53*src[0] + 18*src[stride] - 3*src[stride*2] + 32 - r) >> 6;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
336 case 2: // 1/2 shift
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
337 return (-src[-stride] + 9*src[0] + 9*src[stride] - src[stride*2] + 8 - r) >> 4;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
338 case 3: // 3/4 shift
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
339 return (-3*src[-stride] + 18*src[0] + 53*src[stride] - 4*src[stride*2] + 32 - r) >> 6;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
340 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
341 return 0; //should not occur
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
342 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
343
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
344 /** Function used to do motion compensation with bicubic interpolation
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
345 */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
346 static void vc1_mspel_mc(uint8_t *dst, const uint8_t *src, int stride, int mode, int rnd)
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
347 {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
348 int i, j;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
349 uint8_t tmp[8*11], *tptr;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
350 int m, r;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
351
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
352 m = (mode & 3);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
353 r = rnd;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
354 src -= stride;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
355 tptr = tmp;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
356 for(j = 0; j < 11; j++) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
357 for(i = 0; i < 8; i++)
3529
b8656dfe6b1a Fix overflows in bicubic interpolation.
kostya
parents: 3526
diff changeset
358 tptr[i] = clip_uint8(vc1_mspel_filter(src + i, 1, m, r));
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
359 src += stride;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
360 tptr += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
361 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
362 r = 1 - rnd;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
363 m = (mode >> 2) & 3;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
364
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
365 tptr = tmp + 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
366 for(j = 0; j < 8; j++) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
367 for(i = 0; i < 8; i++)
3529
b8656dfe6b1a Fix overflows in bicubic interpolation.
kostya
parents: 3526
diff changeset
368 dst[i] = clip_uint8(vc1_mspel_filter(tptr + i, 8, m, r));
3526
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
369 dst += stride;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
370 tptr += 8;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
371 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
372 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
373
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
374 /* pixel functions - really are entry points to vc1_mspel_mc */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
375
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
376 /* this one is defined in dsputil.c */
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
377 void ff_put_vc1_mspel_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
378
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
379 static void ff_put_vc1_mspel_mc10_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
380 vc1_mspel_mc(dst, src, stride, 0x1, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
381 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
382
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
383 static void ff_put_vc1_mspel_mc20_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
384 vc1_mspel_mc(dst, src, stride, 0x2, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
385 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
386
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
387 static void ff_put_vc1_mspel_mc30_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
388 vc1_mspel_mc(dst, src, stride, 0x3, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
389 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
390
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
391 static void ff_put_vc1_mspel_mc01_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
392 vc1_mspel_mc(dst, src, stride, 0x4, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
393 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
394
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
395 static void ff_put_vc1_mspel_mc11_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
396 vc1_mspel_mc(dst, src, stride, 0x5, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
397 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
398
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
399 static void ff_put_vc1_mspel_mc21_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
400 vc1_mspel_mc(dst, src, stride, 0x6, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
401 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
402
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
403 static void ff_put_vc1_mspel_mc31_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
404 vc1_mspel_mc(dst, src, stride, 0x7, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
405 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
406
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
407 static void ff_put_vc1_mspel_mc02_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
408 vc1_mspel_mc(dst, src, stride, 0x8, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
409 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
410
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
411 static void ff_put_vc1_mspel_mc12_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
412 vc1_mspel_mc(dst, src, stride, 0x9, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
413 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
414
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
415 static void ff_put_vc1_mspel_mc22_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
416 vc1_mspel_mc(dst, src, stride, 0xA, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
417 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
418
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
419 static void ff_put_vc1_mspel_mc32_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
420 vc1_mspel_mc(dst, src, stride, 0xB, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
421 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
422
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
423 static void ff_put_vc1_mspel_mc03_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
424 vc1_mspel_mc(dst, src, stride, 0xC, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
425 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
426
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
427 static void ff_put_vc1_mspel_mc13_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
428 vc1_mspel_mc(dst, src, stride, 0xD, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
429 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
430
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
431 static void ff_put_vc1_mspel_mc23_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
432 vc1_mspel_mc(dst, src, stride, 0xE, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
433 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
434
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
435 static void ff_put_vc1_mspel_mc33_c(uint8_t *dst, const uint8_t *src, int stride, int rnd) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
436 vc1_mspel_mc(dst, src, stride, 0xF, rnd);
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
437 }
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
438
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
439 void ff_vc1dsp_init(DSPContext* dsp, AVCodecContext *avctx) {
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
440 dsp->vc1_inv_trans_8x8 = vc1_inv_trans_8x8_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
441 dsp->vc1_inv_trans_4x8 = vc1_inv_trans_4x8_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
442 dsp->vc1_inv_trans_8x4 = vc1_inv_trans_8x4_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
443 dsp->vc1_inv_trans_4x4 = vc1_inv_trans_4x4_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
444 dsp->vc1_h_overlap = vc1_h_overlap_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
445 dsp->vc1_v_overlap = vc1_v_overlap_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
446
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
447 dsp->put_vc1_mspel_pixels_tab[ 0] = ff_put_vc1_mspel_mc00_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
448 dsp->put_vc1_mspel_pixels_tab[ 1] = ff_put_vc1_mspel_mc10_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
449 dsp->put_vc1_mspel_pixels_tab[ 2] = ff_put_vc1_mspel_mc20_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
450 dsp->put_vc1_mspel_pixels_tab[ 3] = ff_put_vc1_mspel_mc30_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
451 dsp->put_vc1_mspel_pixels_tab[ 4] = ff_put_vc1_mspel_mc01_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
452 dsp->put_vc1_mspel_pixels_tab[ 5] = ff_put_vc1_mspel_mc11_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
453 dsp->put_vc1_mspel_pixels_tab[ 6] = ff_put_vc1_mspel_mc21_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
454 dsp->put_vc1_mspel_pixels_tab[ 7] = ff_put_vc1_mspel_mc31_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
455 dsp->put_vc1_mspel_pixels_tab[ 8] = ff_put_vc1_mspel_mc02_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
456 dsp->put_vc1_mspel_pixels_tab[ 9] = ff_put_vc1_mspel_mc12_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
457 dsp->put_vc1_mspel_pixels_tab[10] = ff_put_vc1_mspel_mc22_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
458 dsp->put_vc1_mspel_pixels_tab[11] = ff_put_vc1_mspel_mc32_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
459 dsp->put_vc1_mspel_pixels_tab[12] = ff_put_vc1_mspel_mc03_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
460 dsp->put_vc1_mspel_pixels_tab[13] = ff_put_vc1_mspel_mc13_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
461 dsp->put_vc1_mspel_pixels_tab[14] = ff_put_vc1_mspel_mc23_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
462 dsp->put_vc1_mspel_pixels_tab[15] = ff_put_vc1_mspel_mc33_c;
7dc8e4a12105 New functions in DSPContext for VC-1 decoding
kostya
parents:
diff changeset
463 }