Mercurial > libavcodec.hg
annotate vorbis_enc.c @ 3814:464eca766731 libavcodec
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
floor header syntax
author | ods15 |
---|---|
date | Mon, 02 Oct 2006 05:55:24 +0000 |
parents | 95b70f8bc29e |
children | 3fa081422f78 |
rev | line source |
---|---|
3808 | 1 /* |
2 * copyright (c) 2006 Oded Shimon <ods15@ods15.dyndns.org> | |
3 * | |
4 * This library is free software; you can redistribute it and/or | |
5 * modify it under the terms of the GNU Lesser General Public | |
6 * License as published by the Free Software Foundation; either | |
7 * version 2 of the License, or (at your option) any later version. | |
8 * | |
9 * This library is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 * Lesser General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU Lesser General Public | |
15 * License along with this library; if not, write to the Free Software | |
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
17 */ | |
18 | |
19 /** | |
20 * @file vorbis_enc.c | |
21 * Native Vorbis encoder. | |
22 * @author Oded Shimon <ods15@ods15.dyndns.org> | |
23 */ | |
24 | |
25 #include "avcodec.h" | |
26 | |
27 #undef NDEBUG | |
28 #include <assert.h> | |
29 | |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
30 #define ALT_BITSTREAM_READER_LE |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
31 #include "bitstream.h" |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
32 |
3808 | 33 #define VORBIS_FRAME_SIZE 64 |
34 | |
35 #define BUFFER_SIZE (1024*64) | |
36 | |
37 typedef struct { | |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
38 int len; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
39 uint32_t codeword; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
40 } entry_t; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
41 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
42 typedef struct { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
43 int nentries; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
44 entry_t * entries; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
45 int ndimentions; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
46 float min; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
47 float delta; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
48 int seq_p; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
49 int lookup; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
50 //float * dimentions; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
51 int * quantlist; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
52 } codebook_t; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
53 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
54 typedef struct { |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
55 int dim; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
56 int subclass; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
57 int masterbook; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
58 int * books; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
59 } floor_class_t; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
60 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
61 typedef struct { |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
62 int partitions; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
63 int * partition_to_class; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
64 int nclasses; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
65 floor_class_t * classes; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
66 int multiplier; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
67 int rangebits; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
68 int values; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
69 struct { int x; } * list; |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
70 } floor_t; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
71 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
72 typedef struct { |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
73 } residue_t; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
74 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
75 typedef struct { |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
76 } mapping_t; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
77 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
78 typedef struct { |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
79 int channels; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
80 int sample_rate; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
81 int blocksize[2]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
82 |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
83 int ncodebooks; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
84 codebook_t * codebooks; |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
85 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
86 int nfloors; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
87 floor_t * floors; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
88 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
89 int nresidues; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
90 residue_t * residues; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
91 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
92 int nmappings; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
93 mapping_t * mappings; |
3808 | 94 } venc_context_t; |
95 | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
96 static inline int ilog(unsigned int a) { |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
97 int i; |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
98 for (i = 0; a >> i; i++); |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
99 return i; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
100 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
101 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
102 static void put_float(PutBitContext * pb, float f) { |
3812
52ff3a5d161e
Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3811
diff
changeset
|
103 int exp, mant; |
52ff3a5d161e
Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3811
diff
changeset
|
104 uint32_t res = 0; |
52ff3a5d161e
Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3811
diff
changeset
|
105 mant = (int)ldexp(frexp(f, &exp), 20); |
52ff3a5d161e
Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3811
diff
changeset
|
106 exp += 788 - 20; |
52ff3a5d161e
Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3811
diff
changeset
|
107 if (mant < 0) { res |= (1 << 31); mant = -mant; } |
52ff3a5d161e
Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3811
diff
changeset
|
108 res |= mant | (exp << 21); |
52ff3a5d161e
Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3811
diff
changeset
|
109 put_bits(pb, 32, res); |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
110 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
111 |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
112 static void put_codebook_header(PutBitContext * pb, codebook_t * cb) { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
113 int i; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
114 int ordered = 0; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
115 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
116 put_bits(pb, 24, 0x564342); //magic |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
117 put_bits(pb, 16, cb->ndimentions); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
118 put_bits(pb, 24, cb->nentries); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
119 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
120 for (i = 1; i < cb->nentries; i++) if (cb->entries[i].len < cb->entries[i-1].len) break; |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
121 if (i == cb->nentries) ordered = 1; |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
122 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
123 put_bits(pb, 1, ordered); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
124 if (ordered) { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
125 int len = cb->entries[0].len; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
126 put_bits(pb, 5, len); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
127 i = 0; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
128 while (i < cb->nentries) { |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
129 int j; |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
130 for (j = 0; j+i < cb->nentries; j++) if (cb->entries[j+i].len != len) break; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
131 put_bits(pb, 5, j); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
132 i += j; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
133 len++; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
134 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
135 } else { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
136 int sparse = 0; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
137 for (i = 0; i < cb->nentries; i++) if (!cb->entries[i].len) break; |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
138 if (i != cb->nentries) sparse = 1; |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
139 put_bits(pb, 1, sparse); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
140 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
141 for (i = 0; i < cb->nentries; i++) { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
142 if (sparse) put_bits(pb, 1, !!cb->entries[i].len); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
143 if (cb->entries[i].len) put_bits(pb, 5, cb->entries[i].len); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
144 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
145 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
146 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
147 put_bits(pb, 4, cb->lookup); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
148 if (cb->lookup) { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
149 int tmp, bits = ilog(cb->quantlist[0]); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
150 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
151 if (cb->lookup == 1) { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
152 for (tmp = 0; ; tmp++) { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
153 int n = 1; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
154 for (i = 0; i < cb->ndimentions; i++) n *= tmp; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
155 if (n > cb->nentries) break; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
156 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
157 tmp--; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
158 } else tmp = cb->ndimentions * cb->nentries; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
159 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
160 for (i = 1; i < tmp; i++) bits = FFMIN(bits, ilog(cb->quantlist[i])); |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
161 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
162 put_float(pb, cb->min); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
163 put_float(pb, cb->delta); |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
164 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
165 put_bits(pb, 4, bits - 1); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
166 put_bits(pb, 1, cb->seq_p); |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
167 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
168 for (i = 0; i < tmp; i++) put_bits(pb, bits, cb->quantlist[i]); |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
169 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
170 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
171 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
172 static void put_floor_header(PutBitContext * pb, floor_t * fc) { |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
173 int i; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
174 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
175 put_bits(pb, 16, 1); // type, only floor1 is supported |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
176 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
177 put_bits(pb, 5, fc->partitions); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
178 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
179 for (i = 0; i < fc->partitions; i++) put_bits(pb, 4, fc->partition_to_class[i]); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
180 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
181 for (i = 0; i < fc->nclasses; i++) { |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
182 int j, books; |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
183 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
184 put_bits(pb, 3, fc->classes[i].dim - 1); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
185 put_bits(pb, 2, fc->classes[i].subclass); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
186 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
187 if (fc->classes[i].subclass) put_bits(pb, 8, fc->classes[i].masterbook); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
188 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
189 books = (1 << fc->classes[i].subclass); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
190 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
191 for (j = 0; j < books; j++) put_bits(pb, 8, fc->classes[i].books[j] + 1); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
192 } |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
193 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
194 put_bits(pb, 2, fc->multiplier - 1); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
195 put_bits(pb, 4, fc->rangebits); |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
196 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
197 for (i = 2; i < fc->values; i++) put_bits(pb, fc->rangebits, fc->list[i].x); |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
198 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
199 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
200 static void put_residue_header(PutBitContext * pb, residue_t * rc) { |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
201 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
202 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
203 static int put_main_header(venc_context_t * venc, uint8_t ** out) { |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
204 int i; |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
205 PutBitContext pb; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
206 uint8_t buffer[50000] = {0}, * p = buffer; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
207 int buffer_len = sizeof buffer; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
208 int len, hlens[3]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
209 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
210 // identification header |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
211 init_put_bits(&pb, p, buffer_len); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
212 put_bits(&pb, 8, 1); //magic |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
213 for (i = 0; "vorbis"[i]; i++) put_bits(&pb, 8, "vorbis"[i]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
214 put_bits(&pb, 32, 0); // version |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
215 put_bits(&pb, 8, venc->channels); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
216 put_bits(&pb, 32, venc->sample_rate); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
217 put_bits(&pb, 32, 0); // bitrate |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
218 put_bits(&pb, 32, 0); // bitrate |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
219 put_bits(&pb, 32, 0); // bitrate |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
220 put_bits(&pb, 4, venc->blocksize[0]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
221 put_bits(&pb, 4, venc->blocksize[1]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
222 put_bits(&pb, 1, 1); // framing |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
223 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
224 flush_put_bits(&pb); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
225 hlens[0] = (put_bits_count(&pb) + 7) / 8; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
226 buffer_len -= hlens[0]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
227 p += hlens[0]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
228 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
229 // comment header |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
230 init_put_bits(&pb, p, buffer_len); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
231 put_bits(&pb, 8, 3); //magic |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
232 for (i = 0; "vorbis"[i]; i++) put_bits(&pb, 8, "vorbis"[i]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
233 put_bits(&pb, 32, 0); // vendor length TODO |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
234 put_bits(&pb, 32, 0); // amount of comments |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
235 put_bits(&pb, 1, 1); // framing |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
236 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
237 flush_put_bits(&pb); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
238 hlens[1] = (put_bits_count(&pb) + 7) / 8; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
239 buffer_len -= hlens[1]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
240 p += hlens[1]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
241 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
242 // setup header |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
243 init_put_bits(&pb, p, buffer_len); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
244 put_bits(&pb, 8, 5); //magic |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
245 for (i = 0; "vorbis"[i]; i++) put_bits(&pb, 8, "vorbis"[i]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
246 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
247 // codebooks |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
248 put_bits(&pb, 8, venc->ncodebooks - 1); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
249 for (i = 0; i < venc->ncodebooks; i++) put_codebook_header(&pb, &venc->codebooks[0]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
250 |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
251 // time domain, reserved, zero |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
252 put_bits(&pb, 6, 0); |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
253 put_bits(&pb, 16, 0); |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
254 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
255 // floors |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
256 put_bits(&pb, 6, venc->nfloors - 1); |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
257 for (i = 0; i < venc->nfloors; i++) put_floor_header(&pb, &venc->floors[0]); |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
258 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
259 // residues |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
260 put_bits(&pb, 6, venc->nresidues - 1); |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
261 for (i = 0; i < venc->nresidues; i++) put_residue_header(&pb, &venc->residues[0]); |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
262 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
263 // mappings |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
264 put_bits(&pb, 6, venc->nmappings - 1); |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
265 for (i = 0; i < venc->nmappings; i++) { |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
266 } |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
267 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
268 flush_put_bits(&pb); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
269 hlens[2] = (put_bits_count(&pb) + 7) / 8; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
270 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
271 len = hlens[0] + hlens[1] + hlens[2]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
272 p = *out = av_mallocz(64 + len + len/255); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
273 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
274 *p++ = 2; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
275 p += av_xiphlacing(p, hlens[0]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
276 p += av_xiphlacing(p, hlens[1]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
277 buffer_len = 0; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
278 for (i = 0; i < 3; i++) { |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
279 memcpy(p, buffer + buffer_len, hlens[i]); |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
280 p += hlens[i]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
281 buffer_len += hlens[i]; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
282 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
283 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
284 return p - *out; |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
285 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
286 |
3809
500d86b68542
Original Commit: r3 | ods15 | 2006-09-16 11:49:07 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3808
diff
changeset
|
287 static int vorbis_encode_init(AVCodecContext * avccontext) |
500d86b68542
Original Commit: r3 | ods15 | 2006-09-16 11:49:07 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3808
diff
changeset
|
288 { |
3808 | 289 venc_context_t * venc = avccontext->priv_data; |
290 | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
291 venc->channels = avccontext->channels; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
292 venc->sample_rate = avccontext->sample_rate; |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
293 |
3808 | 294 //if (avccontext->flags & CODEC_FLAG_QSCALE) avccontext->global_quality / (float)FF_QP2LAMBDA); else avccontext->bit_rate; |
295 //if(avccontext->cutoff > 0) cfreq = avccontext->cutoff / 1000.0; | |
296 | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
297 avccontext->extradata_size = put_main_header(venc, (uint8_t**)&avccontext->extradata); |
3808 | 298 |
3809
500d86b68542
Original Commit: r3 | ods15 | 2006-09-16 11:49:07 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3808
diff
changeset
|
299 avccontext->frame_size = VORBIS_FRAME_SIZE; |
3808 | 300 |
301 avccontext->coded_frame = avcodec_alloc_frame(); | |
302 avccontext->coded_frame->key_frame = 1; | |
303 | |
304 return 0; | |
305 } | |
306 | |
307 | |
308 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) | |
309 { | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
310 #if 0 |
3808 | 311 venc_context_t * venc = avccontext->priv_data; |
312 signed short * audio = data; | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
313 int samples = data ? VORBIS_FRAME_SIZE : 0; |
3808 | 314 |
315 avccontext->coded_frame->pts = av_rescale_q(op2->granulepos, (AVRational){1, avccontext->sample_rate}, avccontext->time_base); | |
316 memcpy(packets, compressed_frame, l); | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
317 #endif |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
318 return 0; |
3808 | 319 } |
320 | |
321 | |
322 static int vorbis_encode_close(AVCodecContext * avccontext) | |
323 { | |
324 venc_context_t * venc = avccontext->priv_data; | |
325 | |
326 av_freep(&avccontext->coded_frame); | |
327 av_freep(&avccontext->extradata); | |
328 | |
329 return 0 ; | |
330 } | |
331 | |
332 AVCodec oggvorbis_encoder = { | |
333 "vorbis", | |
334 CODEC_TYPE_AUDIO, | |
335 CODEC_ID_VORBIS, | |
336 sizeof(venc_context_t), | |
337 vorbis_encode_init, | |
338 vorbis_encode_frame, | |
339 vorbis_encode_close, | |
340 .capabilities= CODEC_CAP_DELAY, | |
341 }; |