annotate snow.h @ 7351:1502ba3beb72 libavcodec

The codebook generator algorithm involves picking three different codebook centroids ("high utility", "low utility" and "closest to the low utility one"). This change avoid the corner case of choosing two times the same centroid.
author vitor
date Wed, 23 Jul 2008 03:54:31 +0000
parents 1d83e9c34641
children c4a4495715dd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
1 /*
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
2 * Copyright (C) 2004 Michael Niedermayer <michaelni@gmx.at>
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
3 * Copyright (C) 2006 Robert Edele <yartrebo@earthlink.net>
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
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: 3582
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3582
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
15 * Lesser General Public License for more details.
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
16 *
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
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: 3582
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
20 */
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
21
5830
1d83e9c34641 Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 5589
diff changeset
22 #ifndef FFMPEG_SNOW_H
1d83e9c34641 Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 5589
diff changeset
23 #define FFMPEG_SNOW_H
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
24
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
25 #include "dsputil.h"
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
26
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
27 #define MID_STATE 128
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
28
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
29 #define MAX_DECOMPOSITIONS 8
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
30 #define MAX_PLANES 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
31 #define QSHIFT 5
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
32 #define QROOT (1<<QSHIFT)
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
33 #define LOSSLESS_QLOG -128
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
34 #define FRAC_BITS 4
3314
aea2230e6033 Snow multiple reference frames
lorenm
parents: 3223
diff changeset
35 #define MAX_REF_FRAMES 8
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
36
3206
c1add9fe5c65 Snow mmx + sse2 part 2
corey
parents: 3198
diff changeset
37 #define LOG2_OBMC_MAX 8
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
38 #define OBMC_MAX (1<<(LOG2_OBMC_MAX))
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
39
3326
fb245e797c5d Snow: cosmetics
lorenm
parents: 3323
diff changeset
40 #define DWT_97 0
fb245e797c5d Snow: cosmetics
lorenm
parents: 3323
diff changeset
41 #define DWT_53 1
fb245e797c5d Snow: cosmetics
lorenm
parents: 3323
diff changeset
42
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
43 /** Used to minimize the amount of memory used in order to optimize cache performance. **/
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
44 struct slice_buffer_s {
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
45 IDWTELEM * * line; ///< For use by idwt and predict_slices.
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
46 IDWTELEM * * data_stack; ///< Used for internal purposes.
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
47 int data_stack_top;
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
48 int line_count;
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
49 int line_width;
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
50 int data_count;
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
51 IDWTELEM * base_buffer; ///< Buffer that this structure is caching.
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
52 };
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
53
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
54 #define liftS lift
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
55 #if 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
56 #define W_AM 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
57 #define W_AO 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
58 #define W_AS 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
59
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
60 #undef liftS
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
61 #define W_BM 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
62 #define W_BO 8
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
63 #define W_BS 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
65 #define W_CM 1
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
66 #define W_CO 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
67 #define W_CS 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
68
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
69 #define W_DM 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
70 #define W_DO 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
71 #define W_DS 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
72 #elif 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
73 #define W_AM 55
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
74 #define W_AO 16
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
75 #define W_AS 5
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
76
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
77 #define W_BM 3
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
78 #define W_BO 32
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
79 #define W_BS 6
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
80
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
81 #define W_CM 127
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
82 #define W_CO 64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
83 #define W_CS 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
84
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
85 #define W_DM 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
86 #define W_DO 8
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
87 #define W_DS 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
88 #elif 0
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
89 #define W_AM 97
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
90 #define W_AO 32
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
91 #define W_AS 6
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
92
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
93 #define W_BM 63
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
94 #define W_BO 512
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
95 #define W_BS 10
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
96
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
97 #define W_CM 13
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
98 #define W_CO 8
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
99 #define W_CS 4
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
100
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
101 #define W_DM 15
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
102 #define W_DO 16
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
103 #define W_DS 5
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
104
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
105 #else
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
106
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
107 #define W_AM 203
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
108 #define W_AO 64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
109 #define W_AS 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
110
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
111 #define W_BM 217
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
112 #define W_BO 2048
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
113 #define W_BS 12
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
114
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
115 #define W_CM 113
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
116 #define W_CO 64
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
117 #define W_CS 7
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
118
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
119 #define W_DM 227
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
120 #define W_DO 128
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
121 #define W_DS 9
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
122 #endif
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
123
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
124 extern void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
125 extern void ff_snow_horizontal_compose97i(IDWTELEM *b, int width);
4436
d3e389536b0a Add the const specifier as needed to reduce the number of warnings.
takis
parents: 4283
diff changeset
126 extern void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
3198
6b9f0c4fbdbe First part of a series of speed-enchancing patches.
gpoirier
parents:
diff changeset
127
3582
6310389a9688 Compile fix (for GCC<3.3) when encoders are disabled
gpoirier
parents: 3326
diff changeset
128 #ifdef CONFIG_SNOW_ENCODER
4197
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
129 int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
130 int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
3582
6310389a9688 Compile fix (for GCC<3.3) when encoders are disabled
gpoirier
parents: 3326
diff changeset
131 #else
6310389a9688 Compile fix (for GCC<3.3) when encoders are disabled
gpoirier
parents: 3326
diff changeset
132 static int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0);}
6310389a9688 Compile fix (for GCC<3.3) when encoders are disabled
gpoirier
parents: 3326
diff changeset
133 static int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0);}
6310389a9688 Compile fix (for GCC<3.3) when encoders are disabled
gpoirier
parents: 3326
diff changeset
134 #endif
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
135
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
136 /* C bits used by mmx/sse2/altivec */
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
137
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
138 static av_always_inline void snow_interleave_line_header(int * i, int width, IDWTELEM * low, IDWTELEM * high){
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
139 (*i) = (width) - 2;
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
140
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
141 if (width & 1){
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
142 low[(*i)+1] = low[((*i)+1)>>1];
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
143 (*i)--;
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
144 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
145 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
146
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
147 static av_always_inline void snow_interleave_line_footer(int * i, IDWTELEM * low, IDWTELEM * high){
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
148 for (; (*i)>=0; (*i)-=2){
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
149 low[(*i)+1] = high[(*i)>>1];
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
150 low[*i] = low[(*i)>>1];
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
151 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
152 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
153
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
154 static av_always_inline void snow_horizontal_compose_lift_lead_out(int i, IDWTELEM * dst, IDWTELEM * src, IDWTELEM * ref, int width, int w, int lift_high, int mul, int add, int shift){
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
155 for(; i<w; i++){
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
156 dst[i] = src[i] - ((mul * (ref[i] + ref[i + 1]) + add) >> shift);
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
157 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
158
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
159 if((width^lift_high)&1){
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
160 dst[w] = src[w] - ((mul * 2 * ref[w] + add) >> shift);
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
161 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
162 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
163
5587
3ae03eacbe9f use 16bit IDWT (a SIMD implementation of it should be >2x faster then with
michael
parents: 5565
diff changeset
164 static av_always_inline void snow_horizontal_compose_liftS_lead_out(int i, IDWTELEM * dst, IDWTELEM * src, IDWTELEM * ref, int width, int w){
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
165 for(; i<w; i++){
5565
93082c591c8b Change rounding of the horizontal DWT to match the vertical one.
michael
parents: 5552
diff changeset
166 dst[i] = src[i] + ((ref[i] + ref[(i+1)]+W_BO + 4 * src[i]) >> W_BS);
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
167 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
168
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
169 if(width&1){
5565
93082c591c8b Change rounding of the horizontal DWT to match the vertical one.
michael
parents: 5552
diff changeset
170 dst[w] = src[w] + ((2 * ref[w] + W_BO + 4 * src[w]) >> W_BS);
3223
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
171 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
172 }
8f048c3295ff altivec support for snow
lu_zero
parents: 3206
diff changeset
173
5830
1d83e9c34641 Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 5589
diff changeset
174 #endif /* FFMPEG_SNOW_H */