Mercurial > libavcodec.hg
annotate vorbis_enc.c @ 3879:883cdae879a6 libavcodec
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
cosmetic reindent
author | ods15 |
---|---|
date | Mon, 02 Oct 2006 06:08:31 +0000 |
parents | 30de59a39f6e |
children | 3d5920649c39 |
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; |
3870
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
95 int coupling_steps; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
96 int * magnitude; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
97 int * angle; |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
98 } 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
|
99 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
100 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
|
101 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
|
102 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
|
103 } 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
|
104 |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
105 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
|
106 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
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 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
|
115 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
|
116 |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
117 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
|
118 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
|
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 nfloors; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
121 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
|
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 nresidues; |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
124 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
|
125 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
126 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
|
127 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
|
128 |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
129 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
|
130 vorbis_mode_t * modes; |
3808 | 131 } venc_context_t; |
132 | |
3835
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
133 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
|
134 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
|
135 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
|
136 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
|
137 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
|
138 } PutBitContext; |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
139 |
3852
d3bc8c09597c
Original Commit: r50 | ods15 | 2006-09-23 16:24:51 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3851
diff
changeset
|
140 #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
|
141 |
3835
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
142 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
|
143 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
|
144 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
|
145 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
|
146 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
|
147 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
148 |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 *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
|
155 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
|
156 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
|
157 } else { |
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->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
|
159 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
|
160 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
|
161 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
|
162 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
163 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
164 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
|
165 *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
|
166 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
|
167 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
168 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
|
169 *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
|
170 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
|
171 } |
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 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
|
175 } |
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 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
|
178 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
|
179 } |
40acb836a6d3
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3834
diff
changeset
|
180 |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
181 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
|
182 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
|
183 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
|
184 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
|
185 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
|
186 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
|
187 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
|
188 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
189 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
|
190 } 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
|
191 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
|
192 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
193 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
194 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
|
195 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
|
196 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
|
197 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
198 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
|
199 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
|
200 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
|
201 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
|
202 else { |
30e824ef9e03
Original Commit: r51 | ods15 | 2006-09-23 16:32:30 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3852
diff
changeset
|
203 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
|
204 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
|
205 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
|
206 } |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
207 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
|
208 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
|
209 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
|
210 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
211 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
|
212 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
213 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
|
214 else { |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
215 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
|
216 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
|
217 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
|
218 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
|
219 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
|
220 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
|
221 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
|
222 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
|
223 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
|
224 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
|
225 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
226 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
|
227 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
|
228 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
|
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 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
232 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
233 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
234 |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 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
|
248 } else { |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
249 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
|
250 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
251 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
252 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
253 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
|
254 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
|
255 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
|
256 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
|
257 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
|
258 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
|
259 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
|
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 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
262 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
263 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
264 |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
265 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
|
266 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
|
267 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
|
268 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
|
269 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
|
270 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
|
271 |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
272 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
|
273 venc->sample_rate = avccontext->sample_rate; |
3876
cd4236d3d477
Original Commit: r76 | ods15 | 2006-09-29 13:16:37 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3875
diff
changeset
|
274 venc->blocksize[0] = venc->blocksize[1] = 11; |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
275 |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
276 venc->ncodebooks = 15 + 1 + 8; |
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 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
|
278 |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
279 int codebook0[] = { 2, 10, 8, 14, 7, 12, 11, 14, 1, 5, 3, 7, 4, 9, 7, 13, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
280 int codebook1[] = { 1, 4, 2, 6, 3, 7, 5, 7, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
281 int codebook2[] = { 1, 5, 7, 21, 5, 8, 9, 21, 10, 9, 12, 20, 20, 16, 20, 20, 4, 8, 9, 20, 6, 8, 9, 20, 11, 11, 13, 20, 20, 15, 17, 20, 9, 11, 14, 20, 8, 10, 15, 20, 11, 13, 15, 20, 20, 20, 20, 20, 20, 20, 20, 20, 13, 20, 20, 20, 18, 18, 20, 20, 20, 20, 20, 20, 3, 6, 8, 20, 6, 7, 9, 20, 10, 9, 12, 20, 20, 20, 20, 20, 5, 7, 9, 20, 6, 6, 9, 20, 10, 9, 12, 20, 20, 20, 20, 20, 8, 10, 13, 20, 8, 9, 12, 20, 11, 10, 12, 20, 20, 20, 20, 20, 18, 20, 20, 20, 15, 17, 18, 20, 18, 17, 18, 20, 20, 20, 20, 20, 7, 10, 12, 20, 8, 9, 11, 20, 14, 13, 14, 20, 20, 20, 20, 20, 6, 9, 12, 20, 7, 8, 11, 20, 12, 11, 13, 20, 20, 20, 20, 20, 9, 11, 15, 20, 8, 10, 14, 20, 12, 11, 14, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 11, 16, 18, 20, 15, 15, 17, 20, 20, 17, 20, 20, 20, 20, 20, 20, 9, 14, 16, 20, 12, 12, 15, 20, 17, 15, 18, 20, 20, 20, 20, 20, 16, 19, 18, 20, 15, 16, 20, 20, 17, 17, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
282 int codebook3[] = { 2, 3, 7, 13, 4, 4, 7, 15, 8, 6, 9, 17, 21, 16, 15, 21, 2, 5, 7, 11, 5, 5, 7, 14, 9, 7, 10, 16, 17, 15, 16, 21, 4, 7, 10, 17, 7, 7, 9, 15, 11, 9, 11, 16, 21, 18, 15, 21, 18, 21, 21, 21, 15, 17, 17, 19, 21, 19, 18, 20, 21, 21, 21, 20, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
283 int codebook4[] = { 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 5, 7, 5, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, 10, 6, 10, 6, 11, 6, 11, 7, 11, 7, 12, 7, 12, 7, 12, 7, 12, 7, 12, 7, 12, 7, 12, 7, 12, 8, 13, 8, 12, 8, 12, 8, 13, 8, 13, 9, 13, 9, 13, 9, 13, 9, 12, 10, 12, 10, 13, 10, 14, 11, 14, 12, 14, 13, 14, 13, 14, 14, 15, 16, 15, 15, 15, 14, 15, 17, 21, 22, 22, 21, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
284 int codebook5[] = { 2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
285 int codebook6[] = { 8, 5, 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 8, 4, 8, 4, 9, 5, 9, 5, 9, 5, 9, 5, 9, 6, 10, 6, 10, 7, 10, 8, 11, 9, 11, 11, 12, 13, 12, 14, 13, 15, 13, 15, 14, 16, 14, 17, 15, 17, 15, 15, 16, 16, 15, 16, 16, 16, 15, 18, 16, 15, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
286 int codebook7[] = { 1, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 9, 8, 10, 9, 10, 9, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
287 int codebook8[] = { 4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 5, 6, 5, 6, 5, 7, 5, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 9, 8, 9, 9, 9, 9, 10, 10, 10, 11, 9, 12, 9, 12, 9, 15, 10, 14, 9, 13, 10, 13, 10, 12, 10, 12, 10, 13, 10, 12, 11, 13, 11, 14, 12, 13, 13, 14, 14, 13, 14, 15, 14, 16, 13, 13, 14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
288 int codebook9[] = { 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, 4, 5, 5, 5, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
289 int codebook10[] = { 3, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 5, 7, 5, 8, 6, 8, 6, 9, 7, 10, 7, 10, 8, 10, 8, 11, 9, 11, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
290 int codebook11[] = { 3, 7, 3, 8, 3, 10, 3, 8, 3, 9, 3, 8, 4, 9, 4, 9, 5, 9, 6, 10, 6, 9, 7, 11, 7, 12, 9, 13, 10, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
291 int codebook12[] = { 4, 5, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 5, 4, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
292 int codebook13[] = { 4, 2, 4, 2, 5, 3, 5, 4, 6, 6, 6, 7, 7, 8, 7, 8, 7, 8, 7, 9, 8, 9, 8, 9, 8, 10, 8, 11, 9, 12, 9, 12, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
293 int codebook14[] = { 2, 5, 2, 6, 3, 6, 4, 7, 4, 7, 5, 9, 5, 11, 6, 11, 6, 11, 7, 11, 6, 11, 6, 11, 9, 11, 8, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
294 |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
295 int codebook_sizes[] = { 16, 8, 256, 64, 128, 32, 96, 32, 96, 17, 32, 78, 17, 32, 78 }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
296 int * codebook_lens[] = { codebook0, codebook1, codebook2, codebook3, codebook4, codebook5, codebook6, codebook7, |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
297 codebook8, codebook9, codebook10, codebook11, codebook12, codebook13, codebook14 }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
298 |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
299 // codebook 0..14 - floor1 book, values 0..255 |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
300 for (book = 0; book < 15; book++) { |
3879
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
301 cb = &venc->codebooks[book]; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
302 cb->nentries = codebook_sizes[book]; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
303 cb->entries = av_malloc(sizeof(cb_entry_t) * cb->nentries); |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
304 for (i = 0; i < cb->nentries; i++) cb->entries[i].len = codebook_lens[book][i]; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
305 cb->ndimentions = 0; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
306 cb->min = 0.; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
307 cb->delta = 0.; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
308 cb->seq_p = 0; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
309 cb->lookup = 0; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
310 cb->quantlist = NULL; |
883cdae879a6
Original Commit: r79 | ods15 | 2006-09-29 15:15:26 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3878
diff
changeset
|
311 ready_codebook(cb); |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
312 } |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
313 |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
314 // codebook 15 - residue classbook, values 0..1, dimentions 4 |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
315 cb = &venc->codebooks[15]; |
3822
a7f46bc1fea0
Original Commit: r16 | ods15 | 2006-09-22 12:27:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3821
diff
changeset
|
316 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
|
317 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
|
318 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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
327 // codebook 16..23 - 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
|
328 for (book = 0; book < 8; book++) { |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
329 cb = &venc->codebooks[16 + book]; |
3820
3cfdf99da951
Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3819
diff
changeset
|
330 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
|
331 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
|
332 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
|
333 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
|
334 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
|
335 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
|
336 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
|
337 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
|
338 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
|
339 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
|
340 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
|
341 } |
3818
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
342 |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
343 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
|
344 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
|
345 |
c583e895f980
Original Commit: r20 | ods15 | 2006-09-22 13:12:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3825
diff
changeset
|
346 // 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
|
347 fc = &venc->floors[0]; |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
348 fc->partitions = 8; |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
349 fc->partition_to_class = av_malloc(sizeof(int) * fc->partitions); |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
350 fc->nclasses = 0; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
351 for (i = 0; i < fc->partitions; i++) { |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
352 int a[] = {0,1,2,2,3,3,4,4}; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
353 fc->partition_to_class[i] = a[i]; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
354 fc->nclasses = FFMAX(fc->nclasses, fc->partition_to_class[i]); |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
355 } |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
356 fc->nclasses++; |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
357 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
|
358 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
|
359 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
|
360 int j, books; |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
361 int dim[] = {3,4,3,4,3}; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
362 int subclass[] = {0,1,1,2,2}; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
363 int masterbook[] = {0/*none*/,0,1,2,3}; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
364 int * nbooks[] = { |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
365 (int[]){ 4 }, |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
366 (int[]){ 5, 6 }, |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
367 (int[]){ 7, 8 }, |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
368 (int[]){ -1, 9, 10, 11 }, |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
369 (int[]){ -1, 12, 13, 14 }, |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
370 }; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
371 c->dim = dim[i]; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
372 c->subclass = subclass[i]; |
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
373 c->masterbook = masterbook[i]; |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
374 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
|
375 c->books = av_malloc(sizeof(int) * books); |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
376 for (j = 0; j < books; j++) c->books[j] = nbooks[i][j]; |
3825
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
377 } |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
378 fc->multiplier = 2; |
3854
8de41fcc6500
Original Commit: r52 | ods15 | 2006-09-23 17:38:43 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3853
diff
changeset
|
379 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
|
380 |
9983437a00a1
Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3824
diff
changeset
|
381 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
|
382 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
|
383 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
|
384 |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
385 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
|
386 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
|
387 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
|
388 for (i = 2; i < fc->values; i++) { |
3866
4d5f73f10198
Original Commit: r66 | ods15 | 2006-09-25 18:42:13 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3865
diff
changeset
|
389 /*int a = i - 1; |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
390 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
|
391 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
|
392 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
|
393 g = 1 << (fc->rangebits - g); |
3866
4d5f73f10198
Original Commit: r66 | ods15 | 2006-09-25 18:42:13 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3865
diff
changeset
|
394 fc->list[i].x = g + a*2*g;*/ |
3876
cd4236d3d477
Original Commit: r76 | ods15 | 2006-09-29 13:16:37 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3875
diff
changeset
|
395 //int a[] = {14, 4, 58, 2, 8, 28, 90}; |
cd4236d3d477
Original Commit: r76 | ods15 | 2006-09-29 13:16:37 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3875
diff
changeset
|
396 int a[] = {93,23,372,6,46,186,750,14,33,65,130,260,556,3,10,18,28,39,55,79,111,158,220,312,464,650,850}; |
3866
4d5f73f10198
Original Commit: r66 | ods15 | 2006-09-25 18:42:13 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3865
diff
changeset
|
397 fc->list[i].x = a[i - 2]; |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
398 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
399 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
|
400 |
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
401 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
|
402 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
|
403 |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
404 // 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
|
405 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
|
406 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
|
407 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
|
408 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
|
409 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
|
410 rc->classifications = 2; |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
411 rc->classbook = 15; |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
412 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
|
413 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
|
414 int j; |
3878
30de59a39f6e
Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3877
diff
changeset
|
415 for (j = 0; j < 8; j++) rc->books[i][j] = 16 + j; |
3868
46441c25abdc
Original Commit: r68 | ods15 | 2006-09-25 21:15:09 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3867
diff
changeset
|
416 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
|
417 } |
3828
f9c449155a0e
Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3827
diff
changeset
|
418 |
3827
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
419 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
|
420 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
|
421 |
3829
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
422 // 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
|
423 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
|
424 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
|
425 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 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
|
432 } |
3870
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
433 mc->coupling_steps = venc->channels == 2 ? 1 : 0; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
434 mc->magnitude = av_malloc(sizeof(int) * mc->coupling_steps); |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
435 mc->angle = av_malloc(sizeof(int) * mc->coupling_steps); |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
436 if (mc->coupling_steps) { |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
437 mc->magnitude[0] = 0; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
438 mc->angle[0] = 1; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
439 } |
3829
e8e340cbc7f2
Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3828
diff
changeset
|
440 |
3827
91f130d6c3f4
Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3826
diff
changeset
|
441 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
|
442 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
|
443 |
477ee30c6fc6
Original Commit: r24 | ods15 | 2006-09-22 13:57:09 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3829
diff
changeset
|
444 // 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
|
445 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
|
446 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
|
447 |
3842
5f8cfa1a6fdb
Original Commit: r39 | ods15 | 2006-09-23 09:36:11 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3841
diff
changeset
|
448 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
|
449 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
|
450 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
|
451 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
|
452 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
|
453 |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
454 { |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
455 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
|
456 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
|
457 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
|
458 } |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
459 |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
460 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
|
461 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
|
462 } |
6a737f2d852e
Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents:
3817
diff
changeset
|
463 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
464 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
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 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
|
472 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
473 |
3810
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
474 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
|
475 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
|
476 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
|
477 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
478 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
|
479 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
|
480 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
|
481 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
482 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
|
483 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
|
484 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
485 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
|
486 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
|
487 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 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
|
494 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
|
495 len++; |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
496 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
497 } else { |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
498 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
|
499 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
|
500 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
|
501 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
|
502 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
503 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
|
504 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
|
505 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
|
506 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
507 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
508 |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
509 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
|
510 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
|
511 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
|
512 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
|
513 |
3823
41ad23b61a2c
Original Commit: r17 | ods15 | 2006-09-22 12:28:28 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3822
diff
changeset
|
514 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
|
515 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
516 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
|
517 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
|
518 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
519 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
|
520 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
|
521 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
522 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
|
523 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
524 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
525 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
526 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
|
527 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
|
528 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
529 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
|
530 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
531 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
|
532 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
533 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
|
534 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
535 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
|
536 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
|
537 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
538 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
|
539 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
|
540 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
541 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
|
542 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
543 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
|
544 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
545 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
|
546 } |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
547 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
548 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
|
549 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
|
550 |
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
551 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
|
552 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
553 |
3814
464eca766731
Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3813
diff
changeset
|
554 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
|
555 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
|
556 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
557 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
|
558 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
559 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
|
560 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
|
561 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
|
562 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
|
563 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
|
564 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
565 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
|
566 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
|
567 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
|
568 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
569 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
|
570 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
|
571 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
572 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
|
573 } |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
574 |
3fa081422f78
Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3814
diff
changeset
|
575 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
|
576 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
|
577 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
|
578 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
|
579 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
|
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 } |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
582 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
583 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
|
584 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
|
585 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
|
586 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
|
587 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
|
588 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
|
589 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
590 // 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
|
591 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
|
592 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
|
593 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
|
594 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
|
595 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
|
596 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
|
597 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
|
598 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
|
599 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
|
600 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
|
601 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
|
602 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
|
603 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
604 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
|
605 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
|
606 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
|
607 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
|
608 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
609 // 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
|
610 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
|
611 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
|
612 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
|
613 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
|
614 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
|
615 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
|
616 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
617 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
|
618 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
|
619 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
|
620 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
|
621 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
622 // 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
|
623 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
|
624 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
|
625 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
|
626 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
627 // codebooks |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
628 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
|
629 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
|
630 |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
631 // 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
|
632 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
|
633 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
|
634 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
635 // floors |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
636 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
|
637 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
|
638 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
639 // residues |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
640 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
|
641 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
|
642 |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
643 // mappings |
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
644 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
|
645 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
|
646 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
|
647 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
|
648 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
|
649 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
650 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
|
651 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
|
652 |
3870
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
653 put_bits(&pb, 1, !!mc->coupling_steps); |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
654 if (mc->coupling_steps) { |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
655 put_bits(&pb, 8, mc->coupling_steps - 1); |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
656 for (j = 0; j < mc->coupling_steps; j++) { |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
657 put_bits(&pb, ilog(venc->channels - 1), mc->magnitude[j]); |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
658 put_bits(&pb, ilog(venc->channels - 1), mc->angle[j]); |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
659 } |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
660 } |
3816
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
661 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
662 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
|
663 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
664 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
|
665 |
6eba53afa0b0
Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3815
diff
changeset
|
666 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
|
667 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
|
668 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
|
669 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
|
670 } |
3813
95b70f8bc29e
Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents:
3812
diff
changeset
|
671 } |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
672 |
3817
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
673 // modes |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
674 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
|
675 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
|
676 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
|
677 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
|
678 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
|
679 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
|
680 } |
3ca15f0d4882
Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents:
3816
diff
changeset
|
681 |
3836
ff31b13b57df
Original Commit: r32 | ods15 | 2006-09-22 18:37:50 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3835
diff
changeset
|
682 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
|
683 |
3811
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
684 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
|
685 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
|
686 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
687 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
|
688 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
|
689 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
690 *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
|
691 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
|
692 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
|
693 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
|
694 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
|
695 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
|
696 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
|
697 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
|
698 } |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
699 |
9f6acced986e
Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents:
3810
diff
changeset
|
700 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
|
701 } |
a8bebf3e9cb7
Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents:
3809
diff
changeset
|
702 |
3861
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
703 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
|
704 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
|
705 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
|
706 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
|
707 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
|
708 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
|
709 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
|
710 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
|
711 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
|
712 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
|
713 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
|
714 |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
715 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
|
716 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
|
717 average /= end - begin; |
3868
46441c25abdc
Original Commit: r68 | ods15 | 2006-09-25 21:15:09 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3867
diff
changeset
|
718 average /= 32; // MAGIC! |
3869
9b1217a7e09f
Original Commit: r69 | ods15 | 2006-09-27 20:27:50 +0300 (Wed, 27 Sep 2006) | 2 lines
ods15
parents:
3868
diff
changeset
|
719 for (j = 0; j < range - 1; j++) if (floor1_inverse_db_table[j * fc->multiplier] > average) break; |
3861
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
720 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
|
721 } |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
722 } |
b98ea563e9bc
Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3860
diff
changeset
|
723 |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
724 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
|
725 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
|
726 } |
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 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
|
729 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
|
730 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
|
731 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
|
732 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
|
733 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
|
734 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
|
735 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
|
736 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
|
737 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
|
738 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
|
739 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
|
740 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
|
741 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
|
742 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
|
743 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
|
744 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
|
745 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
|
746 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
|
747 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
|
748 } else { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
749 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
|
750 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
751 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
|
752 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
753 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
754 |
3862
ee9379fc77a9
Original Commit: r62 | ods15 | 2006-09-25 13:12:07 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3861
diff
changeset
|
755 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
|
756 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
|
757 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
|
758 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
|
759 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
|
760 |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
761 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
|
762 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
|
763 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
|
764 |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
765 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
|
766 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
|
767 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
|
768 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
|
769 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
|
770 fc->list[i].x); |
3865
04d496813135
Original Commit: r65 | ods15 | 2006-09-25 18:40:19 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3864
diff
changeset
|
771 int highroom = range - predicted; |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
772 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
|
773 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
|
774 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
|
775 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
|
776 continue; |
3864
df84b5d1a8c2
Original Commit: r64 | ods15 | 2006-09-25 18:39:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3863
diff
changeset
|
777 } else { |
df84b5d1a8c2
Original Commit: r64 | ods15 | 2006-09-25 18:39:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3863
diff
changeset
|
778 if (!coded[fc->list[i].low]) coded[fc->list[i].low] = -1; |
df84b5d1a8c2
Original Commit: r64 | ods15 | 2006-09-25 18:39:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3863
diff
changeset
|
779 if (!coded[fc->list[i].high]) coded[fc->list[i].high] = -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
|
780 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
781 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
|
782 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
|
783 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
|
784 } else { |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
785 if (predicted - posts[i] > room) coded[i] = predicted - posts[i] + highroom - 1; |
3864
df84b5d1a8c2
Original Commit: r64 | ods15 | 2006-09-25 18:39:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3863
diff
changeset
|
786 else coded[i] = ((predicted - posts[i]) << 1) - 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
|
787 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
788 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
789 |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
790 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
|
791 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
|
792 floor_class_t * c = &fc->classes[fc->partition_to_class[i]]; |
3874
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
793 int k, cval = 0, csub = 1<<c->subclass; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
794 if (c->subclass) { |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
795 codebook_t * book = &venc->codebooks[c->masterbook]; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
796 int cshift = 0; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
797 for (k = 0; k < c->dim; k++) { |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
798 int l; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
799 for (l = 0; l < csub; l++) { |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
800 int maxval = 1; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
801 if (c->books[l] != -1) maxval = venc->codebooks[c->books[l]].nentries; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
802 // coded could be -1, but this still works, cause thats 0 |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
803 if (coded[counter + k] < maxval) break; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
804 } |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
805 assert(l != csub); |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
806 cval |= l << cshift; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
807 cshift += c->subclass; |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
808 } |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
809 assert(cval < book->nentries); |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
810 put_bits(pb, book->entries[cval].len, book->entries[cval].codeword); |
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
811 } |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
812 for (k = 0; k < c->dim; k++) { |
3877
00623377043e
Original Commit: r77 | ods15 | 2006-09-29 15:12:56 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3876
diff
changeset
|
813 int book = c->books[cval & (csub-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
|
814 int entry = coded[counter++]; |
3874
84890fea8074
Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3873
diff
changeset
|
815 cval >>= c->subclass; |
3877
00623377043e
Original Commit: r77 | ods15 | 2006-09-29 15:12:56 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3876
diff
changeset
|
816 if (book == -1) continue; |
3864
df84b5d1a8c2
Original Commit: r64 | ods15 | 2006-09-25 18:39:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3863
diff
changeset
|
817 if (entry == -1) entry = 0; |
3877
00623377043e
Original Commit: r77 | ods15 | 2006-09-29 15:12:56 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3876
diff
changeset
|
818 assert(entry < venc->codebooks[book].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
|
819 assert(entry >= 0); |
3877
00623377043e
Original Commit: r77 | ods15 | 2006-09-29 15:12:56 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents:
3876
diff
changeset
|
820 put_bits(pb, venc->codebooks[book].entries[entry].len, venc->codebooks[book].entries[entry].codeword); |
3860
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
821 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
822 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
823 |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
824 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
|
825 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
|
826 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
|
827 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
|
828 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
|
829 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
|
830 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
|
831 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
|
832 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
|
833 } |
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
834 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
|
835 } |
3863
2c8d1cadd86e
Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents:
3862
diff
changeset
|
836 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
|
837 } |
be0344cea4ea
Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3859
diff
changeset
|
838 |
3858
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
839 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
|
840 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
|
841 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
|
842 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
|
843 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
|
844 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
|
845 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
|
846 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
|
847 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
|
848 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
|
849 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
|
850 } |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
851 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
|
852 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
|
853 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
|
854 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
855 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
856 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
|
857 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
|
858 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
859 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
860 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
|
861 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
|
862 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
|
863 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
|
864 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
|
865 int classwords = venc->codebooks[rc->classbook].ndimentions; |
3871
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
866 int real_ch = channels; |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
867 |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
868 if (rc->type == 2) channels = 1; |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
869 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
870 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
|
871 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
|
872 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
|
873 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
|
874 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
|
875 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
|
876 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
|
877 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
|
878 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
|
879 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
|
880 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
881 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
882 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
|
883 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
|
884 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
|
885 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
|
886 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
|
887 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
|
888 |
3871
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
889 assert(rc->type == 0 || rc->type == 2); |
3858
70b4bc721531
Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3857
diff
changeset
|
890 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
|
891 |
3871
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
892 if (rc->type == 0) { |
3872
9f99e471bf72
Original Commit: r72 | ods15 | 2006-09-28 21:00:47 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3871
diff
changeset
|
893 for (k = 0; k < psize; k += book->ndimentions) { |
9f99e471bf72
Original Commit: r72 | ods15 | 2006-09-28 21:00:47 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3871
diff
changeset
|
894 float * a = put_vector(book, pb, &buf[k]); |
9f99e471bf72
Original Commit: r72 | ods15 | 2006-09-28 21:00:47 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3871
diff
changeset
|
895 int l; |
9f99e471bf72
Original Commit: r72 | ods15 | 2006-09-28 21:00:47 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3871
diff
changeset
|
896 for (l = 0; l < book->ndimentions; l++) buf[k + l] -= a[l]; |
9f99e471bf72
Original Commit: r72 | ods15 | 2006-09-28 21:00:47 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3871
diff
changeset
|
897 } |
3871
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
898 } else { |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
899 for (k = 0; k < psize; k += book->ndimentions) { |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
900 int dim = book->ndimentions, s = rc->begin + p * psize, l; |
3873
41bddab6a00b
Original Commit: r73 | ods15 | 2006-09-28 21:01:59 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3872
diff
changeset
|
901 float vec[dim], * a = vec; |
3871
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
902 for (l = s + k; l < s + k + dim; l++) |
3873
41bddab6a00b
Original Commit: r73 | ods15 | 2006-09-28 21:01:59 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3872
diff
changeset
|
903 *a++ = coeffs[(l % real_ch) * samples + l / real_ch]; |
3871
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
904 a = put_vector(book, pb, vec); |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
905 for (l = s + k; l < s + k + dim; l++) |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
906 coeffs[(l % real_ch) * samples + l / real_ch] -= *a++; |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
907 } |
7fffd3ab056a
Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3870
diff
changeset
|
908 } |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
909 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
910 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
911 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
912 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
913 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
914 |
3859
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
915 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
|
916 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
|
917 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
|
918 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
|
919 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
|
920 // 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
|
921 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
922 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
|
923 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
924 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
|
925 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
|
926 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
|
927 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
928 } else { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
929 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
|
930 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
|
931 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
932 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
933 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
934 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
|
935 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
|
936 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
|
937 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
|
938 for (i = 0; i < samples; i++, j += venc->channels) |
3867
edd2496ee02a
Original Commit: r67 | ods15 | 2006-09-25 20:33:06 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3866
diff
changeset
|
939 offset[i] = audio[j] / 32768. / n * win[window_len - i - 1]; |
3859
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
940 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
941 } else { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
942 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
|
943 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
|
944 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
945 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
946 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
947 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
|
948 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
|
949 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
950 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
951 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
|
952 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
|
953 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
|
954 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
|
955 for (i = 0; i < samples; i++, j += venc->channels) |
3867
edd2496ee02a
Original Commit: r67 | ods15 | 2006-09-25 20:33:06 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents:
3866
diff
changeset
|
956 offset[i] = audio[j] / 32768. / n * win[i]; |
3859
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
957 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
958 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
|
959 } else { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
960 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
|
961 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
962 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
|
963 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
964 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
965 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
|
966 { |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
967 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
|
968 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
969 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
|
970 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
971 //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
|
972 //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
|
973 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
974 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
|
975 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
976 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
|
977 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
978 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
|
979 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
|
980 |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
981 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
|
982 } |
0d0bd4b2baef
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3858
diff
changeset
|
983 |
3808 | 984 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) |
985 { | |
986 venc_context_t * venc = avccontext->priv_data; | |
987 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
|
988 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
|
989 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
|
990 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
|
991 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
|
992 int i; |
3808 | 993 |
3842
5f8cfa1a6fdb
Original Commit: r39 | ods15 | 2006-09-23 09:36:11 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3841
diff
changeset
|
994 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
|
995 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
|
996 |
3839
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
997 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
|
998 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
999 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
|
1000 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
1001 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
|
1002 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
1003 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
|
1004 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
|
1005 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
|
1006 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
|
1007 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
|
1008 } |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
1009 |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
1010 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
|
1011 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
|
1012 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
|
1013 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
|
1014 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
|
1015 } |
c5ec6d7710ba
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3838
diff
changeset
|
1016 |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
1017 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
|
1018 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
|
1019 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
|
1020 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
|
1021 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
1022 } |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
1023 |
3870
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1024 for (i = 0; i < mapping->coupling_steps; i++) { |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1025 float * mag = venc->coeffs + mapping->magnitude[i] * samples; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1026 float * ang = venc->coeffs + mapping->angle[i] * samples; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1027 int j; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1028 for (j = 0; j < samples; j++) { |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1029 float m = mag[j]; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1030 float a = ang[j]; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1031 if (m > 0) { |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1032 ang[j] = m - a; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1033 if (a > m) mag[j] = a; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1034 else mag[j] = m; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1035 } else { |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1036 ang[j] = a - m; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1037 if (a > m) mag[j] = m; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1038 else mag[j] = a; |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1039 } |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1040 } |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1041 } |
986fb3b8fe60
Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents:
3869
diff
changeset
|
1042 |
3844
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
1043 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
|
1044 |
bffe869bc19c
Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents:
3843
diff
changeset
|
1045 return (put_bits_count(&pb) + 7) / 8; |
3808 | 1046 } |
1047 | |
1048 | |
1049 static int vorbis_encode_close(AVCodecContext * avccontext) | |
1050 { | |
1051 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
|
1052 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
|
1053 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1054 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
|
1055 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
|
1056 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
|
1057 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
|
1058 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1059 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
|
1060 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1061 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
|
1062 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
|
1063 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
|
1064 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
|
1065 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
|
1066 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
|
1067 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
|
1068 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
|
1069 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1070 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
|
1071 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1072 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
|
1073 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
|
1074 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1075 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
|
1076 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1077 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
|
1078 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
|
1079 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
|
1080 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
|
1081 } |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1082 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
|
1083 |
7d27ba61600e
Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents:
3830
diff
changeset
|
1084 av_freep(&venc->modes); |
3808 | 1085 |
3841
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
1086 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
|
1087 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
|
1088 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
|
1089 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
|
1090 |
6591b55f6482
Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents:
3840
diff
changeset
|
1091 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
|
1092 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
|
1093 |
3808 | 1094 av_freep(&avccontext->coded_frame); |
1095 av_freep(&avccontext->extradata); | |
1096 | |
1097 return 0 ; | |
1098 } | |
1099 | |
3857
2d1d529a90d4
Original Commit: r56 | ods15 | 2006-09-24 13:55:01 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents:
3856
diff
changeset
|
1100 AVCodec vorbis_encoder = { |
3808 | 1101 "vorbis", |
1102 CODEC_TYPE_AUDIO, | |
1103 CODEC_ID_VORBIS, | |
1104 sizeof(venc_context_t), | |
1105 vorbis_encode_init, | |
1106 vorbis_encode_frame, | |
1107 vorbis_encode_close, | |
1108 .capabilities= CODEC_CAP_DELAY, | |
1109 }; |