annotate vorbis.c @ 9473:e38284cd69dc libavcodec

Use memcpy instead of the very inefficient bytecopy where both are correct (i.e. no overlap of src and dst is possible).
author reimar
date Fri, 17 Apr 2009 17:20:48 +0000
parents 0dce4fe6e6f3
children ff96ee73b08b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
1 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8306
diff changeset
2 * @file libavcodec/vorbis.c
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
3 * Common code for Vorbis I encoder and decoder
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
4 * @author Denes Balatoni ( dbalatoni programozo hu )
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
5
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
6 * This file is part of FFmpeg.
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
7 *
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
12 *
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
16 * Lesser General Public License for more details.
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
17 *
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
21 */
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
22
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
23 #undef V_DEBUG
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
24 //#define V_DEBUG
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
25
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
26 #define ALT_BITSTREAM_READER_LE
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
27 #include "avcodec.h"
9428
0dce4fe6e6f3 Rename bitstream.h to get_bits.h.
stefano
parents: 8718
diff changeset
28 #include "get_bits.h"
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
29
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
30 #include "vorbis.h"
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
31
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
32
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
33 /* Helper functions */
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
34
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
35 unsigned int ff_vorbis_nth_root(unsigned int x, unsigned int n) { // x^(1/n)
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
36 unsigned int ret=0, i, j;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
37
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
38 do {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
39 ++ret;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
40 for(i=0,j=ret;i<n-1;i++) j*=ret;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
41 } while (j<=x);
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
42
6750
c93570aeb3eb Remove unnecessary parentheses from return calls.
diego
parents: 6340
diff changeset
43 return ret - 1;
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
44 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
45
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
46 // Generate vlc codes from vorbis huffman code lengths
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
47
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
48 int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, uint_fast32_t num) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
49 uint_fast32_t exit_at_level[33]={404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
50 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
51
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
52 uint_fast8_t i,j;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
53 uint_fast32_t code,p;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
54
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
55 #ifdef V_DEBUG
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
56 GetBitContext gb;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
57 #endif
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
58
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
59 for(p=0;(bits[p]==0) && (p<num);++p);
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
60 if (p==num) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
61 // av_log(vc->avccontext, AV_LOG_INFO, "An empty codebook. Heh?! \n");
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
62 return 0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
63 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
64
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
65 codes[p]=0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
66 for(i=0;i<bits[p];++i) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
67 exit_at_level[i+1]=1<<i;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
68 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
69
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
70 #ifdef V_DEBUG
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
71 av_log(NULL, AV_LOG_INFO, " %d. of %d code len %d code %d - ", p, num, bits[p], codes[p]);
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
72 init_get_bits(&gb, (uint_fast8_t *)&codes[p], bits[p]);
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
73 for(i=0;i<bits[p];++i) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
74 av_log(NULL, AV_LOG_INFO, "%s", get_bits1(&gb) ? "1" : "0");
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
75 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
76 av_log(NULL, AV_LOG_INFO, "\n");
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
77 #endif
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
78
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
79 ++p;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
80
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
81 for(;p<num;++p) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
82 if (bits[p]==0) continue;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
83 // find corresponding exit(node which the tree can grow further from)
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
84 for(i=bits[p];i>0;--i) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
85 if (exit_at_level[i]) break;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
86 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
87 if (!i) return 1; // overspecified tree
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
88 code=exit_at_level[i];
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
89 exit_at_level[i]=0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
90 // construct code (append 0s to end) and introduce new exits
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
91 for(j=i+1;j<=bits[p];++j) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
92 exit_at_level[j]=code+(1<<(j-1));
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
93 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
94 codes[p]=code;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
95
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
96 #ifdef V_DEBUG
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
97 av_log(NULL, AV_LOG_INFO, " %d. code len %d code %d - ", p, bits[p], codes[p]);
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
98 init_get_bits(&gb, (uint_fast8_t *)&codes[p], bits[p]);
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
99 for(i=0;i<bits[p];++i) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
100 av_log(NULL, AV_LOG_INFO, "%s", get_bits1(&gb) ? "1" : "0");
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
101 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
102 av_log(NULL, AV_LOG_INFO, "\n");
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
103 #endif
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
104
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
105 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
106
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
107 //no exits should be left (underspecified tree - ie. unused valid vlcs - not allowed by SPEC)
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
108 for (p=1; p<33; p++)
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
109 if (exit_at_level[p]) return 1;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
110
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
111 return 0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
112 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
113
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 6750
diff changeset
114 void ff_vorbis_ready_floor1_list(vorbis_floor1_entry * list, int values) {
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
115 int i;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
116 list[0].sort = 0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
117 list[1].sort = 1;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
118 for (i = 2; i < values; i++) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
119 int j;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
120 list[i].low = 0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
121 list[i].high = 1;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
122 list[i].sort = i;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
123 for (j = 2; j < i; j++) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
124 int tmp = list[j].x;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
125 if (tmp < list[i].x) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
126 if (tmp > list[list[i].low].x) list[i].low = j;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
127 } else {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
128 if (tmp < list[list[i].high].x) list[i].high = j;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
129 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
130 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
131 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
132 for (i = 0; i < values - 1; i++) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
133 int j;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
134 for (j = i + 1; j < values; j++) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
135 if (list[list[i].sort].x > list[list[j].sort].x) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
136 int tmp = list[i].sort;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
137 list[i].sort = list[j].sort;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
138 list[j].sort = tmp;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
139 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
140 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
141 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
142 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
143
6340
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
144 static void render_line(int x0, int y0, int x1, int y1, float * buf) {
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
145 int dy = y1 - y0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
146 int adx = x1 - x0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
147 int base = dy / adx;
6340
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
148 int ady = FFABS(dy) - FFABS(base) * adx;
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
149 int x = x0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
150 int y = y0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
151 int err = 0;
6340
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
152 int sy = dy<0 ? -1 : 1;
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
153 buf[x] = ff_vorbis_floor1_inverse_db_table[y];
6340
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
154 while (++x < x1) {
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
155 err += ady;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
156 if (err >= adx) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
157 err -= adx;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
158 y += sy;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
159 }
6340
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
160 y += base;
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
161 buf[x] = ff_vorbis_floor1_inverse_db_table[y];
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
162 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
163 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
164
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 6750
diff changeset
165 void ff_vorbis_floor1_render_list(vorbis_floor1_entry * list, int values, uint_fast16_t * y_list, int * flag, int multiplier, float * out, int samples) {
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
166 int lx, ly, i;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
167 lx = 0;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
168 ly = y_list[0] * multiplier;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
169 for (i = 1; i < values; i++) {
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
170 int pos = list[i].sort;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
171 if (flag[pos]) {
6340
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
172 int x1 = list[pos].x;
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
173 int y1 = y_list[pos] * multiplier;
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
174 if (lx < samples)
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
175 render_line(lx, ly, FFMIN(x1,samples), y1, out);
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
176 lx = x1;
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
177 ly = y1;
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
178 }
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
179 if (lx >= samples) break;
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
180 }
6340
575e0a847f0c 30% faster ff_vorbis_floor1_render_list, 3% faster overall
lorenm
parents: 5215
diff changeset
181 if (lx < samples) render_line(lx, ly, samples, ly, out);
4971
cb647e7b4b8b loosen vorbis_enc.c dependencies by spliting vorbis.c
aurel
parents:
diff changeset
182 }