OLD | NEW |
1 /** | 1 /** |
2 * @file | 2 * @file |
3 * Common code for Vorbis I encoder and decoder | 3 * Common code for Vorbis I encoder and decoder |
4 * @author Denes Balatoni ( dbalatoni programozo hu ) | 4 * @author Denes Balatoni ( dbalatoni programozo hu ) |
5 * | 5 * |
6 * This file is part of FFmpeg. | 6 * This file is part of FFmpeg. |
7 * | 7 * |
8 * FFmpeg is free software; you can redistribute it and/or | 8 * FFmpeg is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Lesser General Public | 9 * modify it under the terms of the GNU Lesser General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 for (j = i + 1; j < values; j++) { | 143 for (j = i + 1; j < values; j++) { |
144 if (list[list[i].sort].x > list[list[j].sort].x) { | 144 if (list[list[i].sort].x > list[list[j].sort].x) { |
145 int tmp = list[i].sort; | 145 int tmp = list[i].sort; |
146 list[i].sort = list[j].sort; | 146 list[i].sort = list[j].sort; |
147 list[j].sort = tmp; | 147 list[j].sort = tmp; |
148 } | 148 } |
149 } | 149 } |
150 } | 150 } |
151 } | 151 } |
152 | 152 |
153 static inline void render_line_unrolled(intptr_t x, intptr_t y, int x1, | 153 static inline void render_line_unrolled(intptr_t x, unsigned char y, int x1, |
154 intptr_t sy, int ady, int adx, | 154 intptr_t sy, int ady, int adx, |
155 float *buf) | 155 float *buf) |
156 { | 156 { |
157 int err = -adx; | 157 int err = -adx; |
158 x -= x1 - 1; | 158 x -= x1 - 1; |
159 buf += x1 - 1; | 159 buf += x1 - 1; |
160 while (++x < 0) { | 160 while (++x < 0) { |
161 err += ady; | 161 err += ady; |
162 if (err >= 0) { | 162 if (err >= 0) { |
163 err += ady - adx; | 163 err += ady - adx; |
(...skipping 14 matching lines...) Expand all Loading... |
178 int dy = y1 - y0; | 178 int dy = y1 - y0; |
179 int adx = x1 - x0; | 179 int adx = x1 - x0; |
180 int ady = FFABS(dy); | 180 int ady = FFABS(dy); |
181 int sy = dy < 0 ? -1 : 1; | 181 int sy = dy < 0 ? -1 : 1; |
182 buf[x0] = ff_vorbis_floor1_inverse_db_table[y0]; | 182 buf[x0] = ff_vorbis_floor1_inverse_db_table[y0]; |
183 if (ady*2 <= adx) { // optimized common case | 183 if (ady*2 <= adx) { // optimized common case |
184 render_line_unrolled(x0, y0, x1, sy, ady, adx, buf); | 184 render_line_unrolled(x0, y0, x1, sy, ady, adx, buf); |
185 } else { | 185 } else { |
186 int base = dy / adx; | 186 int base = dy / adx; |
187 int x = x0; | 187 int x = x0; |
188 int y = y0; | 188 unsigned char y = y0; |
189 int err = -adx; | 189 int err = -adx; |
190 ady -= FFABS(base) * adx; | 190 ady -= FFABS(base) * adx; |
191 while (++x < x1) { | 191 while (++x < x1) { |
192 y += base; | 192 y += base; |
193 err += ady; | 193 err += ady; |
194 if (err >= 0) { | 194 if (err >= 0) { |
195 err -= adx; | 195 err -= adx; |
196 y += sy; | 196 y += sy; |
197 } | 197 } |
198 buf[x] = ff_vorbis_floor1_inverse_db_table[y]; | 198 buf[x] = ff_vorbis_floor1_inverse_db_table[y]; |
(...skipping 17 matching lines...) Expand all Loading... |
216 render_line(lx, ly, FFMIN(x1,samples), y1, out); | 216 render_line(lx, ly, FFMIN(x1,samples), y1, out); |
217 lx = x1; | 217 lx = x1; |
218 ly = y1; | 218 ly = y1; |
219 } | 219 } |
220 if (lx >= samples) | 220 if (lx >= samples) |
221 break; | 221 break; |
222 } | 222 } |
223 if (lx < samples) | 223 if (lx < samples) |
224 render_line(lx, ly, samples, ly, out); | 224 render_line(lx, ly, samples, ly, out); |
225 } | 225 } |
OLD | NEW |