annotate vorbis_enc.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 66c6184769af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1 /*
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
2 * copyright (c) 2006 Oded Shimon <ods15@ods15.dyndns.org>
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
3 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3919
diff changeset
4 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3919
diff changeset
5 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3919
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3919
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
10 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3919
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
14 * Lesser General Public License for more details.
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
15 *
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3919
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
5215
2b72f9bc4f06 license header consistency cosmetics
diego
parents: 5127
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
19 */
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
20
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
21 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 11560
diff changeset
22 * @file
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
23 * Native Vorbis encoder.
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
24 * @author Oded Shimon <ods15@ods15.dyndns.org>
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
25 */
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
26
3908
045c650f0951 Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3907
diff changeset
27 #include <float.h>
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
28 #include "avcodec.h"
3892
4fb6be21be4b Original Commit: r93 | ods15 | 2006-09-30 22:02:21 +0300 (Sat, 30 Sep 2006) | 2 lines
ods15
parents: 3891
diff changeset
29 #include "dsputil.h"
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents: 10630
diff changeset
30 #include "fft.h"
3841
6591b55f6482 Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3840
diff changeset
31 #include "vorbis.h"
3915
a4f6e6981930 add vorbis_enc_data.h, remove codebook data from vorbis_enc.c
ods15
parents: 3913
diff changeset
32 #include "vorbis_enc_data.h"
3841
6591b55f6482 Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3840
diff changeset
33
8030
a512ac8fa540 Use of new bitstream in vorbis_enc.c.
benoit
parents: 7838
diff changeset
34 #define BITSTREAM_WRITER_LE
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents: 8718
diff changeset
35 #include "put_bits.h"
8030
a512ac8fa540 Use of new bitstream in vorbis_enc.c.
benoit
parents: 7838
diff changeset
36
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
37 #undef NDEBUG
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
38 #include <assert.h>
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
39
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
40 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
41 int nentries;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
42 uint8_t *lens;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
43 uint32_t *codewords;
3810
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 ndimentions;
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
45 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
46 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
47 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
48 int lookup;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
49 int *quantlist;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
50 float *dimentions;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
51 float *pow2;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
52 } vorbis_enc_codebook;
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
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
54 typedef struct {
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
55 int dim;
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
56 int subclass;
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
57 int masterbook;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
58 int *books;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
59 } vorbis_enc_floor_class;
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
60
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
61 typedef struct {
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
62 int partitions;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
63 int *partition_to_class;
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
64 int nclasses;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
65 vorbis_enc_floor_class *classes;
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
66 int multiplier;
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
67 int rangebits;
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
68 int values;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
69 vorbis_floor1_entry *list;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
70 } vorbis_enc_floor;
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
71
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
72 typedef struct {
3815
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
73 int type;
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
74 int begin;
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
75 int end;
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
76 int partition_size;
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
77 int classifications;
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
78 int classbook;
3897
11caa885c449 Original Commit: r98 | ods15 | 2006-10-01 10:15:33 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3896
diff changeset
79 int8_t (*books)[8];
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
80 float (*maxes)[2];
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
81 } vorbis_enc_residue;
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
82
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
83 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
84 int submaps;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
85 int *mux;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
86 int *floor;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
87 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
88 int coupling_steps;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
89 int *magnitude;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
90 int *angle;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
91 } vorbis_enc_mapping;
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
92
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
93 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
94 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
95 int mapping;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
96 } vorbis_enc_mode;
3817
3ca15f0d4882 Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents: 3816
diff changeset
97
3ca15f0d4882 Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents: 3816
diff changeset
98 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
99 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
100 int sample_rate;
3913
f2204277a928 Original Commit: r114 | ods15 | 2006-10-01 21:38:37 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3912
diff changeset
101 int log2_blocksize[2];
10199
38ab367d4231 Merge FFTContext and MDCTContext
mru
parents: 10145
diff changeset
102 FFTContext mdct[2];
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
103 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
104 int have_saved;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
105 float *saved;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
106 float *samples;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
107 float *floor; // also used for tmp values for mdct
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
108 float *coeffs; // also used for residue after floor
3891
50e912426a32 Original Commit: r92 | ods15 | 2006-09-30 12:13:47 +0300 (Sat, 30 Sep 2006) | 3 lines
ods15
parents: 3890
diff changeset
109 float quality;
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
110
3810
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
111 int ncodebooks;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
112 vorbis_enc_codebook *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
113
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
114 int nfloors;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
115 vorbis_enc_floor *floors;
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
116
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
117 int nresidues;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
118 vorbis_enc_residue *residues;
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 nmappings;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
121 vorbis_enc_mapping *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
122
3ca15f0d4882 Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents: 3816
diff changeset
123 int nmodes;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
124 vorbis_enc_mode *modes;
7838
88f4153caa21 vorbis_enc : set coded_frame->pts value to running sample count.
jai_menon
parents: 7546
diff changeset
125
88f4153caa21 vorbis_enc : set coded_frame->pts value to running sample count.
jai_menon
parents: 7546
diff changeset
126 int64_t sample_count;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
127 } vorbis_enc_context;
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
128
12513
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
129 #define MAX_CHANNELS 2
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
130 #define MAX_CODEBOOK_DIM 8
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
131
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
132 #define MAX_FLOOR_CLASS_DIM 4
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
133 #define NUM_FLOOR_PARTITIONS 8
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
134 #define MAX_FLOOR_VALUES (MAX_FLOOR_CLASS_DIM*NUM_FLOOR_PARTITIONS+2)
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
135
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
136 #define RESIDUE_SIZE 1600
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
137 #define RESIDUE_PART_SIZE 32
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
138 #define NUM_RESIDUE_PARTITIONS (RESIDUE_SIZE/RESIDUE_PART_SIZE)
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
139
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
140 static inline void put_codeword(PutBitContext *pb, vorbis_enc_codebook *cb,
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
141 int entry)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
142 {
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
143 assert(entry >= 0);
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
144 assert(entry < cb->nentries);
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
145 assert(cb->lens[entry]);
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
146 put_bits(pb, cb->lens[entry], cb->codewords[entry]);
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
147 }
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
148
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
149 static int cb_lookup_vals(int lookup, int dimentions, int entries)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
150 {
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
151 if (lookup == 1)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
152 return ff_vorbis_nth_root(entries, dimentions);
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
153 else if (lookup == 2)
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
154 return dimentions *entries;
3818
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
155 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
156 }
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
157
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
158 static void ready_codebook(vorbis_enc_codebook *cb)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
159 {
3818
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
160 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
161
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
162 ff_vorbis_len2vlc(cb->lens, cb->codewords, cb->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
163
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
164 if (!cb->lookup) {
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
165 cb->pow2 = cb->dimentions = NULL;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
166 } else {
3818
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
167 int 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
168 cb->dimentions = av_malloc(sizeof(float) * cb->nentries * cb->ndimentions);
3908
045c650f0951 Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3907
diff changeset
169 cb->pow2 = av_mallocz(sizeof(float) * cb->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
170 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
171 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
172 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
173 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
174 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
175 int off;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
176 if (cb->lookup == 1)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
177 off = (i / div) % vals; // lookup type 1
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
178 else
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
179 off = i * cb->ndimentions + j; // lookup type 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
180
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
181 cb->dimentions[i * cb->ndimentions + j] = last + cb->min + cb->quantlist[off] * cb->delta;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
182 if (cb->seq_p)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
183 last = cb->dimentions[i * cb->ndimentions + j];
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
184 cb->pow2[i] += cb->dimentions[i * cb->ndimentions + j] * cb->dimentions[i * cb->ndimentions + j];
3818
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
185 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
186 }
3908
045c650f0951 Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3907
diff changeset
187 cb->pow2[i] /= 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
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 }
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
190 }
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
191
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
192 static void ready_residue(vorbis_enc_residue *rc, vorbis_enc_context *venc)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
193 {
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
194 int i;
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
195 assert(rc->type == 2);
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
196 rc->maxes = av_mallocz(sizeof(float[2]) * rc->classifications);
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
197 for (i = 0; i < rc->classifications; i++) {
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
198 int j;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
199 vorbis_enc_codebook * cb;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
200 for (j = 0; j < 8; j++)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
201 if (rc->books[i][j] != -1)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
202 break;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
203 if (j == 8) // zero
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
204 continue;
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
205 cb = &venc->codebooks[rc->books[i][j]];
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
206 assert(cb->ndimentions >= 2);
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
207 assert(cb->lookup);
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
208
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
209 for (j = 0; j < cb->nentries; j++) {
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
210 float a;
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
211 if (!cb->lens[j])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
212 continue;
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
213 a = fabs(cb->dimentions[j * cb->ndimentions]);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
214 if (a > rc->maxes[i][0])
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
215 rc->maxes[i][0] = a;
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
216 a = fabs(cb->dimentions[j * cb->ndimentions + 1]);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
217 if (a > rc->maxes[i][1])
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
218 rc->maxes[i][1] = a;
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
219 }
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
220 }
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
221 // small bias
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
222 for (i = 0; i < rc->classifications; i++) {
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
223 rc->maxes[i][0] += 0.8;
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
224 rc->maxes[i][1] += 0.8;
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
225 }
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
226 }
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
227
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
228 static void create_vorbis_context(vorbis_enc_context *venc,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
229 AVCodecContext *avccontext)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
230 {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
231 vorbis_enc_floor *fc;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
232 vorbis_enc_residue *rc;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
233 vorbis_enc_mapping *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
234 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
235
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
236 venc->channels = avccontext->channels;
3893
7c51248a63d3 Original Commit: r94 | ods15 | 2006-09-30 22:09:33 +0300 (Sat, 30 Sep 2006) | 2 lines
ods15
parents: 3892
diff changeset
237 venc->sample_rate = avccontext->sample_rate;
3913
f2204277a928 Original Commit: r114 | ods15 | 2006-10-01 21:38:37 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3912
diff changeset
238 venc->log2_blocksize[0] = venc->log2_blocksize[1] = 11;
3893
7c51248a63d3 Original Commit: r94 | ods15 | 2006-09-30 22:09:33 +0300 (Sat, 30 Sep 2006) | 2 lines
ods15
parents: 3892
diff changeset
239
8042
e70975d5ff80 uses FF_ARRAY_ELEMS() where appropriate
aurel
parents: 8030
diff changeset
240 venc->ncodebooks = FF_ARRAY_ELEMS(cvectors);
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
241 venc->codebooks = av_malloc(sizeof(vorbis_enc_codebook) * venc->ncodebooks);
3893
7c51248a63d3 Original Commit: r94 | ods15 | 2006-09-30 22:09:33 +0300 (Sat, 30 Sep 2006) | 2 lines
ods15
parents: 3892
diff changeset
242
3878
30de59a39f6e Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3877
diff changeset
243 // codebook 0..14 - floor1 book, values 0..255
3880
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
244 // codebook 15 residue masterbook
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
245 // codebook 16..29 residue
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
246 for (book = 0; book < venc->ncodebooks; book++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
247 vorbis_enc_codebook *cb = &venc->codebooks[book];
3898
c8b9218c3458 Original Commit: r99 | ods15 | 2006-10-01 11:12:44 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3897
diff changeset
248 int vals;
c8b9218c3458 Original Commit: r99 | ods15 | 2006-10-01 11:12:44 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3897
diff changeset
249 cb->ndimentions = cvectors[book].dim;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
250 cb->nentries = cvectors[book].real_len;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
251 cb->min = cvectors[book].min;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
252 cb->delta = cvectors[book].delta;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
253 cb->lookup = cvectors[book].lookup;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
254 cb->seq_p = 0;
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
255
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
256 cb->lens = av_malloc(sizeof(uint8_t) * cb->nentries);
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
257 cb->codewords = av_malloc(sizeof(uint32_t) * cb->nentries);
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
258 memcpy(cb->lens, cvectors[book].clens, cvectors[book].len);
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
259 memset(cb->lens + cvectors[book].len, 0, cb->nentries - cvectors[book].len);
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
260
3898
c8b9218c3458 Original Commit: r99 | ods15 | 2006-10-01 11:12:44 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3897
diff changeset
261 if (cb->lookup) {
3880
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
262 vals = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries);
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
263 cb->quantlist = av_malloc(sizeof(int) * vals);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
264 for (i = 0; i < vals; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
265 cb->quantlist[i] = cvectors[book].quant[i];
3898
c8b9218c3458 Original Commit: r99 | ods15 | 2006-10-01 11:12:44 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3897
diff changeset
266 } else {
c8b9218c3458 Original Commit: r99 | ods15 | 2006-10-01 11:12:44 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3897
diff changeset
267 cb->quantlist = NULL;
3883
6d15c93bce65 Original Commit: r83 | ods15 | 2006-09-29 21:06:13 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3882
diff changeset
268 }
3820
3cfdf99da951 Original Commit: r14 | ods15 | 2006-09-22 12:26:17 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3819
diff changeset
269 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
270 }
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
3825
9983437a00a1 Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3824
diff changeset
272 venc->nfloors = 1;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
273 venc->floors = av_malloc(sizeof(vorbis_enc_floor) * 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
274
c583e895f980 Original Commit: r20 | ods15 | 2006-09-22 13:12:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3825
diff changeset
275 // 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
276 fc = &venc->floors[0];
12513
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
277 fc->partitions = NUM_FLOOR_PARTITIONS;
3825
9983437a00a1 Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3824
diff changeset
278 fc->partition_to_class = av_malloc(sizeof(int) * fc->partitions);
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
279 fc->nclasses = 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
280 for (i = 0; i < fc->partitions; i++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
281 static const int a[] = {0, 1, 2, 2, 3, 3, 4, 4};
3878
30de59a39f6e Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3877
diff changeset
282 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
283 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
284 }
30de59a39f6e Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3877
diff changeset
285 fc->nclasses++;
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
286 fc->classes = av_malloc(sizeof(vorbis_enc_floor_class) * 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
287 for (i = 0; i < fc->nclasses; i++) {
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
288 vorbis_enc_floor_class * c = &fc->classes[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
289 int j, books;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
290 c->dim = floor_classes[i].dim;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
291 c->subclass = floor_classes[i].subclass;
3912
f56e6d3a1d6e Original Commit: r113 | ods15 | 2006-10-01 21:35:47 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3911
diff changeset
292 c->masterbook = floor_classes[i].masterbook;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
293 books = (1 << c->subclass);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
294 c->books = av_malloc(sizeof(int) * books);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
295 for (j = 0; j < books; j++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
296 c->books[j] = floor_classes[i].nbooks[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
297 }
3878
30de59a39f6e Original Commit: r78 | ods15 | 2006-09-29 15:14:28 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3877
diff changeset
298 fc->multiplier = 2;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
299 fc->rangebits = venc->log2_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
300
9983437a00a1 Original Commit: r19 | ods15 | 2006-09-22 12:54:18 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3824
diff changeset
301 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
302 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
303 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
304
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
305 fc->list = av_malloc(sizeof(vorbis_floor1_entry) * 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
306 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
307 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
308 for (i = 2; i < fc->values; i++) {
3900
2c1a4cce567b Original Commit: r101 | ods15 | 2006-10-01 14:15:00 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3899
diff changeset
309 static const int a[] = {
2c1a4cce567b Original Commit: r101 | ods15 | 2006-10-01 14:15:00 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3899
diff changeset
310 93, 23,372, 6, 46,186,750, 14, 33, 65,
2c1a4cce567b Original Commit: r101 | ods15 | 2006-10-01 14:15:00 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3899
diff changeset
311 130,260,556, 3, 10, 18, 28, 39, 55, 79,
2c1a4cce567b Original Commit: r101 | ods15 | 2006-10-01 14:15:00 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3899
diff changeset
312 111,158,220,312,464,650,850
2c1a4cce567b Original Commit: r101 | ods15 | 2006-10-01 14:15:00 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3899
diff changeset
313 };
3866
4d5f73f10198 Original Commit: r66 | ods15 | 2006-09-25 18:42:13 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3865
diff changeset
314 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
315 }
3901
e255692302f0 Original Commit: r102 | ods15 | 2006-10-01 17:58:38 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3900
diff changeset
316 ff_vorbis_ready_floor1_list(fc->list, fc->values);
3827
91f130d6c3f4 Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3826
diff changeset
317
91f130d6c3f4 Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3826
diff changeset
318 venc->nresidues = 1;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
319 venc->residues = av_malloc(sizeof(vorbis_enc_residue) * venc->nresidues);
3827
91f130d6c3f4 Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3826
diff changeset
320
3828
f9c449155a0e Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3827
diff changeset
321 // 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
322 rc = &venc->residues[0];
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
323 rc->type = 2;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
324 rc->begin = 0;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
325 rc->end = 1600;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
326 rc->partition_size = 32;
3880
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
327 rc->classifications = 10;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
328 rc->classbook = 15;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
329 rc->books = av_malloc(sizeof(*rc->books) * rc->classifications);
3897
11caa885c449 Original Commit: r98 | ods15 | 2006-10-01 10:15:33 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3896
diff changeset
330 {
11caa885c449 Original Commit: r98 | ods15 | 2006-10-01 10:15:33 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3896
diff changeset
331 static const int8_t a[10][8] = {
3880
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
332 { -1, -1, -1, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
333 { -1, -1, 16, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
334 { -1, -1, 17, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
335 { -1, -1, 18, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
336 { -1, -1, 19, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
337 { -1, -1, 20, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
338 { -1, -1, 21, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
339 { 22, 23, -1, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
340 { 24, 25, -1, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
341 { 26, 27, 28, -1, -1, -1, -1, -1, },
3d5920649c39 Original Commit: r80 | ods15 | 2006-09-29 15:44:22 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3879
diff changeset
342 };
3897
11caa885c449 Original Commit: r98 | ods15 | 2006-10-01 10:15:33 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3896
diff changeset
343 memcpy(rc->books, a, sizeof a);
3849
ead3ae56d1b6 Original Commit: r47 | ods15 | 2006-09-23 12:34:48 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3848
diff changeset
344 }
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
345 ready_residue(rc, venc);
3828
f9c449155a0e Original Commit: r22 | ods15 | 2006-09-22 13:49:56 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3827
diff changeset
346
3827
91f130d6c3f4 Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3826
diff changeset
347 venc->nmappings = 1;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
348 venc->mappings = av_malloc(sizeof(vorbis_enc_mapping) * venc->nmappings);
3827
91f130d6c3f4 Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3826
diff changeset
349
3829
e8e340cbc7f2 Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3828
diff changeset
350 // 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
351 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
352 mc->submaps = 1;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
353 mc->mux = av_malloc(sizeof(int) * venc->channels);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
354 for (i = 0; i < venc->channels; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
355 mc->mux[i] = 0;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
356 mc->floor = av_malloc(sizeof(int) * mc->submaps);
3829
e8e340cbc7f2 Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3828
diff changeset
357 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
358 for (i = 0; i < mc->submaps; i++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
359 mc->floor[i] = 0;
3829
e8e340cbc7f2 Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3828
diff changeset
360 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
361 }
3870
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
362 mc->coupling_steps = venc->channels == 2 ? 1 : 0;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
363 mc->magnitude = av_malloc(sizeof(int) * mc->coupling_steps);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
364 mc->angle = av_malloc(sizeof(int) * mc->coupling_steps);
3870
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
365 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
366 mc->magnitude[0] = 0;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
367 mc->angle[0] = 1;
3870
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
368 }
3829
e8e340cbc7f2 Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3828
diff changeset
369
3827
91f130d6c3f4 Original Commit: r21 | ods15 | 2006-09-22 13:40:31 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3826
diff changeset
370 venc->nmodes = 1;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
371 venc->modes = av_malloc(sizeof(vorbis_enc_mode) * 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
372
477ee30c6fc6 Original Commit: r24 | ods15 | 2006-09-22 13:57:09 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3829
diff changeset
373 // 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
374 venc->modes[0].blockflag = 0;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
375 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
376
3842
5f8cfa1a6fdb Original Commit: r39 | ods15 | 2006-09-23 09:36:11 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3841
diff changeset
377 venc->have_saved = 0;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
378 venc->saved = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
379 venc->samples = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]));
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
380 venc->floor = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
381 venc->coeffs = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
3841
6591b55f6482 Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3840
diff changeset
382
3913
f2204277a928 Original Commit: r114 | ods15 | 2006-10-01 21:38:37 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3912
diff changeset
383 venc->win[0] = ff_vorbis_vwin[venc->log2_blocksize[0] - 6];
f2204277a928 Original Commit: r114 | ods15 | 2006-10-01 21:38:37 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3912
diff changeset
384 venc->win[1] = ff_vorbis_vwin[venc->log2_blocksize[1] - 6];
3841
6591b55f6482 Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3840
diff changeset
385
9658
67a20f0eb42c Support for getting (i)MDCT output multiplied by a constant scaling factor.
serge
parents: 9411
diff changeset
386 ff_mdct_init(&venc->mdct[0], venc->log2_blocksize[0], 0, 1.0);
67a20f0eb42c Support for getting (i)MDCT output multiplied by a constant scaling factor.
serge
parents: 9411
diff changeset
387 ff_mdct_init(&venc->mdct[1], venc->log2_blocksize[1], 0, 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
388 }
6a737f2d852e Original Commit: r12 | ods15 | 2006-09-22 09:28:30 +0300 (Fri, 22 Sep 2006) | 5 lines
ods15
parents: 3817
diff changeset
389
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
390 static void put_float(PutBitContext *pb, float f)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
391 {
3812
52ff3a5d161e Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents: 3811
diff changeset
392 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
393 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
394 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
395 exp += 788 - 20;
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
396 if (mant < 0) {
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
397 res |= (1 << 31);
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
398 mant = -mant;
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
399 }
3812
52ff3a5d161e Original Commit: r6 | ods15 | 2006-09-16 20:36:31 +0300 (Sat, 16 Sep 2006) | 2 lines
ods15
parents: 3811
diff changeset
400 res |= mant | (exp << 21);
10344
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
401 put_bits32(pb, 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
402 }
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
403
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
404 static void put_codebook_header(PutBitContext *pb, vorbis_enc_codebook *cb)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
405 {
3810
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
406 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
407 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
408
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
409 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
410 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
411 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
412
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
413 for (i = 1; i < cb->nentries; i++)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
414 if (cb->lens[i] < cb->lens[i-1])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
415 break;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
416 if (i == cb->nentries)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
417 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
418
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
419 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
420 if (ordered) {
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
421 int len = cb->lens[0];
3851
a778f86c28e2 Original Commit: r49 | ods15 | 2006-09-23 12:52:21 +0300 (Sat, 23 Sep 2006) | 3 lines
ods15
parents: 3850
diff changeset
422 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
423 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
424 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
425 int j;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
426 for (j = 0; j+i < cb->nentries; j++)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
427 if (cb->lens[j+i] != len)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
428 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
429 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
430 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
431 len++;
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
432 }
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
433 } else {
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
434 int sparse = 0;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
435 for (i = 0; i < cb->nentries; i++)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
436 if (!cb->lens[i])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
437 break;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
438 if (i != cb->nentries)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
439 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
440 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
441
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
442 for (i = 0; i < cb->nentries; i++) {
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
443 if (sparse)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
444 put_bits(pb, 1, !!cb->lens[i]);
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
445 if (cb->lens[i])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
446 put_bits(pb, 5, cb->lens[i] - 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
447 }
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
448 }
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
449
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
450 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
451 if (cb->lookup) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
452 int tmp = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->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
453 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
454
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
455 for (i = 1; i < tmp; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
456 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
457
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
458 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
459 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
460
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
461 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
462 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
463
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
464 for (i = 0; i < tmp; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
465 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
466 }
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
467 }
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
468
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
469 static void put_floor_header(PutBitContext *pb, vorbis_enc_floor *fc)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
470 {
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
471 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
472
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
473 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
474
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
475 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
476
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
477 for (i = 0; i < fc->partitions; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
478 put_bits(pb, 4, fc->partition_to_class[i]);
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
479
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
480 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
481 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
482
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
483 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
484 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
485
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
486 if (fc->classes[i].subclass)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
487 put_bits(pb, 8, fc->classes[i].masterbook);
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
488
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
489 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
490
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
491 for (j = 0; j < books; j++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
492 put_bits(pb, 8, fc->classes[i].books[j] + 1);
3814
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
493 }
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
494
464eca766731 Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3813
diff changeset
495 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
496 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
497
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
498 for (i = 2; i < fc->values; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
499 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
500 }
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
501
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
502 static void put_residue_header(PutBitContext *pb, vorbis_enc_residue *rc)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
503 {
3815
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
504 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
505
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
506 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
507
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
508 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
509 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
510 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
511 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
512 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
513
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
514 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
515 int j, tmp = 0;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
516 for (j = 0; j < 8; j++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
517 tmp |= (rc->books[i][j] != -1) << j;
3815
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
518
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
519 put_bits(pb, 3, tmp & 7);
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
520 put_bits(pb, 1, tmp > 7);
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
521
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
522 if (tmp > 7)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
523 put_bits(pb, 5, tmp >> 3);
3815
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
524 }
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
525
3fa081422f78 Original Commit: r9 | ods15 | 2006-09-17 18:56:41 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3814
diff changeset
526 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
527 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
528 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
529 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
530 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
531 }
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
532 }
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
533
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
534 static int put_main_header(vorbis_enc_context *venc, uint8_t **out)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
535 {
3810
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
536 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
537 PutBitContext pb;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
538 uint8_t buffer[50000] = {0}, *p = buffer;
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
539 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
540 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
541
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
542 // 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
543 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
544 put_bits(&pb, 8, 1); //magic
10630
84cca0a953c5 Revert r20095: Allow compiling to vorbis again.
cehoyos
parents: 10344
diff changeset
545 for (i = 0; "vorbis"[i]; i++)
84cca0a953c5 Revert r20095: Allow compiling to vorbis again.
cehoyos
parents: 10344
diff changeset
546 put_bits(&pb, 8, "vorbis"[i]);
10344
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
547 put_bits32(&pb, 0); // version
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
548 put_bits(&pb, 8, venc->channels);
10344
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
549 put_bits32(&pb, venc->sample_rate);
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
550 put_bits32(&pb, 0); // bitrate
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
551 put_bits32(&pb, 0); // bitrate
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
552 put_bits32(&pb, 0); // bitrate
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
553 put_bits(&pb, 4, venc->log2_blocksize[0]);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
554 put_bits(&pb, 4, venc->log2_blocksize[1]);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
555 put_bits(&pb, 1, 1); // framing
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
556
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
557 flush_put_bits(&pb);
10329
5462710f17ee Do not needlessly add 7 to put_buts_count before dividing by 8,
reimar
parents: 10326
diff changeset
558 hlens[0] = put_bits_count(&pb) >> 3;
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
559 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
560 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
561
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
562 // 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
563 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
564 put_bits(&pb, 8, 3); //magic
10630
84cca0a953c5 Revert r20095: Allow compiling to vorbis again.
cehoyos
parents: 10344
diff changeset
565 for (i = 0; "vorbis"[i]; i++)
84cca0a953c5 Revert r20095: Allow compiling to vorbis again.
cehoyos
parents: 10344
diff changeset
566 put_bits(&pb, 8, "vorbis"[i]);
10344
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
567 put_bits32(&pb, 0); // vendor length TODO
2b8a327189cd put_bits can only reliably write up to 31 bit bits, above it relies on
reimar
parents: 10329
diff changeset
568 put_bits32(&pb, 0); // amount of comments
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
569 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
570
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
571 flush_put_bits(&pb);
10329
5462710f17ee Do not needlessly add 7 to put_buts_count before dividing by 8,
reimar
parents: 10326
diff changeset
572 hlens[1] = put_bits_count(&pb) >> 3;
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
573 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
574 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
575
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
576 // 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
577 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
578 put_bits(&pb, 8, 5); //magic
10630
84cca0a953c5 Revert r20095: Allow compiling to vorbis again.
cehoyos
parents: 10344
diff changeset
579 for (i = 0; "vorbis"[i]; i++)
84cca0a953c5 Revert r20095: Allow compiling to vorbis again.
cehoyos
parents: 10344
diff changeset
580 put_bits(&pb, 8, "vorbis"[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
581
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
582 // codebooks
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
583 put_bits(&pb, 8, venc->ncodebooks - 1);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
584 for (i = 0; i < venc->ncodebooks; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
585 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
586
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
587 // time domain, reserved, zero
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
588 put_bits(&pb, 6, 0);
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
589 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
590
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
591 // floors
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
592 put_bits(&pb, 6, venc->nfloors - 1);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
593 for (i = 0; i < venc->nfloors; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
594 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
595
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
596 // residues
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
597 put_bits(&pb, 6, venc->nresidues - 1);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
598 for (i = 0; i < venc->nresidues; i++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
599 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
600
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
601 // mappings
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
602 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
603 for (i = 0; i < venc->nmappings; i++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
604 vorbis_enc_mapping *mc = &venc->mappings[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
605 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
606 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
607
6eba53afa0b0 Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3815
diff changeset
608 put_bits(&pb, 1, mc->submaps > 1);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
609 if (mc->submaps > 1)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
610 put_bits(&pb, 4, mc->submaps - 1);
3816
6eba53afa0b0 Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3815
diff changeset
611
3870
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
612 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
613 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
614 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
615 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
616 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
617 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
618 }
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
619 }
3816
6eba53afa0b0 Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3815
diff changeset
620
6eba53afa0b0 Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3815
diff changeset
621 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
622
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
623 if (mc->submaps > 1)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
624 for (j = 0; j < venc->channels; j++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
625 put_bits(&pb, 4, mc->mux[j]);
3816
6eba53afa0b0 Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3815
diff changeset
626
6eba53afa0b0 Original Commit: r10 | ods15 | 2006-09-17 19:37:17 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3815
diff changeset
627 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
628 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
629 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
630 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
631 }
3813
95b70f8bc29e Original Commit: r7 | ods15 | 2006-09-17 08:50:47 +0300 (Sun, 17 Sep 2006) | 2 lines
ods15
parents: 3812
diff changeset
632 }
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
633
3817
3ca15f0d4882 Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents: 3816
diff changeset
634 // modes
3ca15f0d4882 Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents: 3816
diff changeset
635 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
636 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
637 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
638 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
639 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
640 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
641 }
3ca15f0d4882 Original Commit: r11 | ods15 | 2006-09-17 19:41:28 +0300 (Sun, 17 Sep 2006) | 4 lines
ods15
parents: 3816
diff changeset
642
3836
ff31b13b57df Original Commit: r32 | ods15 | 2006-09-22 18:37:50 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3835
diff changeset
643 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
644
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
645 flush_put_bits(&pb);
10329
5462710f17ee Do not needlessly add 7 to put_buts_count before dividing by 8,
reimar
parents: 10326
diff changeset
646 hlens[2] = put_bits_count(&pb) >> 3;
3811
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
647
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
648 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
649 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
650
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
651 *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
652 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
653 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
654 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
655 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
656 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
657 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
658 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
659 }
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
660
9f6acced986e Original Commit: r5 | ods15 | 2006-09-16 17:29:04 +0300 (Sat, 16 Sep 2006) | 4 lines
ods15
parents: 3810
diff changeset
661 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
662 }
a8bebf3e9cb7 Original Commit: r4 | ods15 | 2006-09-16 15:36:03 +0300 (Sat, 16 Sep 2006) | 3 lines
ods15
parents: 3809
diff changeset
663
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
664 static float get_floor_average(vorbis_enc_floor * fc, float *coeffs, int i)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
665 {
3890
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
666 int begin = fc->list[fc->list[FFMAX(i-1, 0)].sort].x;
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
667 int end = fc->list[fc->list[FFMIN(i+1, fc->values - 1)].sort].x;
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
668 int j;
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
669 float average = 0;
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
670
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
671 for (j = begin; j < end; j++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
672 average += fabs(coeffs[j]);
3890
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
673 return average / (end - begin);
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
674 }
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
675
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
676 static void floor_fit(vorbis_enc_context *venc, vorbis_enc_floor *fc,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
677 float *coeffs, uint_fast16_t *posts, int samples)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
678 {
3861
b98ea563e9bc Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3860
diff changeset
679 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
680 int i;
3890
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
681 float tot_average = 0.;
12513
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
682 float averages[MAX_FLOOR_VALUES];
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
683 for (i = 0; i < fc->values; i++) {
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
684 averages[i] = get_floor_average(fc, coeffs, i);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
685 tot_average += averages[i];
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
686 }
3890
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
687 tot_average /= fc->values;
3891
50e912426a32 Original Commit: r92 | ods15 | 2006-09-30 12:13:47 +0300 (Sat, 30 Sep 2006) | 3 lines
ods15
parents: 3890
diff changeset
688 tot_average /= venc->quality;
3890
de883494646e Original Commit: r91 | ods15 | 2006-09-30 10:05:16 +0300 (Sat, 30 Sep 2006) | 4 lines
ods15
parents: 3889
diff changeset
689
3861
b98ea563e9bc Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3860
diff changeset
690 for (i = 0; i < fc->values; i++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
691 int position = fc->list[fc->list[i].sort].x;
3902
bd0cb21d956d Original Commit: r103 | ods15 | 2006-10-01 18:00:43 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3901
diff changeset
692 float average = averages[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
693 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
694
11812
b7d5e6078e04 Avoid division by zero that caused noise, typically at the beginning or
cehoyos
parents: 11776
diff changeset
695 average = sqrt(tot_average * average) * pow(1.25f, position*0.005f); // MAGIC!
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
696 for (j = 0; j < range - 1; j++)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
697 if (ff_vorbis_floor1_inverse_db_table[j * fc->multiplier] > average)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
698 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
699 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
700 }
b98ea563e9bc Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3860
diff changeset
701 }
b98ea563e9bc Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3860
diff changeset
702
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
703 static int render_point(int x0, int y0, int x1, int y1, int x)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
704 {
3863
2c8d1cadd86e Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents: 3862
diff changeset
705 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
706 }
2c8d1cadd86e Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents: 3862
diff changeset
707
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
708 static void floor_encode(vorbis_enc_context *venc, vorbis_enc_floor *fc,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
709 PutBitContext *pb, uint_fast16_t *posts,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
710 float *floor, int samples)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
711 {
3860
be0344cea4ea Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3859
diff changeset
712 int range = 255 / fc->multiplier + 1;
12513
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
713 int coded[MAX_FLOOR_VALUES]; // first 2 values are unused
3863
2c8d1cadd86e Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents: 3862
diff changeset
714 int 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
715
3860
be0344cea4ea Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3859
diff changeset
716 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
717 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
718 put_bits(pb, ilog(range - 1), posts[1]);
3887
71ba8e680704 Original Commit: r87 | ods15 | 2006-09-29 21:10:05 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3886
diff changeset
719 coded[0] = coded[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
720
2c8d1cadd86e Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents: 3862
diff changeset
721 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
722 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
723 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
724 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
725 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
726 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
727 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
728 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
729 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
730 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
731 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
732 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
733 } else {
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
734 if (!coded[fc->list[i].low ])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
735 coded[fc->list[i].low ] = -1;
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
736 if (!coded[fc->list[i].high])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
737 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
738 }
2c8d1cadd86e Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents: 3862
diff changeset
739 if (posts[i] > predicted) {
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
740 if (posts[i] - predicted > room)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
741 coded[i] = posts[i] - predicted + lowroom;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
742 else
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
743 coded[i] = (posts[i] - predicted) << 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
744 } else {
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
745 if (predicted - posts[i] > room)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
746 coded[i] = predicted - posts[i] + highroom - 1;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
747 else
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
748 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
749 }
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
2c8d1cadd86e Original Commit: r63 | ods15 | 2006-09-25 13:51:44 +0300 (Mon, 25 Sep 2006) | 3 lines
ods15
parents: 3862
diff changeset
752 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
753 for (i = 0; i < fc->partitions; i++) {
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
754 vorbis_enc_floor_class * 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
755 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
756 if (c->subclass) {
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
757 vorbis_enc_codebook * book = &venc->codebooks[c->masterbook];
3874
84890fea8074 Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3873
diff changeset
758 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
759 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
760 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
761 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
762 int maxval = 1;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
763 if (c->books[l] != -1)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
764 maxval = venc->codebooks[c->books[l]].nentries;
5127
4dbe6578f811 misc spelling fixes
diego
parents: 4498
diff changeset
765 // coded could be -1, but this still works, cause that is 0
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
766 if (coded[counter + k] < maxval)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
767 break;
3874
84890fea8074 Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3873
diff changeset
768 }
84890fea8074 Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3873
diff changeset
769 assert(l != csub);
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
770 cval |= l << cshift;
3874
84890fea8074 Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3873
diff changeset
771 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
772 }
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
773 put_codeword(pb, book, cval);
3874
84890fea8074 Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3873
diff changeset
774 }
3860
be0344cea4ea Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3859
diff changeset
775 for (k = 0; k < c->dim; k++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
776 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
777 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
778 cval >>= c->subclass;
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
779 if (book == -1)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
780 continue;
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
781 if (entry == -1)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
782 entry = 0;
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
783 put_codeword(pb, &venc->codebooks[book], entry);
3860
be0344cea4ea Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3859
diff changeset
784 }
be0344cea4ea Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3859
diff changeset
785 }
be0344cea4ea Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3859
diff changeset
786
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
787 ff_vorbis_floor1_render_list(fc->list, fc->values, posts, coded,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
788 fc->multiplier, 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
789 }
be0344cea4ea Original Commit: r60 | ods15 | 2006-09-25 12:46:30 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3859
diff changeset
790
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
791 static float *put_vector(vorbis_enc_codebook *book, PutBitContext *pb,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
792 float *num)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
793 {
3908
045c650f0951 Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3907
diff changeset
794 int i, entry = -1;
045c650f0951 Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3907
diff changeset
795 float distance = FLT_MAX;
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
796 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
797 for (i = 0; i < book->nentries; i++) {
3908
045c650f0951 Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3907
diff changeset
798 float * vec = book->dimentions + i * book->ndimentions, d = book->pow2[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
799 int j;
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
800 if (!book->lens[i])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
801 continue;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
802 for (j = 0; j < book->ndimentions; j++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
803 d -= vec[j] * num[j];
3908
045c650f0951 Original Commit: r109 | ods15 | 2006-10-01 19:14:52 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3907
diff changeset
804 if (distance > d) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
805 entry = i;
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
806 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
807 }
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
808 }
3899
c3e90a13ff29 Original Commit: r100 | ods15 | 2006-10-01 14:01:27 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3898
diff changeset
809 put_codeword(pb, book, entry);
3858
70b4bc721531 Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3857
diff changeset
810 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
811 }
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
812
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
813 static void residue_encode(vorbis_enc_context *venc, vorbis_enc_residue *rc,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
814 PutBitContext *pb, float *coeffs, int samples,
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
815 int real_ch)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
816 {
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
817 int pass, i, j, p, k;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
818 int psize = rc->partition_size;
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
819 int partitions = (rc->end - rc->begin) / psize;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
820 int channels = (rc->type == 2) ? 1 : real_ch;
12513
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
821 int classes[MAX_CHANNELS][NUM_RESIDUE_PARTITIONS];
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
822 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
823
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
824 assert(rc->type == 2);
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
825 assert(real_ch == 2);
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
826 for (p = 0; p < partitions; p++) {
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
827 float max1 = 0., max2 = 0.;
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
828 int s = rc->begin + p * psize;
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
829 for (k = s; k < s + psize; k += 2) {
3903
7a57a82cfa10 Original Commit: r104 | ods15 | 2006-10-01 18:04:08 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3902
diff changeset
830 max1 = FFMAX(max1, fabs(coeffs[ k / real_ch]));
7a57a82cfa10 Original Commit: r104 | ods15 | 2006-10-01 18:04:08 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3902
diff changeset
831 max2 = FFMAX(max2, fabs(coeffs[samples + k / real_ch]));
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
832 }
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
833
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
834 for (i = 0; i < rc->classifications - 1; i++)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
835 if (max1 < rc->maxes[i][0] && max2 < rc->maxes[i][1])
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
836 break;
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
837 classes[0][p] = i;
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
838 }
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
839
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 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
841 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
842 while (p < partitions) {
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
843 if (pass == 0)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
844 for (j = 0; j < channels; j++) {
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
845 vorbis_enc_codebook * book = &venc->codebooks[rc->classbook];
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
846 int entry = 0;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
847 for (i = 0; i < classwords; i++) {
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
848 entry *= rc->classifications;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
849 entry += classes[j][p + i];
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
850 }
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
851 put_codeword(pb, book, entry);
3881
b272797e8149 Original Commit: r81 | ods15 | 2006-09-29 21:02:09 +0300 (Fri, 29 Sep 2006) | 2 lines
ods15
parents: 3880
diff changeset
852 }
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
853 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
854 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
855 int nbook = rc->books[classes[j][p]][pass];
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
856 vorbis_enc_codebook * book = &venc->codebooks[nbook];
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
857 float *buf = coeffs + samples*j + rc->begin + p*psize;
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
858 if (nbook == -1)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
859 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
860
3871
7fffd3ab056a Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3870
diff changeset
861 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
862 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
863
3871
7fffd3ab056a Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3870
diff changeset
864 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
865 for (k = 0; k < psize; k += book->ndimentions) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
866 float *a = put_vector(book, pb, &buf[k]);
3872
9f99e471bf72 Original Commit: r72 | ods15 | 2006-09-28 21:00:47 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3871
diff changeset
867 int l;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
868 for (l = 0; l < book->ndimentions; l++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
869 buf[k + l] -= a[l];
3872
9f99e471bf72 Original Commit: r72 | ods15 | 2006-09-28 21:00:47 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3871
diff changeset
870 }
3871
7fffd3ab056a Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3870
diff changeset
871 } else {
3907
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
872 int s = rc->begin + p * psize, a1, b1;
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
873 a1 = (s % real_ch) * samples;
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
874 b1 = s / real_ch;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
875 s = real_ch * samples;
3871
7fffd3ab056a Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3870
diff changeset
876 for (k = 0; k < psize; k += book->ndimentions) {
3907
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
877 int dim, a2 = a1, b2 = b1;
12513
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
878 float vec[MAX_CODEBOOK_DIM], *pv = vec;
3907
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
879 for (dim = book->ndimentions; dim--; ) {
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
880 *pv++ = coeffs[a2 + b2];
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
881 if ((a2 += samples) == s) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
882 a2 = 0;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
883 b2++;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
884 }
3907
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
885 }
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
886 pv = put_vector(book, pb, vec);
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
887 for (dim = book->ndimentions; dim--; ) {
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
888 coeffs[a1 + b1] -= *pv++;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
889 if ((a1 += samples) == s) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
890 a1 = 0;
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
891 b1++;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
892 }
3907
5f5525341673 Original Commit: r108 | ods15 | 2006-10-01 18:46:06 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3906
diff changeset
893 }
3871
7fffd3ab056a Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3870
diff changeset
894 }
7fffd3ab056a Original Commit: r71 | ods15 | 2006-09-28 21:00:24 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3870
diff changeset
895 }
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
896 }
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
897 }
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
898 }
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
899 }
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
900 }
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
901
12262
dde20597f15e Use "const" qualifier for pointers that point to input data of
reimar
parents: 11824
diff changeset
902 static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *audio,
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
903 int samples)
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
904 {
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
905 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
906 const float * win = venc->win[0];
3913
f2204277a928 Original Commit: r114 | ods15 | 2006-10-01 21:38:37 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3912
diff changeset
907 int window_len = 1 << (venc->log2_blocksize[0] - 1);
f2204277a928 Original Commit: r114 | ods15 | 2006-10-01 21:38:37 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3912
diff changeset
908 float n = (float)(1 << venc->log2_blocksize[0]) / 4.;
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
909 // 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
910
10310
d3644248015a some more linebreak and brace placement cosmetics
diego
parents: 10309
diff changeset
911 if (!venc->have_saved && !samples)
d3644248015a some more linebreak and brace placement cosmetics
diego
parents: 10309
diff changeset
912 return 0;
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
913
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
914 if (venc->have_saved) {
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
915 for (channel = 0; channel < venc->channels; channel++)
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
916 memcpy(venc->samples + channel * window_len * 2,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
917 venc->saved + channel * window_len, sizeof(float) * window_len);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
918 } else {
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
919 for (channel = 0; channel < venc->channels; channel++)
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
920 memset(venc->samples + channel * window_len * 2, 0,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
921 sizeof(float) * window_len);
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
922 }
3859
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 (samples) {
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 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
927 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
928 for (i = 0; i < samples; i++, j += venc->channels)
11768
b02a8a91e27d Do not invert samples when encoding Vorbis.
cehoyos
parents: 11644
diff changeset
929 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
930 }
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
931 } else {
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
932 for (channel = 0; channel < venc->channels; channel++)
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
933 memset(venc->samples + channel * window_len * 2 + window_len,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
934 0, sizeof(float) * window_len);
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
935 }
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
936
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
937 for (channel = 0; channel < venc->channels; channel++)
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
938 ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel * window_len,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
939 venc->samples + channel * window_len * 2);
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 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
942 for (channel = 0; channel < venc->channels; channel++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
943 float *offset = venc->saved + channel * window_len;
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
944 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
945 for (i = 0; i < samples; i++, j += venc->channels)
11768
b02a8a91e27d Do not invert samples when encoding Vorbis.
cehoyos
parents: 11644
diff changeset
946 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
947 }
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
948 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
949 } else {
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
950 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
951 }
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
952 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
953 }
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
954
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
955 static av_cold int vorbis_encode_init(AVCodecContext *avccontext)
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
956 {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
957 vorbis_enc_context *venc = avccontext->priv_data;
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
958
3906
5ae5224790d3 Original Commit: r107 | ods15 | 2006-10-01 18:13:12 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3905
diff changeset
959 if (avccontext->channels != 2) {
5ae5224790d3 Original Commit: r107 | ods15 | 2006-10-01 18:13:12 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3905
diff changeset
960 av_log(avccontext, AV_LOG_ERROR, "Current FFmpeg Vorbis encoder only supports 2 channels.\n");
5ae5224790d3 Original Commit: r107 | ods15 | 2006-10-01 18:13:12 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3905
diff changeset
961 return -1;
5ae5224790d3 Original Commit: r107 | ods15 | 2006-10-01 18:13:12 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3905
diff changeset
962 }
3896
46ab70354691 Original Commit: r97 | ods15 | 2006-09-30 23:32:19 +0300 (Sat, 30 Sep 2006) | 2 lines
ods15
parents: 3895
diff changeset
963
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
964 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
965
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
966 if (avccontext->flags & CODEC_FLAG_QSCALE)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
967 venc->quality = avccontext->global_quality / (float)FF_QP2LAMBDA / 10.;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
968 else
11824
9f3522743348 Raise default vorbis encoding quality.
cehoyos
parents: 11812
diff changeset
969 venc->quality = 0.03;
3911
a1b41e814052 Original Commit: r112 | ods15 | 2006-10-01 20:48:39 +0200 (Sun, 01 Oct 2006) | 3 lines
ods15
parents: 3910
diff changeset
970 venc->quality *= venc->quality;
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
971
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
972 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
973
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
974 avccontext->frame_size = 1 << (venc->log2_blocksize[0] - 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
975
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
976 avccontext->coded_frame = avcodec_alloc_frame();
3859
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
977 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
978
0d0bd4b2baef Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
ods15
parents: 3858
diff changeset
979 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
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
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
982 static int vorbis_encode_frame(AVCodecContext *avccontext,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
983 unsigned char *packets,
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
984 int buf_size, void *data)
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
985 {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
986 vorbis_enc_context *venc = avccontext->priv_data;
12262
dde20597f15e Use "const" qualifier for pointers that point to input data of
reimar
parents: 11824
diff changeset
987 const 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;
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
989 vorbis_enc_mode *mode;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
990 vorbis_enc_mapping *mapping;
3839
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
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
993
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
994 if (!apply_window_and_mdct(venc, audio, samples))
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
995 return 0;
3913
f2204277a928 Original Commit: r114 | ods15 | 2006-10-01 21:38:37 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3912
diff changeset
996 samples = 1 << (venc->log2_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
997
3839
c5ec6d7710ba Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3838
diff changeset
998 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
999
c5ec6d7710ba Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3838
diff changeset
1000 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
1001
c5ec6d7710ba Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3838
diff changeset
1002 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
1003
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1004 mode = &venc->modes[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
1005 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
1006 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
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 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
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
c5ec6d7710ba Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3838
diff changeset
1011 for (i = 0; i < venc->channels; i++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1012 vorbis_enc_floor *fc = &venc->floors[mapping->floor[mapping->mux[i]]];
12513
66c6184769af vorbisenc: remove VLAs
mru
parents: 12262
diff changeset
1013 uint_fast16_t posts[MAX_FLOOR_VALUES];
3861
b98ea563e9bc Original Commit: r61 | ods15 | 2006-09-25 13:10:56 +0300 (Mon, 25 Sep 2006) | 2 lines
ods15
parents: 3860
diff changeset
1014 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
1015 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
1016 }
c5ec6d7710ba Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3838
diff changeset
1017
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
1018 for (i = 0; i < venc->channels * samples; i++)
3909
3cac42cde8ea Original Commit: r110 | ods15 | 2006-10-01 19:17:32 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3908
diff changeset
1019 venc->coeffs[i] /= venc->floor[i];
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
1020
3870
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
1021 for (i = 0; i < mapping->coupling_steps; i++) {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1022 float *mag = venc->coeffs + mapping->magnitude[i] * samples;
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1023 float *ang = venc->coeffs + mapping->angle[i] * samples;
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 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
1025 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
1026 float a = ang[j];
3904
24e73ad62e40 Original Commit: r105 | ods15 | 2006-10-01 18:09:55 +0200 (Sun, 01 Oct 2006) | 2 lines
ods15
parents: 3903
diff changeset
1027 ang[j] -= mag[j];
10309
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
1028 if (mag[j] > 0)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
1029 ang[j] = -ang[j];
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
1030 if (ang[j] < 0)
d157ccc267e7 brace placement and linebreak cosmetics
diego
parents: 10199
diff changeset
1031 mag[j] = a;
3870
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
1032 }
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
1033 }
986fb3b8fe60 Original Commit: r70 | ods15 | 2006-09-28 19:07:36 +0300 (Thu, 28 Sep 2006) | 2 lines
ods15
parents: 3869
diff changeset
1034
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1035 residue_encode(venc, &venc->residues[mapping->residue[mapping->mux[0]]],
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1036 &pb, venc->coeffs, samples, venc->channels);
3844
bffe869bc19c Original Commit: r41 | ods15 | 2006-09-23 10:52:34 +0300 (Sat, 23 Sep 2006) | 4 lines
ods15
parents: 3843
diff changeset
1037
7838
88f4153caa21 vorbis_enc : set coded_frame->pts value to running sample count.
jai_menon
parents: 7546
diff changeset
1038 avccontext->coded_frame->pts = venc->sample_count;
88f4153caa21 vorbis_enc : set coded_frame->pts value to running sample count.
jai_menon
parents: 7546
diff changeset
1039 venc->sample_count += avccontext->frame_size;
3895
a9d7e965d24f Original Commit: r96 | ods15 | 2006-09-30 23:25:18 +0300 (Sat, 30 Sep 2006) | 2 lines
ods15
parents: 3894
diff changeset
1040 flush_put_bits(&pb);
10329
5462710f17ee Do not needlessly add 7 to put_buts_count before dividing by 8,
reimar
parents: 10326
diff changeset
1041 return put_bits_count(&pb) >> 3;
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1042 }
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1043
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1044
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1045 static av_cold int vorbis_encode_close(AVCodecContext *avccontext)
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1046 {
10316
7bfcc66f807d whitespace cosmetics, prettyprinting, K&R coding style
diego
parents: 10310
diff changeset
1047 vorbis_enc_context *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
1048 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
1049
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1050 if (venc->codebooks)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1051 for (i = 0; i < venc->ncodebooks; i++) {
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1052 av_freep(&venc->codebooks[i].lens);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1053 av_freep(&venc->codebooks[i].codewords);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1054 av_freep(&venc->codebooks[i].quantlist);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1055 av_freep(&venc->codebooks[i].dimentions);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1056 av_freep(&venc->codebooks[i].pow2);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1057 }
3831
7d27ba61600e Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3830
diff changeset
1058 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
1059
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1060 if (venc->floors)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1061 for (i = 0; i < venc->nfloors; i++) {
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1062 int j;
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1063 if (venc->floors[i].classes)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1064 for (j = 0; j < venc->floors[i].nclasses; j++)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1065 av_freep(&venc->floors[i].classes[j].books);
3918
56c8e3ab7fe0 10l, wrong order in freeing
ods15
parents: 3917
diff changeset
1066 av_freep(&venc->floors[i].classes);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1067 av_freep(&venc->floors[i].partition_to_class);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1068 av_freep(&venc->floors[i].list);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1069 }
3831
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
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1072 if (venc->residues)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1073 for (i = 0; i < venc->nresidues; i++) {
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1074 av_freep(&venc->residues[i].books);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1075 av_freep(&venc->residues[i].maxes);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1076 }
3831
7d27ba61600e Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3830
diff changeset
1077 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
1078
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1079 if (venc->mappings)
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1080 for (i = 0; i < venc->nmappings; i++) {
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1081 av_freep(&venc->mappings[i].mux);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1082 av_freep(&venc->mappings[i].floor);
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1083 av_freep(&venc->mappings[i].residue);
3919
b0b88fc01b7c more forgotten free's.
ods15
parents: 3918
diff changeset
1084 av_freep(&venc->mappings[i].magnitude);
b0b88fc01b7c more forgotten free's.
ods15
parents: 3918
diff changeset
1085 av_freep(&venc->mappings[i].angle);
3917
62849ae93c2b slightly saner indention
michael
parents: 3915
diff changeset
1086 }
3831
7d27ba61600e Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3830
diff changeset
1087 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
1088
7d27ba61600e Original Commit: r25 | ods15 | 2006-09-22 14:06:04 +0300 (Fri, 22 Sep 2006) | 2 lines
ods15
parents: 3830
diff changeset
1089 av_freep(&venc->modes);
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1090
3841
6591b55f6482 Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3840
diff changeset
1091 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
1092 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
1093 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
1094 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
1095
6591b55f6482 Original Commit: r38 | ods15 | 2006-09-23 09:02:34 +0300 (Sat, 23 Sep 2006) | 2 lines
ods15
parents: 3840
diff changeset
1096 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
1097 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
1098
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1099 av_freep(&avccontext->coded_frame);
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1100 av_freep(&avccontext->extradata);
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1101
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1102 return 0 ;
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1103 }
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1104
7131
7b8fba44fe9d revert accidental const slipping in
stefang
parents: 7129
diff changeset
1105 AVCodec vorbis_encoder = {
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1106 "vorbis",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 11370
diff changeset
1107 AVMEDIA_TYPE_AUDIO,
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1108 CODEC_ID_VORBIS,
8306
ddecbc18fe94 Rename all vorbis encoder related typedefs to not use _t for POSIX compatibility
ods15
parents: 8042
diff changeset
1109 sizeof(vorbis_enc_context),
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1110 vorbis_encode_init,
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1111 vorbis_encode_frame,
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1112 vorbis_encode_close,
11776
906fdc96cdf4 Mark vorbis encoder as experimental.
cehoyos
parents: 11768
diff changeset
1113 .capabilities= CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL,
10145
7955db355703 Make sample_fmts and channel_layouts compound literals const to reduce size of
reimar
parents: 9658
diff changeset
1114 .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6710
diff changeset
1115 .long_name = NULL_IF_CONFIG_SMALL("Vorbis"),
3808
5551768b5a4f skeleton for vorbis_enc.c
ods15
parents:
diff changeset
1116 };