Mercurial > libavcodec.hg
annotate vorbis_enc.c @ 3819:92063e9b6728 libavcodec
Original Commit: r13 | ods15 | 2006-09-22 09:29:38 +0300 (Fri, 22 Sep 2006) | 2 lines
better comment
author | ods15 |
---|---|
date | Mon, 02 Oct 2006 05:55:35 +0000 |
parents | 6a737f2d852e |
children | 3cfdf99da951 |
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; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
40 } cb_entry_t; |
3810
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; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
44 cb_entry_t * entries; |
3810
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 int * quantlist; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
51 float * dimentions; |
3810
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 { |
3815
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
73 int type; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
74 int begin; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
75 int end; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
76 int partition_size; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
77 int classifications; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
78 int classbook; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
79 int (*books)[8]; |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
80 } 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
|
81 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
82 typedef struct { |
3816
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
83 int submaps; |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
84 int * mux; |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
85 int * floor; |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
86 int * residue; |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
87 } 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
|
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 typedef struct { |
3817
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
90 int blockflag; |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
91 int mapping; |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
92 } vorbis_mode_t; |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
93 |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
94 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
|
95 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
|
96 int sample_rate; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
97 int blocksize[2]; // in (1<<n) format |
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 |
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 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
|
100 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
|
101 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
102 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
|
103 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
|
104 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
105 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
|
106 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
|
107 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
108 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
|
109 mapping_t * mappings; |
3817
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
110 |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
111 int nmodes; |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
112 vorbis_mode_t * modes; |
3808 | 113 } venc_context_t; |
114 | |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
115 static int cb_lookup_vals(int lookup, int dimentions, int entries) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
116 if (lookup == 1) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
117 int tmp, i; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
118 for (tmp = 0; ; tmp++) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
119 int n = 1; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
120 for (i = 0; i < dimentions; i++) n *= tmp; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
121 if (n > entries) break; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
122 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
123 return tmp - 1; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
124 } else if (lookup == 2) return dimentions * entries; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
125 return 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
126 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
127 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
128 static void ready_codebook(codebook_t * cb) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
129 int h[33] = { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
130 int i; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
131 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
132 for (i = 0; i < cb->nentries; i++) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
133 cb_entry_t * e = &cb->entries[i]; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
134 int j = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
135 if (h[0]) h[0] = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
136 else for (j = e->len; !h[j]; j--) assert(j); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
137 e->codeword = h[j]; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
138 h[j] = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
139 for (j++; j <= e->len; j++) h[j] = e->codeword | (1 << (j - 1)); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
140 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
141 for (i = 0; i < 33; i++) assert(!h[i]); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
142 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
143 if (!cb->lookup) cb->dimentions = NULL; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
144 else { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
145 int vals = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
146 cb->dimentions = av_malloc(sizeof(float) * cb->nentries * cb->ndimentions); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
147 for (i = 0; i < cb->nentries; i++) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
148 float last = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
149 int j; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
150 int div = 1; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
151 for (j = 0; j < cb->ndimentions; j++) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
152 int off; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
153 if (cb->lookup == 1) off = (i / div) % vals; // lookup type 1 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
154 else off = i * cb->ndimentions + j; // lookup type 2 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
155 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
156 cb->dimentions[i * cb->ndimentions + j] = last + cb->min + cb->quantlist[off] * cb->delta; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
157 if (cb->seq_p) last = cb->dimentions[i * cb->ndimentions + j]; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
158 div *= vals; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
159 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
160 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
161 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
162 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
163 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
164 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
165 static void create_vorbis_context(venc_context_t * venc, AVCodecContext * avccontext) { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
166 codebook_t * cb; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
167 int i; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
168 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
169 venc->channels = avccontext->channels; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
170 venc->sample_rate = avccontext->sample_rate; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
171 venc->blocksize[0] = venc->blocksize[1] = 8; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
172 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
173 venc->ncodebooks = 3; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
174 venc->codebooks = av_malloc(sizeof(codebook_t) * venc->ncodebooks); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
175 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
176 // codebook 1 - floor1 book, values 0..255 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
177 cb = &venc->codebooks[0]; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
178 cb->nentries = 256; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
179 cb->entries = av_malloc(sizeof(cb_entry_t) * cb->nentries); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
180 for (i = 0; i < cb->nentries; i++) cb->entries[i].len = 8; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
181 cb->ndimentions = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
182 cb->min = 0.; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
183 cb->delta = 0.; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
184 cb->seq_p = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
185 cb->lookup = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
186 cb->quantlist = NULL; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
187 ready_codebook(cb); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
188 |
3819
92063e9b6728
Original Commit: r13 | ods15 | 2006-09-22 09:29:38 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3818
diff
changeset
|
189 // codebook 2 - residue classbook, values 0..0, dimentions 200 |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
190 cb = &venc->codebooks[1]; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
191 cb->nentries = 1; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
192 cb->entries = av_malloc(sizeof(cb_entry_t) * cb->nentries); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
193 for (i = 0; i < cb->nentries; i++) cb->entries[i].len = 1; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
194 cb->ndimentions = 200; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
195 cb->min = 0.; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
196 cb->delta = 0.; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
197 cb->seq_p = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
198 cb->lookup = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
199 cb->quantlist = NULL; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
200 ready_codebook(cb); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
201 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
202 // codebook 3 - vector, for the residue, dimentions 1. values -32768..32767 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
203 cb = &venc->codebooks[2]; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
204 cb->nentries = 32767 - (-32768); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
205 cb->entries = av_malloc(sizeof(cb_entry_t) * cb->nentries); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
206 for (i = 0; i < cb->nentries; i++) cb->entries[i].len = 16; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
207 cb->ndimentions = 1; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
208 cb->min = -32768.; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
209 cb->delta = 1.; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
210 cb->seq_p = 0; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
211 cb->lookup = 2; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
212 cb->quantlist = av_malloc(sizeof(int) * cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries)); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
213 for (i = 0; i < cb->nentries; i++) cb->quantlist[i] = i; |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
214 ready_codebook(cb); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
215 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
216 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
217 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
218 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
|
219 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
|
220 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
|
221 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
|
222 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
223 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
224 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 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
|
232 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
233 |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
234 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
|
235 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
|
236 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
|
237 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
238 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
|
239 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
|
240 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
|
241 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
242 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
|
243 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
|
244 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
245 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
|
246 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
|
247 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 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
|
255 len++; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
256 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
257 } else { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
258 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
|
259 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
|
260 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
|
261 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
|
262 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
263 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
|
264 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
|
265 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
|
266 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
267 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
268 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
269 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
|
270 if (cb->lookup) { |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
271 int tmp = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries); |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
272 int bits = ilog(cb->quantlist[0]); |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
273 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
274 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
|
275 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
276 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
|
277 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
|
278 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
279 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
|
280 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
|
281 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
282 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
|
283 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
284 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
285 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
286 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
|
287 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
|
288 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
289 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
|
290 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
291 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
|
292 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
293 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
|
294 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
295 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
|
296 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
|
297 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
298 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
|
299 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
|
300 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
301 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
|
302 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
303 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
|
304 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
305 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
|
306 } |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
307 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
308 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
|
309 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
|
310 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
311 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
|
312 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
313 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
314 static void put_residue_header(PutBitContext * pb, residue_t * rc) { |
3815
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
315 int i; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
316 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
317 put_bits(pb, 16, rc->type); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
318 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
319 put_bits(pb, 24, rc->begin); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
320 put_bits(pb, 24, rc->end); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
321 put_bits(pb, 24, rc->partition_size - 1); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
322 put_bits(pb, 6, rc->classifications); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
323 put_bits(pb, 8, rc->classbook); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
324 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
325 for (i = 0; i < rc->classifications; i++) { |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
326 int j, tmp = 0; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
327 for (j = 0; j < 8; j++) tmp |= (!!rc->books[i][j]) << j; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
328 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
329 put_bits(pb, 3, tmp & 7); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
330 put_bits(pb, 1, tmp > 7); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
331 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
332 if (tmp > 7) put_bits(pb, 5, tmp >> 3); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
333 } |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
334 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
335 for (i = 0; i < rc->classifications; i++) { |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
336 int j; |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
337 for (j = 0; j < 8; j++) |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
338 if (rc->books[i][j]) |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
339 put_bits(pb, 8, rc->books[i][j]); |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
340 } |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
341 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
342 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
343 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
|
344 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
|
345 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
|
346 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
|
347 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
|
348 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
|
349 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
350 // 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
|
351 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
|
352 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
|
353 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
|
354 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
|
355 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
|
356 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
|
357 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
|
358 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
|
359 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
|
360 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
|
361 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
|
362 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
|
363 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
364 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
|
365 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
|
366 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
|
367 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
|
368 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
369 // 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
|
370 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
|
371 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
|
372 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
|
373 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
|
374 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
|
375 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
|
376 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
377 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
|
378 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
|
379 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
|
380 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
|
381 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
382 // 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
|
383 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
|
384 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
|
385 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
|
386 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
387 // codebooks |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
388 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
|
389 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
|
390 |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
391 // 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
|
392 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
|
393 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
|
394 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
395 // floors |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
396 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
|
397 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
|
398 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
399 // residues |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
400 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
|
401 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
|
402 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
403 // mappings |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
404 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
|
405 for (i = 0; i < venc->nmappings; i++) { |
3816
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
406 mapping_t * mc = &venc->mappings[i]; |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
407 int j; |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
408 put_bits(&pb, 16, 0); // mapping type |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
409 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
410 put_bits(&pb, 1, mc->submaps > 1); |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
411 if (mc->submaps > 1) put_bits(&pb, 4, mc->submaps - 1); |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
412 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
413 put_bits(&pb, 1, 0); // channel coupling |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
414 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
415 put_bits(&pb, 2, 0); // reserved |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
416 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
417 if (mc->submaps > 1) for (j = 0; j < venc->channels; j++) put_bits(&pb, 4, mc->mux[j]); |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
418 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
419 for (j = 0; j < mc->submaps; j++) { |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
420 put_bits(&pb, 8, 0); // reserved time configuration |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
421 put_bits(&pb, 8, mc->floor[j]); |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
422 put_bits(&pb, 8, mc->residue[j]); |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
423 } |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
424 } |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
425 |
3817
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
426 // modes |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
427 put_bits(&pb, 6, venc->nmodes - 1); |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
428 for (i = 0; i < venc->nmodes; i++) { |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
429 put_bits(&pb, 1, venc->modes[i].blockflag); |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
430 put_bits(&pb, 16, 0); // reserved window type |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
431 put_bits(&pb, 16, 0); // reserved transform type |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
432 put_bits(&pb, 8, venc->modes[i].mapping); |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
433 } |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
434 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
435 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
|
436 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
|
437 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
438 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
|
439 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
|
440 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
441 *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
|
442 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
|
443 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
450 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
451 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
|
452 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
453 |
3809
500d86b68542
Original Commit: r3 | ods15 | 2006-09-16 11:49:07 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3808
diff
changeset
|
454 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
|
455 { |
3808 | 456 venc_context_t * venc = avccontext->priv_data; |
457 | |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
458 create_vorbis_context(venc, avccontext); |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
459 |
3808 | 460 //if (avccontext->flags & CODEC_FLAG_QSCALE) avccontext->global_quality / (float)FF_QP2LAMBDA); else avccontext->bit_rate; |
461 //if(avccontext->cutoff > 0) cfreq = avccontext->cutoff / 1000.0; | |
462 | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
463 avccontext->extradata_size = put_main_header(venc, (uint8_t**)&avccontext->extradata); |
3808 | 464 |
3809
500d86b68542
Original Commit: r3 | ods15 | 2006-09-16 11:49:07 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents:
3808
diff
changeset
|
465 avccontext->frame_size = VORBIS_FRAME_SIZE; |
3808 | 466 |
467 avccontext->coded_frame = avcodec_alloc_frame(); | |
468 avccontext->coded_frame->key_frame = 1; | |
469 | |
470 return 0; | |
471 } | |
472 | |
473 | |
474 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) | |
475 { | |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
476 #if 0 |
3808 | 477 venc_context_t * venc = avccontext->priv_data; |
478 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
|
479 int samples = data ? VORBIS_FRAME_SIZE : 0; |
3808 | 480 |
481 avccontext->coded_frame->pts = av_rescale_q(op2->granulepos, (AVRational){1, avccontext->sample_rate}, avccontext->time_base); | |
482 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
|
483 #endif |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
484 return 0; |
3808 | 485 } |
486 | |
487 | |
488 static int vorbis_encode_close(AVCodecContext * avccontext) | |
489 { | |
490 venc_context_t * venc = avccontext->priv_data; | |
491 | |
492 av_freep(&avccontext->coded_frame); | |
493 av_freep(&avccontext->extradata); | |
494 | |
495 return 0 ; | |
496 } | |
497 | |
498 AVCodec oggvorbis_encoder = { | |
499 "vorbis", | |
500 CODEC_TYPE_AUDIO, | |
501 CODEC_ID_VORBIS, | |
502 sizeof(venc_context_t), | |
503 vorbis_encode_init, | |
504 vorbis_encode_frame, | |
505 vorbis_encode_close, | |
506 .capabilities= CODEC_CAP_DELAY, | |
507 }; |