Mercurial > libavcodec.hg
annotate vorbis_enc.c @ 3863:2c8d1cadd86e libavcodec
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
last step to improoving floor code-wise - now the floor data needs to be
improved..
author | ods15 |
---|---|
date | Mon, 02 Oct 2006 06:07:53 +0000 |
parents | ee9379fc77a9 |
children | df84b5d1a8c2 |
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 | |
3841
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
27 #define BITSTREAM_H // don't include this |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
28 typedef int VLC; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
29 typedef int GetBitContext; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
30 #include "vorbis.h" |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
31 |
3808 | 32 #undef NDEBUG |
33 #include <assert.h> | |
34 | |
3835
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
35 //#define ALT_BITSTREAM_WRITER |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
36 //#include "bitstream.h" |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
37 |
3808 | 38 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
|
39 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
|
40 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
|
41 } 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
|
42 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
43 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
|
44 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
|
45 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
|
46 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
|
47 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
|
48 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
|
49 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
|
50 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
|
51 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
|
52 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
|
53 } 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
|
54 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
55 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
|
56 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
|
57 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
|
58 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
|
59 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
|
60 } 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
|
61 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
62 typedef struct { |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
63 int x; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
64 int low; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
65 int high; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
66 int sort; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
67 } floor_entry_t; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
68 |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
69 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
|
70 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
|
71 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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 int values; |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
77 floor_entry_t * 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
|
78 } 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
|
79 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
80 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
|
81 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
|
82 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
|
83 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
|
84 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
|
85 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
|
86 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
|
87 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
|
88 } 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
|
89 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
90 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
|
91 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
|
92 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
|
93 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
|
94 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
|
95 } 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
|
96 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
97 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
|
98 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
|
99 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
|
100 } 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
|
101 |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
102 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
|
103 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
|
104 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
|
105 int blocksize[2]; // in (1<<n) format |
3841
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
106 MDCTContext mdct[2]; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
107 const float * win[2]; |
3842
5f8cfa1a6fdb
Original Commit: r39 | ods15 | 2006-09-23 09:36:11 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3841
diff
changeset
|
108 int have_saved; |
3841
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
109 float * saved; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
110 float * samples; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
111 float * floor; // also used for tmp values for mdct |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
112 float * coeffs; // also used for residue after floor |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
113 |
3810
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 ncodebooks; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
115 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
|
116 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
117 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
|
118 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
|
119 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
120 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
|
121 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
|
122 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
123 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
|
124 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
|
125 |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
126 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
|
127 vorbis_mode_t * modes; |
3808 | 128 } venc_context_t; |
129 | |
3835
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
130 typedef struct { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
131 int total; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
132 int total_pos; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
133 int pos; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
134 uint8_t * buf_ptr; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
135 } PutBitContext; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
136 |
3852
d3bc8c09597c
Original Commit: r50 | ods15 | 2006-09-23 16:24:51 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3851
diff
changeset
|
137 #define ilog(i) av_log2(2*(i)) |
d3bc8c09597c
Original Commit: r50 | ods15 | 2006-09-23 16:24:51 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3851
diff
changeset
|
138 |
3835
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
139 static inline void init_put_bits(PutBitContext * pb, uint8_t * buf, int buffer_len) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
140 pb->total = buffer_len * 8; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
141 pb->total_pos = 0; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
142 pb->pos = 0; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
143 pb->buf_ptr = buf; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
144 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
145 |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
146 static void put_bits(PutBitContext * pb, int bits, uint64_t val) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
147 if ((pb->total_pos += bits) >= pb->total) return; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
148 if (!bits) return; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
149 if (pb->pos) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
150 if (pb->pos > bits) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
151 *pb->buf_ptr |= val << (8 - pb->pos); |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
152 pb->pos -= bits; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
153 bits = 0; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
154 } else { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
155 *pb->buf_ptr++ |= (val << (8 - pb->pos)) & 0xFF; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
156 val >>= pb->pos; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
157 bits -= pb->pos; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
158 pb->pos = 0; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
159 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
160 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
161 for (; bits >= 8; bits -= 8) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
162 *pb->buf_ptr++ = val & 0xFF; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
163 val >>= 8; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
164 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
165 if (bits) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
166 *pb->buf_ptr = val; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
167 pb->pos = 8 - bits; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
168 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
169 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
170 |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
171 static inline void flush_put_bits(PutBitContext * pb) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
172 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
173 |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
174 static inline int put_bits_count(PutBitContext * pb) { |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
175 return pb->total_pos; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
176 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
177 |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
178 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
|
179 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
|
180 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
|
181 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
|
182 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
|
183 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
|
184 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
|
185 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
186 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
|
187 } 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
|
188 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
|
189 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
190 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
191 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
|
192 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
|
193 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
|
194 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
195 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
|
196 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
|
197 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
|
198 if (h[0]) h[0] = 0; |
3853
30e824ef9e03
Original Commit: r51 | ods15 | 2006-09-23 16:32:30 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3852
diff
changeset
|
199 else { |
30e824ef9e03
Original Commit: r51 | ods15 | 2006-09-23 16:32:30 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3852
diff
changeset
|
200 for (j = e->len; j; j--) |
30e824ef9e03
Original Commit: r51 | ods15 | 2006-09-23 16:32:30 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3852
diff
changeset
|
201 if (h[j]) break; |
30e824ef9e03
Original Commit: r51 | ods15 | 2006-09-23 16:32:30 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3852
diff
changeset
|
202 assert(j); |
30e824ef9e03
Original Commit: r51 | ods15 | 2006-09-23 16:32:30 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3852
diff
changeset
|
203 } |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
204 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
|
205 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
|
206 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
|
207 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
208 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
|
209 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
210 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
|
211 else { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
212 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 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
|
218 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
|
219 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
|
220 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
|
221 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
|
222 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
223 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
|
224 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
|
225 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
|
226 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
227 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
228 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
229 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
230 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
231 |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
232 static void ready_floor(floor_t * fc) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
233 int i; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
234 fc->list[0].sort = 0; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
235 fc->list[1].sort = 1; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
236 for (i = 2; i < fc->values; i++) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
237 int j; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
238 fc->list[i].low = 0; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
239 fc->list[i].high = 1; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
240 fc->list[i].sort = i; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
241 for (j = 2; j < i; j++) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
242 int tmp = fc->list[j].x; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
243 if (tmp < fc->list[i].x) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
244 if (tmp > fc->list[fc->list[i].low].x) fc->list[i].low = j; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
245 } else { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
246 if (tmp < fc->list[fc->list[i].high].x) fc->list[i].high = j; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
247 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
248 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
249 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
250 for (i = 0; i < fc->values - 1; i++) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
251 int j; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
252 for (j = i + 1; j < fc->values; j++) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
253 if (fc->list[fc->list[i].sort].x > fc->list[fc->list[j].sort].x) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
254 int tmp = fc->list[i].sort; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
255 fc->list[i].sort = fc->list[j].sort; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
256 fc->list[j].sort = tmp; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
257 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
258 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
259 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
260 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
261 |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
262 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
|
263 codebook_t * cb; |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
264 floor_t * fc; |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
265 residue_t * rc; |
3829
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
266 mapping_t * mc; |
3820
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
267 int i, book; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
268 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
269 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
|
270 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
|
271 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
|
272 |
3820
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
273 venc->ncodebooks = 10; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
274 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
|
275 |
3840
bb414feb6a0d
Original Commit: r37 | ods15 | 2006-09-23 08:43:43 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3839
diff
changeset
|
276 // codebook 0 - floor1 book, values 0..255 |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
277 cb = &venc->codebooks[0]; |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
278 cb->nentries = 512; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
279 cb->entries = av_malloc(sizeof(cb_entry_t) * cb->nentries); |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
280 for (i = 0; i < cb->nentries; i++) cb->entries[i].len = 9; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
281 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 |
3846
afbeb215e56f
Original Commit: r43 | ods15 | 2006-09-23 10:53:46 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3845
diff
changeset
|
289 // codebook 1 - residue classbook, values 0..1, dimentions 4 |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
290 cb = &venc->codebooks[1]; |
3822
a7f46bc1fea0
Original Commit: r16 | ods15 | 2006-09-22 12:27:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3821
diff
changeset
|
291 cb->nentries = 2; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
292 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
|
293 for (i = 0; i < cb->nentries; i++) cb->entries[i].len = 1; |
3846
afbeb215e56f
Original Commit: r43 | ods15 | 2006-09-23 10:53:46 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3845
diff
changeset
|
294 cb->ndimentions = 4; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
295 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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 |
3840
bb414feb6a0d
Original Commit: r37 | ods15 | 2006-09-23 08:43:43 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3839
diff
changeset
|
302 // codebook 2..9 - vector, for the residue, values -32767..32767, dimentions 1 |
3820
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
303 for (book = 0; book < 8; book++) { |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
304 cb = &venc->codebooks[2 + book]; |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
305 cb->nentries = 5; |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
306 cb->entries = av_malloc(sizeof(cb_entry_t) * cb->nentries); |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
307 for (i = 0; i < cb->nentries; i++) cb->entries[i].len = i == 2 ? 1 : 3; |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
308 cb->ndimentions = 1; |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
309 cb->delta = 1 << ((7 - book) * 2); |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
310 cb->min = -cb->delta*2; |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
311 cb->seq_p = 0; |
3849
ead3ae56d1b6
Original Commit: r47 | ods15 | 2006-09-23 12:34:48 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3848
diff
changeset
|
312 cb->lookup = 1; |
3820
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
313 cb->quantlist = av_malloc(sizeof(int) * cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries)); |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
314 for (i = 0; i < cb->nentries; i++) cb->quantlist[i] = i; |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
315 ready_codebook(cb); |
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
316 } |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
317 |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
318 venc->nfloors = 1; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
319 venc->floors = av_malloc(sizeof(floor_t) * venc->nfloors); |
3826
c583e895f980
Original Commit: r20 | ods15 | 2006-09-22 13:12:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3825
diff
changeset
|
320 |
c583e895f980
Original Commit: r20 | ods15 | 2006-09-22 13:12:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3825
diff
changeset
|
321 // just 1 floor |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
322 fc = &venc->floors[0]; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
323 fc->partitions = 1; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
324 fc->partition_to_class = av_malloc(sizeof(int) * fc->partitions); |
3832
3d159e4cde5a
Original Commit: r26 | ods15 | 2006-09-22 14:18:22 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3831
diff
changeset
|
325 for (i = 0; i < fc->partitions; i++) fc->partition_to_class[i] = 0; |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
326 fc->nclasses = 1; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
327 fc->classes = av_malloc(sizeof(floor_class_t) * fc->nclasses); |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
328 for (i = 0; i < fc->nclasses; i++) { |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
329 floor_class_t * c = &fc->classes[i]; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
330 int j, books; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
331 c->dim = 1; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
332 c->subclass = 0; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
333 c->masterbook = 0; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
334 books = (1 << c->subclass); |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
335 c->books = av_malloc(sizeof(int) * books); |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
336 for (j = 0; j < books; j++) c->books[j] = 0; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
337 } |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
338 fc->multiplier = 1; |
3854
8de41fcc6500
Original Commit: r52 | ods15 | 2006-09-23 17:38:43 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3853
diff
changeset
|
339 fc->rangebits = venc->blocksize[0] - 1; |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
340 |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
341 fc->values = 2; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
342 for (i = 0; i < fc->partitions; i++) |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
343 fc->values += fc->classes[fc->partition_to_class[i]].dim; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
344 |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
345 fc->list = av_malloc(sizeof(floor_entry_t) * fc->values); |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
346 fc->list[0].x = 0; |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
347 fc->list[1].x = 1 << fc->rangebits; |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
348 for (i = 2; i < fc->values; i++) { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
349 int a = i - 1; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
350 int g = ilog(a); |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
351 assert(g <= fc->rangebits); |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
352 a ^= 1 << (g-1); |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
353 g = 1 << (fc->rangebits - g); |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
354 fc->list[i].x = g + a*2*g; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
355 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
356 ready_floor(fc); |
3827
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
357 |
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
358 venc->nresidues = 1; |
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
359 venc->residues = av_malloc(sizeof(residue_t) * venc->nresidues); |
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
360 |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
361 // single residue |
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
362 rc = &venc->residues[0]; |
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
363 rc->type = 0; |
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
364 rc->begin = 0; |
3845
59f260f0f5bb
Original Commit: r42 | ods15 | 2006-09-23 10:53:16 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3844
diff
changeset
|
365 rc->end = 1 << (venc->blocksize[0] - 1); |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
366 rc->partition_size = 64; |
3849
ead3ae56d1b6
Original Commit: r47 | ods15 | 2006-09-23 12:34:48 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3848
diff
changeset
|
367 rc->classifications = 2; |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
368 rc->classbook = 1; |
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
369 rc->books = av_malloc(sizeof(int[8]) * rc->classifications); |
3849
ead3ae56d1b6
Original Commit: r47 | ods15 | 2006-09-23 12:34:48 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3848
diff
changeset
|
370 for (i = 0; i < rc->classifications; i++) { |
ead3ae56d1b6
Original Commit: r47 | ods15 | 2006-09-23 12:34:48 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3848
diff
changeset
|
371 int j; |
ead3ae56d1b6
Original Commit: r47 | ods15 | 2006-09-23 12:34:48 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3848
diff
changeset
|
372 for (j = 0; j < 8; j++) rc->books[i][j] = 2 + j; |
3855
d692105e5a58
Original Commit: r54 | ods15 | 2006-09-24 13:54:12 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3854
diff
changeset
|
373 rc->books[i][0] = rc->books[i][1] = rc->books[i][2] = rc->books[i][3] = -1; |
3849
ead3ae56d1b6
Original Commit: r47 | ods15 | 2006-09-23 12:34:48 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3848
diff
changeset
|
374 } |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
375 |
3827
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
376 venc->nmappings = 1; |
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
377 venc->mappings = av_malloc(sizeof(mapping_t) * venc->nmappings); |
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
378 |
3829
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
379 // single mapping |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
380 mc = &venc->mappings[0]; |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
381 mc->submaps = 1; |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
382 mc->mux = av_malloc(sizeof(int) * venc->channels); |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
383 for (i = 0; i < venc->channels; i++) mc->mux[i] = 0; |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
384 mc->floor = av_malloc(sizeof(int) * mc->submaps); |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
385 mc->residue = av_malloc(sizeof(int) * mc->submaps); |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
386 for (i = 0; i < mc->submaps; i++) { |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
387 mc->floor[i] = 0; |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
388 mc->residue[i] = 0; |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
389 } |
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
390 |
3827
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
391 venc->nmodes = 1; |
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
392 venc->modes = av_malloc(sizeof(vorbis_mode_t) * venc->nmodes); |
3830
477ee30c6fc6
Original Commit: r24 | ods15 | 2006-09-22 13:57:09 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3829
diff
changeset
|
393 |
477ee30c6fc6
Original Commit: r24 | ods15 | 2006-09-22 13:57:09 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3829
diff
changeset
|
394 // single mode |
477ee30c6fc6
Original Commit: r24 | ods15 | 2006-09-22 13:57:09 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3829
diff
changeset
|
395 venc->modes[0].blockflag = 0; |
477ee30c6fc6
Original Commit: r24 | ods15 | 2006-09-22 13:57:09 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3829
diff
changeset
|
396 venc->modes[0].mapping = 0; |
3841
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
397 |
3842
5f8cfa1a6fdb
Original Commit: r39 | ods15 | 2006-09-23 09:36:11 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3841
diff
changeset
|
398 venc->have_saved = 0; |
3841
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
399 venc->saved = av_malloc(sizeof(float) * venc->channels * (1 << venc->blocksize[1]) / 2); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
400 venc->samples = av_malloc(sizeof(float) * venc->channels * (1 << venc->blocksize[1])); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
401 venc->floor = av_malloc(sizeof(float) * venc->channels * (1 << venc->blocksize[1]) / 2); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
402 venc->coeffs = av_malloc(sizeof(float) * venc->channels * (1 << venc->blocksize[1]) / 2); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
403 |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
404 { |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
405 const float *vwin[8]={ vwin64, vwin128, vwin256, vwin512, vwin1024, vwin2048, vwin4096, vwin8192 }; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
406 venc->win[0] = vwin[venc->blocksize[0] - 6]; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
407 venc->win[1] = vwin[venc->blocksize[1] - 6]; |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
408 } |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
409 |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
410 ff_mdct_init(&venc->mdct[0], venc->blocksize[0], 0); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
411 ff_mdct_init(&venc->mdct[1], venc->blocksize[1], 0); |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
412 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
413 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
414 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
|
415 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
|
416 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
|
417 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
|
418 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
|
419 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
|
420 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
|
421 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
|
422 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
423 |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
424 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
|
425 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
|
426 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
|
427 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
428 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
|
429 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
|
430 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
|
431 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
432 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
|
433 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
|
434 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
435 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
|
436 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
|
437 int len = cb->entries[0].len; |
3851
a778f86c28e2
Original Commit: r49 | ods15 | 2006-09-23 12:52:21 +0300 (Sat, 23 Sep 2006) | 3 lines
ods15
parents:
3850
diff
changeset
|
438 put_bits(pb, 5, len - 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
|
439 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
|
440 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
|
441 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
|
442 for (j = 0; j+i < cb->nentries; j++) if (cb->entries[j+i].len != len) break; |
3823
41ad23b61a2c
Original Commit: r17 | ods15 | 2006-09-22 12:28:28 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3822
diff
changeset
|
443 put_bits(pb, ilog(cb->nentries - i), 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
|
444 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
|
445 len++; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
446 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
447 } else { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
448 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
|
449 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
|
450 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
|
451 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
|
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 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
|
454 if (sparse) put_bits(pb, 1, !!cb->entries[i].len); |
3837
2eb4d646d36b
Original Commit: r34 | ods15 | 2006-09-22 18:46:57 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3836
diff
changeset
|
455 if (cb->entries[i].len) put_bits(pb, 5, cb->entries[i].len - 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
|
456 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
457 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
458 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
459 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
|
460 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
|
461 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
|
462 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
|
463 |
3823
41ad23b61a2c
Original Commit: r17 | ods15 | 2006-09-22 12:28:28 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3822
diff
changeset
|
464 for (i = 1; i < tmp; i++) bits = FFMAX(bits, ilog(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
|
465 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
466 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
|
467 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
|
468 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
469 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
|
470 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
|
471 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
472 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
|
473 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
474 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
475 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
476 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
|
477 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
|
478 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
479 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
|
480 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
481 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
|
482 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
483 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
|
484 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
485 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
|
486 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
|
487 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
488 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
|
489 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
|
490 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
491 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
|
492 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
493 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
|
494 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
495 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
|
496 } |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
497 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
498 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
|
499 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
|
500 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
501 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
|
502 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
503 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
504 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
|
505 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
|
506 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
507 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
|
508 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
509 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
|
510 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
|
511 put_bits(pb, 24, rc->partition_size - 1); |
3838
6ccaab22c4d6
Original Commit: r35 | ods15 | 2006-09-22 18:53:22 +0300 (Fri, 22 Sep 2006) | 4 lines
ods15
parents:
3837
diff
changeset
|
512 put_bits(pb, 6, rc->classifications - 1); |
3815
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
513 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
|
514 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
515 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
|
516 int j, tmp = 0; |
3850
c52f4698e851
Original Commit: r48 | ods15 | 2006-09-23 12:45:25 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3849
diff
changeset
|
517 for (j = 0; j < 8; j++) tmp |= (rc->books[i][j] != -1) << j; |
3815
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
518 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
519 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
|
520 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
|
521 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
522 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
|
523 } |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
524 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
525 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
|
526 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
|
527 for (j = 0; j < 8; j++) |
3856
5812c2d48dbd
Original Commit: r55 | ods15 | 2006-09-24 13:54:43 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3855
diff
changeset
|
528 if (rc->books[i][j] != -1) |
3815
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
529 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
|
530 } |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
531 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
532 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
533 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
|
534 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
|
535 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
|
536 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
|
537 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
|
538 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
|
539 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
540 // 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
|
541 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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 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
|
547 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
|
548 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
|
549 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
|
550 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
|
551 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
|
552 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
|
553 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
554 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
|
555 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
|
556 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
|
557 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
|
558 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
559 // 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
|
560 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
|
561 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
|
562 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
|
563 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
|
564 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
|
565 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
|
566 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
567 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
|
568 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
|
569 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
|
570 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
|
571 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
572 // 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
|
573 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
|
574 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
|
575 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
|
576 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
577 // codebooks |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
578 put_bits(&pb, 8, venc->ncodebooks - 1); |
3821
5fdb0fa900cd
Original Commit: r15 | ods15 | 2006-09-22 12:26:42 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3820
diff
changeset
|
579 for (i = 0; i < venc->ncodebooks; i++) put_codebook_header(&pb, &venc->codebooks[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
|
580 |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
581 // 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
|
582 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
|
583 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
|
584 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
585 // floors |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
586 put_bits(&pb, 6, venc->nfloors - 1); |
3821
5fdb0fa900cd
Original Commit: r15 | ods15 | 2006-09-22 12:26:42 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3820
diff
changeset
|
587 for (i = 0; i < venc->nfloors; i++) put_floor_header(&pb, &venc->floors[i]); |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
588 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
589 // residues |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
590 put_bits(&pb, 6, venc->nresidues - 1); |
3821
5fdb0fa900cd
Original Commit: r15 | ods15 | 2006-09-22 12:26:42 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3820
diff
changeset
|
591 for (i = 0; i < venc->nresidues; i++) put_residue_header(&pb, &venc->residues[i]); |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
592 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
593 // mappings |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
594 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
|
595 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
|
596 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
|
597 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
|
598 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
|
599 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
600 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
|
601 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
|
602 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
603 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
|
604 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
605 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
|
606 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
607 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
|
608 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
609 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
|
610 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
|
611 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
|
612 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
|
613 } |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
614 } |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
615 |
3817
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
616 // modes |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
617 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
|
618 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
|
619 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
|
620 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
|
621 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
|
622 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
|
623 } |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
624 |
3836
ff31b13b57df
Original Commit: r32 | ods15 | 2006-09-22 18:37:50 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3835
diff
changeset
|
625 put_bits(&pb, 1, 1); // framing |
ff31b13b57df
Original Commit: r32 | ods15 | 2006-09-22 18:37:50 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3835
diff
changeset
|
626 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
627 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
|
628 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
|
629 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
630 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
|
631 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
|
632 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
633 *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
|
634 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
|
635 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
|
636 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
|
637 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
|
638 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
|
639 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
|
640 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
|
641 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
642 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
643 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
|
644 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
645 |
3861
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
646 static void floor_fit(venc_context_t * venc, floor_t * fc, float * coeffs, int * posts, int samples) { |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
647 int range = 255 / fc->multiplier + 1; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
648 int i; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
649 for (i = 0; i < fc->values; i++) { |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
650 int position = fc->list[fc->list[i].sort].x; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
651 int begin = fc->list[fc->list[FFMAX(i-1, 0)].sort].x; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
652 int end = fc->list[fc->list[FFMIN(i+1, fc->values - 1)].sort].x; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
653 int j; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
654 float average = 0; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
655 begin = (position + begin) / 2; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
656 end = (position + end ) / 2; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
657 |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
658 assert(end <= samples); |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
659 for (j = begin; j < end; j++) average += fabs(coeffs[j]); |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
660 average /= end - begin; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
661 average /= 64; // MAGIC! |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
662 for (j = 0; j < range; j++) if (floor1_inverse_db_table[j * fc->multiplier] > average) break; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
663 posts[fc->list[i].sort] = j; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
664 } |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
665 } |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
666 |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
667 static int render_point(int x0, int y0, int x1, int y1, int x) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
668 return y0 + (x - x0) * (y1 - y0) / (x1 - x0); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
669 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
670 |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
671 static void render_line(int x0, int y0, int x1, int y1, float * buf, int n) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
672 int dy = y1 - y0; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
673 int adx = x1 - x0; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
674 int ady = FFMAX(dy, -dy); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
675 int base = dy / adx; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
676 int x = x0; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
677 int y = y0; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
678 int err = 0; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
679 int sy; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
680 if (dy < 0) sy = base - 1; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
681 else sy = base + 1; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
682 ady = ady - FFMAX(base, -base) * adx; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
683 if (x >= n) return; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
684 buf[x] = floor1_inverse_db_table[y]; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
685 for (x = x0 + 1; x < x1; x++) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
686 if (x >= n) return; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
687 err += ady; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
688 if (err >= adx) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
689 err -= adx; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
690 y += sy; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
691 } else { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
692 y += base; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
693 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
694 buf[x] = floor1_inverse_db_table[y]; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
695 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
696 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
697 |
3862
ee9379fc77a9
Original Commit: r62 | ods15 | 2006-09-25 13:12:07 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3861
diff
changeset
|
698 static void floor_encode(venc_context_t * venc, floor_t * fc, PutBitContext * pb, int * posts, float * floor, int samples) { |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
699 int range = 255 / fc->multiplier + 1; |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
700 int coded[fc->values]; // first 2 values are unused |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
701 int i, counter; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
702 int lx, ly; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
703 |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
704 put_bits(pb, 1, 1); // non zero |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
705 put_bits(pb, ilog(range - 1), posts[0]); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
706 put_bits(pb, ilog(range - 1), posts[1]); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
707 |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
708 for (i = 2; i < fc->values; i++) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
709 int predicted = render_point(fc->list[fc->list[i].low].x, |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
710 posts[fc->list[i].low], |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
711 fc->list[fc->list[i].high].x, |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
712 posts[fc->list[i].high], |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
713 fc->list[i].x); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
714 int highroom = range - predicted; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
715 int lowroom = predicted; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
716 int room = FFMIN(highroom, lowroom); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
717 if (predicted == posts[i]) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
718 coded[i] = 0; // must be used later as flag! |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
719 continue; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
720 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
721 if (posts[i] > predicted) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
722 if (posts[i] - predicted > room) coded[i] = posts[i] - predicted + lowroom; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
723 else coded[i] = (posts[i] - predicted) << 1; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
724 } else { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
725 if (predicted - posts[i] > room) coded[i] = predicted - posts[i] + highroom - 1; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
726 else coded[i] = ((predicted - posts[i]) << 1) + 1; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
727 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
728 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
729 |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
730 counter = 2; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
731 for (i = 0; i < fc->partitions; i++) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
732 floor_class_t * c = &fc->classes[fc->partition_to_class[i]]; |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
733 codebook_t * book = &venc->codebooks[c->books[0]]; |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
734 int k; |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
735 assert(!c->subclass); |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
736 for (k = 0; k < c->dim; k++) { |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
737 int entry = coded[counter++]; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
738 if (entry >= book->nentries || entry < 0) av_log(NULL, AV_LOG_ERROR, "%d %d %d %d \n", entry, book->nentries, counter, fc->values); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
739 assert(entry < book->nentries); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
740 assert(entry >= 0); |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
741 put_bits(pb, book->entries[entry].len, book->entries[entry].codeword); |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
742 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
743 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
744 |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
745 lx = 0; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
746 ly = posts[0] * fc->multiplier; // sorted 0 is still 0 |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
747 coded[0] = coded[1] = 1; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
748 for (i = 1; i < fc->values; i++) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
749 int pos = fc->list[i].sort; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
750 if (coded[pos]) { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
751 render_line(lx, ly, fc->list[pos].x, posts[pos] * fc->multiplier, floor, samples); |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
752 lx = fc->list[pos].x; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
753 ly = posts[pos] * fc->multiplier; |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
754 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
755 if (lx >= samples) break; |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
756 } |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
757 if (lx < samples) render_line(lx, ly, samples, ly, floor, samples); |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
758 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
759 |
3858
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
760 static float * put_vector(codebook_t * book, PutBitContext * pb, float * num) { |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
761 int i; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
762 int entry = -1; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
763 float distance = 0; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
764 assert(book->dimentions); |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
765 for (i = 0; i < book->nentries; i++) { |
3858
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
766 float d = 0.; |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
767 int j; |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
768 for (j = 0; j < book->ndimentions; j++) { |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
769 float a = (book->dimentions[i * book->ndimentions + j] - num[j]); |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
770 d += a*a; |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
771 } |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
772 if (entry == -1 || distance > d) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
773 entry = i; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
774 distance = d; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
775 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
776 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
777 put_bits(pb, book->entries[entry].len, book->entries[entry].codeword); |
3858
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
778 return &book->dimentions[entry * book->ndimentions]; |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
779 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
780 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
781 static void residue_encode(venc_context_t * venc, residue_t * rc, PutBitContext * pb, float * coeffs, int samples, int channels) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
782 int pass, i, j, p, k; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
783 int psize = rc->partition_size; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
784 int partitions = (rc->end - rc->begin) / psize; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
785 int classes[channels][partitions]; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
786 int classwords = venc->codebooks[rc->classbook].ndimentions; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
787 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
788 for (pass = 0; pass < 8; pass++) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
789 p = 0; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
790 while (p < partitions) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
791 if (pass == 0) for (j = 0; j < channels; j++) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
792 codebook_t * book = &venc->codebooks[rc->classbook]; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
793 int entry = 0; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
794 put_bits(pb, book->entries[entry].len, book->entries[entry].codeword); |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
795 for (i = classwords; i--; ) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
796 classes[j][p + i] = entry % rc->classifications; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
797 entry /= rc->classifications; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
798 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
799 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
800 for (i = 0; i < classwords && p < partitions; i++, p++) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
801 for (j = 0; j < channels; j++) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
802 int nbook = rc->books[classes[j][p]][pass]; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
803 codebook_t * book = &venc->codebooks[nbook]; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
804 float * buf = coeffs + samples*j + rc->begin + p*psize; |
3856
5812c2d48dbd
Original Commit: r55 | ods15 | 2006-09-24 13:54:43 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3855
diff
changeset
|
805 if (nbook == -1) continue; |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
806 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
807 assert(rc->type == 0); |
3858
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
808 assert(!(psize % book->ndimentions)); |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
809 |
3858
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
810 for (k = 0; k < psize; k += book->ndimentions) { |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
811 float * a = put_vector(book, pb, &buf[k]); |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
812 int l; |
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
813 for (l = 0; l < book->ndimentions; l++) buf[k + l] -= a[l]; |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
814 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
815 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
816 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
817 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
818 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
819 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
820 |
3859
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
821 static int window(venc_context_t * venc, signed short * audio, int samples) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
822 int i, j, channel; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
823 const float * win = venc->win[0]; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
824 int window_len = 1 << (venc->blocksize[0] - 1); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
825 float n = (float)(1 << venc->blocksize[0]) / 4.; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
826 // FIXME use dsp |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
827 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
828 if (!venc->have_saved && !samples) return 0; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
829 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
830 if (venc->have_saved) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
831 for (channel = 0; channel < venc->channels; channel++) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
832 memcpy(venc->samples + channel*window_len*2, venc->saved + channel*window_len, sizeof(float)*window_len); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
833 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
834 } else { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
835 for (channel = 0; channel < venc->channels; channel++) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
836 memset(venc->samples + channel*window_len*2, 0, sizeof(float)*window_len); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
837 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
838 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
839 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
840 if (samples) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
841 for (channel = 0; channel < venc->channels; channel++) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
842 float * offset = venc->samples + channel*window_len*2 + window_len; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
843 j = channel; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
844 for (i = 0; i < samples; i++, j += venc->channels) |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
845 offset[i] = audio[j] / 32768. * win[window_len - i] / n; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
846 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
847 } else { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
848 for (channel = 0; channel < venc->channels; channel++) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
849 memset(venc->samples + channel*window_len*2 + window_len, 0, sizeof(float)*window_len); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
850 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
851 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
852 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
853 for (channel = 0; channel < venc->channels; channel++) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
854 ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel*window_len, venc->samples + channel*window_len*2, venc->floor/*tmp*/); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
855 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
856 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
857 if (samples) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
858 for (channel = 0; channel < venc->channels; channel++) { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
859 float * offset = venc->saved + channel*window_len; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
860 j = channel; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
861 for (i = 0; i < samples; i++, j += venc->channels) |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
862 offset[i] = audio[j] / 32768. * win[i] / n; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
863 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
864 venc->have_saved = 1; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
865 } else { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
866 venc->have_saved = 0; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
867 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
868 return 1; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
869 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
870 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
871 static int vorbis_encode_init(AVCodecContext * avccontext) |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
872 { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
873 venc_context_t * venc = avccontext->priv_data; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
874 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
875 create_vorbis_context(venc, avccontext); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
876 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
877 //if (avccontext->flags & CODEC_FLAG_QSCALE) avccontext->global_quality / (float)FF_QP2LAMBDA); else avccontext->bit_rate; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
878 //if(avccontext->cutoff > 0) cfreq = avccontext->cutoff / 1000.0; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
879 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
880 avccontext->extradata_size = put_main_header(venc, (uint8_t**)&avccontext->extradata); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
881 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
882 avccontext->frame_size = 1 << (venc->blocksize[0] - 1); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
883 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
884 avccontext->coded_frame = avcodec_alloc_frame(); |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
885 avccontext->coded_frame->key_frame = 1; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
886 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
887 return 0; |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
888 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
889 |
3808 | 890 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) |
891 { | |
892 venc_context_t * venc = avccontext->priv_data; | |
893 signed short * audio = data; | |
3833
d4c01d85fb46
Original Commit: r27 | ods15 | 2006-09-22 14:19:51 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3832
diff
changeset
|
894 int samples = data ? avccontext->frame_size : 0; |
3839
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
895 vorbis_mode_t * mode; |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
896 mapping_t * mapping; |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
897 PutBitContext pb; |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
898 int i; |
3808 | 899 |
3842
5f8cfa1a6fdb
Original Commit: r39 | ods15 | 2006-09-23 09:36:11 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3841
diff
changeset
|
900 if (!window(venc, audio, samples)) return 0; |
3861
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
901 samples = 1 << (venc->blocksize[0] - 1); |
3842
5f8cfa1a6fdb
Original Commit: r39 | ods15 | 2006-09-23 09:36:11 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3841
diff
changeset
|
902 |
3839
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
903 init_put_bits(&pb, packets, buf_size); |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
904 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
905 put_bits(&pb, 1, 0); // magic bit |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
906 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
907 put_bits(&pb, ilog(venc->nmodes - 1), 0); // 0 bits, the mode |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
908 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
909 mode = &venc->modes[0]; |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
910 mapping = &venc->mappings[mode->mapping]; |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
911 if (mode->blockflag) { |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
912 put_bits(&pb, 1, 0); |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
913 put_bits(&pb, 1, 0); |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
914 } |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
915 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
916 for (i = 0; i < venc->channels; i++) { |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
917 floor_t * fc = &venc->floors[mapping->floor[mapping->mux[i]]]; |
3861
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
918 int posts[fc->values]; |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
919 floor_fit(venc, fc, &venc->coeffs[i * samples], posts, samples); |
3862
ee9379fc77a9
Original Commit: r62 | ods15 | 2006-09-25 13:12:07 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3861
diff
changeset
|
920 floor_encode(venc, fc, &pb, posts, &venc->floor[i * samples], samples); |
3839
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
921 } |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
922 |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
923 for (i = 0; i < venc->channels; i++) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
924 int j; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
925 for (j = 0; j < samples; j++) { |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
926 venc->coeffs[i * samples + j] /= venc->floor[i * samples + j]; |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
927 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
928 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
929 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
930 residue_encode(venc, &venc->residues[mapping->residue[mapping->mux[0]]], &pb, venc->coeffs, samples, venc->channels); |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
931 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
932 return (put_bits_count(&pb) + 7) / 8; |
3808 | 933 } |
934 | |
935 | |
936 static int vorbis_encode_close(AVCodecContext * avccontext) | |
937 { | |
938 venc_context_t * venc = avccontext->priv_data; | |
3831
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
939 int i; |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
940 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
941 if (venc->codebooks) for (i = 0; i < venc->ncodebooks; i++) { |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
942 av_freep(&venc->codebooks[i].entries); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
943 av_freep(&venc->codebooks[i].quantlist); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
944 av_freep(&venc->codebooks[i].dimentions); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
945 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
946 av_freep(&venc->codebooks); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
947 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
948 if (venc->floors) for (i = 0; i < venc->nfloors; i++) { |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
949 int j; |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
950 av_freep(&venc->floors[i].classes); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
951 if (venc->floors[i].classes) |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
952 for (j = 0; j < venc->floors[i].nclasses; j++) |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
953 av_freep(&venc->floors[i].classes[j].books); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
954 av_freep(&venc->floors[i].partition_to_class); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
955 av_freep(&venc->floors[i].list); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
956 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
957 av_freep(&venc->floors); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
958 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
959 if (venc->residues) for (i = 0; i < venc->nresidues; i++) { |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
960 av_freep(&venc->residues[i].books); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
961 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
962 av_freep(&venc->residues); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
963 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
964 if (venc->mappings) for (i = 0; i < venc->nmappings; i++) { |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
965 av_freep(&venc->mappings[i].mux); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
966 av_freep(&venc->mappings[i].floor); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
967 av_freep(&venc->mappings[i].residue); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
968 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
969 av_freep(&venc->mappings); |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
970 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
971 av_freep(&venc->modes); |
3808 | 972 |
3841
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
973 av_freep(&venc->saved); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
974 av_freep(&venc->samples); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
975 av_freep(&venc->floor); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
976 av_freep(&venc->coeffs); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
977 |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
978 ff_mdct_end(&venc->mdct[0]); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
979 ff_mdct_end(&venc->mdct[1]); |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
980 |
3808 | 981 av_freep(&avccontext->coded_frame); |
982 av_freep(&avccontext->extradata); | |
983 | |
984 return 0 ; | |
985 } | |
986 | |
3857
2d1d529a90d4
Original Commit: r56 | ods15 | 2006-09-24 13:55:01 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3856
diff
changeset
|
987 AVCodec vorbis_encoder = { |
3808 | 988 "vorbis", |
989 CODEC_TYPE_AUDIO, | |
990 CODEC_ID_VORBIS, | |
991 sizeof(venc_context_t), | |
992 vorbis_encode_init, | |
993 vorbis_encode_frame, | |
994 vorbis_encode_close, | |
995 .capabilities= CODEC_CAP_DELAY, | |
996 }; |