xref: /plan9/sys/src/games/mp3enc/set_get.c (revision 8f5875f3e9b20916b4c52ad4336922bc8653eb7b)
1*8f5875f3SDavid du Colombier /* -*- mode: C; mode: fold -*- */
2*8f5875f3SDavid du Colombier /*
3*8f5875f3SDavid du Colombier  * set/get functions for lame_global_flags
4*8f5875f3SDavid du Colombier  *
5*8f5875f3SDavid du Colombier  * Copyright (c) 2001 Alexander Leidinger
6*8f5875f3SDavid du Colombier  *
7*8f5875f3SDavid du Colombier  * This library is free software; you can redistribute it and/or
8*8f5875f3SDavid du Colombier  * modify it under the terms of the GNU Library General Public
9*8f5875f3SDavid du Colombier  * License as published by the Free Software Foundation; either
10*8f5875f3SDavid du Colombier  * version 2 of the License, or (at your option) any later version.
11*8f5875f3SDavid du Colombier  *
12*8f5875f3SDavid du Colombier  * This library is distributed in the hope that it will be useful,
13*8f5875f3SDavid du Colombier  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14*8f5875f3SDavid du Colombier  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15*8f5875f3SDavid du Colombier  * Library General Public License for more details.
16*8f5875f3SDavid du Colombier  *
17*8f5875f3SDavid du Colombier  * You should have received a copy of the GNU Library General Public
18*8f5875f3SDavid du Colombier  * License along with this library; if not, write to the
19*8f5875f3SDavid du Colombier  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20*8f5875f3SDavid du Colombier  * Boston, MA 02111-1307, USA.
21*8f5875f3SDavid du Colombier  */
22*8f5875f3SDavid du Colombier 
23*8f5875f3SDavid du Colombier /* $Id: set_get.c,v 1.2 2001/03/12 04:38:35 markt Exp $ */
24*8f5875f3SDavid du Colombier 
25*8f5875f3SDavid du Colombier #ifdef HAVE_CONFIG_H
26*8f5875f3SDavid du Colombier # include <config.h>
27*8f5875f3SDavid du Colombier #endif
28*8f5875f3SDavid du Colombier 
29*8f5875f3SDavid du Colombier #include <assert.h>
30*8f5875f3SDavid du Colombier #include "lame.h"
31*8f5875f3SDavid du Colombier 
32*8f5875f3SDavid du Colombier #ifdef WITH_DMALLOC
33*8f5875f3SDavid du Colombier #include <dmalloc.h>
34*8f5875f3SDavid du Colombier #endif
35*8f5875f3SDavid du Colombier 
36*8f5875f3SDavid du Colombier 
37*8f5875f3SDavid du Colombier /*
38*8f5875f3SDavid du Colombier  * input stream description
39*8f5875f3SDavid du Colombier  */
40*8f5875f3SDavid du Colombier 
41*8f5875f3SDavid du Colombier /* number of samples */
42*8f5875f3SDavid du Colombier /* it's unlikely for this function to return an error */
43*8f5875f3SDavid du Colombier int
lame_set_num_samples(lame_global_flags * gfp,unsigned long num_samples)44*8f5875f3SDavid du Colombier lame_set_num_samples( lame_global_flags*  gfp,
45*8f5875f3SDavid du Colombier                       unsigned long       num_samples)
46*8f5875f3SDavid du Colombier {
47*8f5875f3SDavid du Colombier     /* default = 2^32-1 */
48*8f5875f3SDavid du Colombier 
49*8f5875f3SDavid du Colombier     gfp->num_samples = num_samples;
50*8f5875f3SDavid du Colombier 
51*8f5875f3SDavid du Colombier     return 0;
52*8f5875f3SDavid du Colombier }
53*8f5875f3SDavid du Colombier 
54*8f5875f3SDavid du Colombier unsigned long
lame_get_num_samples(const lame_global_flags * gfp)55*8f5875f3SDavid du Colombier lame_get_num_samples( const lame_global_flags* gfp )
56*8f5875f3SDavid du Colombier {
57*8f5875f3SDavid du Colombier     return gfp->num_samples;
58*8f5875f3SDavid du Colombier }
59*8f5875f3SDavid du Colombier 
60*8f5875f3SDavid du Colombier 
61*8f5875f3SDavid du Colombier /* input samplerate */
62*8f5875f3SDavid du Colombier int
lame_set_in_samplerate(lame_global_flags * gfp,int in_samplerate)63*8f5875f3SDavid du Colombier lame_set_in_samplerate( lame_global_flags*  gfp,
64*8f5875f3SDavid du Colombier                         int                 in_samplerate )
65*8f5875f3SDavid du Colombier {
66*8f5875f3SDavid du Colombier     /* input sample rate in Hz,  default = 44100 Hz */
67*8f5875f3SDavid du Colombier     gfp->in_samplerate = in_samplerate;
68*8f5875f3SDavid du Colombier 
69*8f5875f3SDavid du Colombier     return 0;
70*8f5875f3SDavid du Colombier }
71*8f5875f3SDavid du Colombier 
72*8f5875f3SDavid du Colombier int
lame_get_in_samplerate(const lame_global_flags * gfp)73*8f5875f3SDavid du Colombier lame_get_in_samplerate( const lame_global_flags*  gfp )
74*8f5875f3SDavid du Colombier {
75*8f5875f3SDavid du Colombier     return gfp->in_samplerate;
76*8f5875f3SDavid du Colombier }
77*8f5875f3SDavid du Colombier 
78*8f5875f3SDavid du Colombier 
79*8f5875f3SDavid du Colombier /* number of channels in input stream */
80*8f5875f3SDavid du Colombier int
lame_set_num_channels(lame_global_flags * gfp,int num_channels)81*8f5875f3SDavid du Colombier lame_set_num_channels( lame_global_flags*  gfp,
82*8f5875f3SDavid du Colombier                        int                 num_channels )
83*8f5875f3SDavid du Colombier {
84*8f5875f3SDavid du Colombier     /* default = 2 */
85*8f5875f3SDavid du Colombier 
86*8f5875f3SDavid du Colombier     if ( 2 < num_channels || 0 == num_channels )
87*8f5875f3SDavid du Colombier         return -1;    /* we didn't support more than 2 channels */
88*8f5875f3SDavid du Colombier 
89*8f5875f3SDavid du Colombier     gfp->num_channels = num_channels;
90*8f5875f3SDavid du Colombier 
91*8f5875f3SDavid du Colombier     return 0;
92*8f5875f3SDavid du Colombier }
93*8f5875f3SDavid du Colombier 
94*8f5875f3SDavid du Colombier int
lame_get_num_channels(const lame_global_flags * gfp)95*8f5875f3SDavid du Colombier lame_get_num_channels( const lame_global_flags*  gfp )
96*8f5875f3SDavid du Colombier {
97*8f5875f3SDavid du Colombier     return gfp->num_channels;
98*8f5875f3SDavid du Colombier }
99*8f5875f3SDavid du Colombier 
100*8f5875f3SDavid du Colombier 
101*8f5875f3SDavid du Colombier /* scale the input by this amount before encoding (not used for decoding) */
102*8f5875f3SDavid du Colombier int
lame_set_scale(lame_global_flags * gfp,float scale)103*8f5875f3SDavid du Colombier lame_set_scale( lame_global_flags*  gfp,
104*8f5875f3SDavid du Colombier                 float               scale )
105*8f5875f3SDavid du Colombier {
106*8f5875f3SDavid du Colombier     /* default = 0 */
107*8f5875f3SDavid du Colombier     gfp->scale = scale;
108*8f5875f3SDavid du Colombier 
109*8f5875f3SDavid du Colombier     return 0;
110*8f5875f3SDavid du Colombier }
111*8f5875f3SDavid du Colombier 
112*8f5875f3SDavid du Colombier float
lame_get_scale(const lame_global_flags * gfp)113*8f5875f3SDavid du Colombier lame_get_scale( const lame_global_flags*  gfp )
114*8f5875f3SDavid du Colombier {
115*8f5875f3SDavid du Colombier     return gfp->scale;
116*8f5875f3SDavid du Colombier }
117*8f5875f3SDavid du Colombier 
118*8f5875f3SDavid du Colombier 
119*8f5875f3SDavid du Colombier /* output sample rate in Hz */
120*8f5875f3SDavid du Colombier int
lame_set_out_samplerate(lame_global_flags * gfp,int out_samplerate)121*8f5875f3SDavid du Colombier lame_set_out_samplerate( lame_global_flags*  gfp,
122*8f5875f3SDavid du Colombier                          int                 out_samplerate )
123*8f5875f3SDavid du Colombier {
124*8f5875f3SDavid du Colombier     /*
125*8f5875f3SDavid du Colombier      * default = 0: LAME picks best value based on the amount
126*8f5875f3SDavid du Colombier      *              of compression
127*8f5875f3SDavid du Colombier      * MPEG only allows:
128*8f5875f3SDavid du Colombier      *  MPEG1    32, 44.1,   48khz
129*8f5875f3SDavid du Colombier      *  MPEG2    16, 22.05,  24
130*8f5875f3SDavid du Colombier      *  MPEG2.5   8, 11.025, 12
131*8f5875f3SDavid du Colombier      *
132*8f5875f3SDavid du Colombier      * (not used by decoding routines)
133*8f5875f3SDavid du Colombier      */
134*8f5875f3SDavid du Colombier     gfp->out_samplerate = out_samplerate;
135*8f5875f3SDavid du Colombier 
136*8f5875f3SDavid du Colombier     return 0;
137*8f5875f3SDavid du Colombier }
138*8f5875f3SDavid du Colombier 
139*8f5875f3SDavid du Colombier int
lame_get_out_samplerate(const lame_global_flags * gfp)140*8f5875f3SDavid du Colombier lame_get_out_samplerate( const lame_global_flags*  gfp )
141*8f5875f3SDavid du Colombier {
142*8f5875f3SDavid du Colombier     return gfp->out_samplerate;
143*8f5875f3SDavid du Colombier }
144*8f5875f3SDavid du Colombier 
145*8f5875f3SDavid du Colombier 
146*8f5875f3SDavid du Colombier 
147*8f5875f3SDavid du Colombier 
148*8f5875f3SDavid du Colombier /*
149*8f5875f3SDavid du Colombier  * general control parameters
150*8f5875f3SDavid du Colombier  */
151*8f5875f3SDavid du Colombier 
152*8f5875f3SDavid du Colombier /*collect data for an MP3 frame analzyer */
153*8f5875f3SDavid du Colombier int
lame_set_analysis(lame_global_flags * gfp,int analysis)154*8f5875f3SDavid du Colombier lame_set_analysis( lame_global_flags*  gfp,
155*8f5875f3SDavid du Colombier                    int                 analysis )
156*8f5875f3SDavid du Colombier {
157*8f5875f3SDavid du Colombier     /* default = 0 */
158*8f5875f3SDavid du Colombier 
159*8f5875f3SDavid du Colombier     /* enforce disable/enable meaning, if we need more than two values
160*8f5875f3SDavid du Colombier        we need to switch to an enum to have an apropriate representation
161*8f5875f3SDavid du Colombier        of the possible meanings of the value */
162*8f5875f3SDavid du Colombier     if ( 0 > analysis || 1 < analysis )
163*8f5875f3SDavid du Colombier         return -1;
164*8f5875f3SDavid du Colombier 
165*8f5875f3SDavid du Colombier     gfp->analysis = analysis;
166*8f5875f3SDavid du Colombier 
167*8f5875f3SDavid du Colombier     return 0;
168*8f5875f3SDavid du Colombier }
169*8f5875f3SDavid du Colombier 
170*8f5875f3SDavid du Colombier int
lame_get_analysis(const lame_global_flags * gfp)171*8f5875f3SDavid du Colombier lame_get_analysis( const lame_global_flags*  gfp )
172*8f5875f3SDavid du Colombier {
173*8f5875f3SDavid du Colombier     assert( 0 <= gfp->analysis && 1 >= gfp->analysis );
174*8f5875f3SDavid du Colombier 
175*8f5875f3SDavid du Colombier     return gfp->analysis;
176*8f5875f3SDavid du Colombier }
177*8f5875f3SDavid du Colombier 
178*8f5875f3SDavid du Colombier 
179*8f5875f3SDavid du Colombier /* write a Xing VBR header frame */
180*8f5875f3SDavid du Colombier int
lame_set_bWriteVbrTag(lame_global_flags * gfp,int bWriteVbrTag)181*8f5875f3SDavid du Colombier lame_set_bWriteVbrTag( lame_global_flags*  gfp,
182*8f5875f3SDavid du Colombier                        int bWriteVbrTag )
183*8f5875f3SDavid du Colombier {
184*8f5875f3SDavid du Colombier     /* default = 1 (on) for VBR/ABR modes, 0 (off) for CBR mode */
185*8f5875f3SDavid du Colombier 
186*8f5875f3SDavid du Colombier     /* enforce disable/enable meaning, if we need more than two values
187*8f5875f3SDavid du Colombier        we need to switch to an enum to have an apropriate representation
188*8f5875f3SDavid du Colombier        of the possible meanings of the value */
189*8f5875f3SDavid du Colombier     if ( 0 > bWriteVbrTag || 1 < bWriteVbrTag )
190*8f5875f3SDavid du Colombier         return -1;
191*8f5875f3SDavid du Colombier 
192*8f5875f3SDavid du Colombier     gfp->bWriteVbrTag = bWriteVbrTag;
193*8f5875f3SDavid du Colombier 
194*8f5875f3SDavid du Colombier     return 0;
195*8f5875f3SDavid du Colombier }
196*8f5875f3SDavid du Colombier 
197*8f5875f3SDavid du Colombier int
lame_get_bWriteVbrTag(const lame_global_flags * gfp)198*8f5875f3SDavid du Colombier lame_get_bWriteVbrTag( const lame_global_flags*  gfp )
199*8f5875f3SDavid du Colombier {
200*8f5875f3SDavid du Colombier     assert( 0 <= gfp->bWriteVbrTag && 1 >= gfp->bWriteVbrTag );
201*8f5875f3SDavid du Colombier 
202*8f5875f3SDavid du Colombier     return gfp->bWriteVbrTag;
203*8f5875f3SDavid du Colombier }
204*8f5875f3SDavid du Colombier 
205*8f5875f3SDavid du Colombier 
206*8f5875f3SDavid du Colombier /* disable writing a wave header with *decoding* */
207*8f5875f3SDavid du Colombier int
lame_set_disable_waveheader(lame_global_flags * gfp,int disable_waveheader)208*8f5875f3SDavid du Colombier lame_set_disable_waveheader( lame_global_flags*  gfp,
209*8f5875f3SDavid du Colombier                              int                 disable_waveheader )
210*8f5875f3SDavid du Colombier {
211*8f5875f3SDavid du Colombier     /* default = 0 (disabled) */
212*8f5875f3SDavid du Colombier 
213*8f5875f3SDavid du Colombier     /* enforce disable/enable meaning, if we need more than two values
214*8f5875f3SDavid du Colombier        we need to switch to an enum to have an apropriate representation
215*8f5875f3SDavid du Colombier        of the possible meanings of the value */
216*8f5875f3SDavid du Colombier     if ( 0 > disable_waveheader || 1 < disable_waveheader )
217*8f5875f3SDavid du Colombier         return -1;
218*8f5875f3SDavid du Colombier 
219*8f5875f3SDavid du Colombier     gfp->disable_waveheader = disable_waveheader;
220*8f5875f3SDavid du Colombier 
221*8f5875f3SDavid du Colombier     return 0;
222*8f5875f3SDavid du Colombier }
223*8f5875f3SDavid du Colombier 
224*8f5875f3SDavid du Colombier int
lame_get_disable_waveheader(const lame_global_flags * gfp)225*8f5875f3SDavid du Colombier lame_get_disable_waveheader( const lame_global_flags*  gfp )
226*8f5875f3SDavid du Colombier {
227*8f5875f3SDavid du Colombier     assert( 0 <= gfp->disable_waveheader && 1 >= gfp->disable_waveheader );
228*8f5875f3SDavid du Colombier 
229*8f5875f3SDavid du Colombier     return gfp->disable_waveheader;
230*8f5875f3SDavid du Colombier }
231*8f5875f3SDavid du Colombier 
232*8f5875f3SDavid du Colombier 
233*8f5875f3SDavid du Colombier /* decode only, use lame/mpglib to convert mp3/ogg to wav */
234*8f5875f3SDavid du Colombier int
lame_set_decode_only(lame_global_flags * gfp,int decode_only)235*8f5875f3SDavid du Colombier lame_set_decode_only( lame_global_flags*  gfp,
236*8f5875f3SDavid du Colombier                       int                 decode_only )
237*8f5875f3SDavid du Colombier {
238*8f5875f3SDavid du Colombier     /* default = 0 (disabled) */
239*8f5875f3SDavid du Colombier 
240*8f5875f3SDavid du Colombier     /* enforce disable/enable meaning, if we need more than two values
241*8f5875f3SDavid du Colombier        we need to switch to an enum to have an apropriate representation
242*8f5875f3SDavid du Colombier        of the possible meanings of the value */
243*8f5875f3SDavid du Colombier     if ( 0 > decode_only || 1 < decode_only )
244*8f5875f3SDavid du Colombier         return -1;
245*8f5875f3SDavid du Colombier 
246*8f5875f3SDavid du Colombier     gfp->decode_only = decode_only;
247*8f5875f3SDavid du Colombier 
248*8f5875f3SDavid du Colombier     return 0;
249*8f5875f3SDavid du Colombier }
250*8f5875f3SDavid du Colombier 
251*8f5875f3SDavid du Colombier int
lame_get_decode_only(const lame_global_flags * gfp)252*8f5875f3SDavid du Colombier lame_get_decode_only( const lame_global_flags*  gfp )
253*8f5875f3SDavid du Colombier {
254*8f5875f3SDavid du Colombier     assert( 0 <= gfp->decode_only && 1 >= gfp->decode_only );
255*8f5875f3SDavid du Colombier 
256*8f5875f3SDavid du Colombier     return gfp->decode_only;
257*8f5875f3SDavid du Colombier }
258*8f5875f3SDavid du Colombier 
259*8f5875f3SDavid du Colombier 
260*8f5875f3SDavid du Colombier /* encode a Vorbis .ogg file */
261*8f5875f3SDavid du Colombier int
lame_set_ogg(lame_global_flags * gfp,int ogg)262*8f5875f3SDavid du Colombier lame_set_ogg( lame_global_flags*  gfp,
263*8f5875f3SDavid du Colombier               int                 ogg )
264*8f5875f3SDavid du Colombier {
265*8f5875f3SDavid du Colombier     /* default = 0 (disabled) */
266*8f5875f3SDavid du Colombier 
267*8f5875f3SDavid du Colombier     /* enforce disable/enable meaning, if we need more than two values
268*8f5875f3SDavid du Colombier        we need to switch to an enum to have an apropriate representation
269*8f5875f3SDavid du Colombier        of the possible meanings of the value */
270*8f5875f3SDavid du Colombier     if ( 0 > ogg || 1 < ogg )
271*8f5875f3SDavid du Colombier         return -1;
272*8f5875f3SDavid du Colombier 
273*8f5875f3SDavid du Colombier     gfp->ogg = ogg;
274*8f5875f3SDavid du Colombier 
275*8f5875f3SDavid du Colombier     return 0;
276*8f5875f3SDavid du Colombier }
277*8f5875f3SDavid du Colombier 
278*8f5875f3SDavid du Colombier int
lame_get_ogg(const lame_global_flags * gfp)279*8f5875f3SDavid du Colombier lame_get_ogg( const lame_global_flags*  gfp )
280*8f5875f3SDavid du Colombier {
281*8f5875f3SDavid du Colombier     assert( 0 <= gfp->ogg && 1 >= gfp->ogg );
282*8f5875f3SDavid du Colombier 
283*8f5875f3SDavid du Colombier     return gfp->ogg;
284*8f5875f3SDavid du Colombier }
285*8f5875f3SDavid du Colombier 
286*8f5875f3SDavid du Colombier 
287*8f5875f3SDavid du Colombier /*
288*8f5875f3SDavid du Colombier  * Internal algorithm selection.
289*8f5875f3SDavid du Colombier  * True quality is determined by the bitrate but this variable will effect
290*8f5875f3SDavid du Colombier  * quality by selecting expensive or cheap algorithms.
291*8f5875f3SDavid du Colombier  * quality=0..9.  0=best (very slow).  9=worst.
292*8f5875f3SDavid du Colombier  * recommended:  2     near-best quality, not too slow
293*8f5875f3SDavid du Colombier  *               5     good quality, fast
294*8f5875f3SDavid du Colombier  *               7     ok quality, really fast
295*8f5875f3SDavid du Colombier  */
296*8f5875f3SDavid du Colombier int
lame_set_quality(lame_global_flags * gfp,int quality)297*8f5875f3SDavid du Colombier lame_set_quality( lame_global_flags*  gfp,
298*8f5875f3SDavid du Colombier                   int                 quality )
299*8f5875f3SDavid du Colombier {
300*8f5875f3SDavid du Colombier     gfp->quality = quality;
301*8f5875f3SDavid du Colombier 
302*8f5875f3SDavid du Colombier     return 0;
303*8f5875f3SDavid du Colombier }
304*8f5875f3SDavid du Colombier 
305*8f5875f3SDavid du Colombier int
lame_get_quality(const lame_global_flags * gfp)306*8f5875f3SDavid du Colombier lame_get_quality( const lame_global_flags*  gfp )
307*8f5875f3SDavid du Colombier {
308*8f5875f3SDavid du Colombier     return gfp->quality;
309*8f5875f3SDavid du Colombier }
310*8f5875f3SDavid du Colombier 
311*8f5875f3SDavid du Colombier 
312*8f5875f3SDavid du Colombier /* mode = STEREO, JOINT_STEREO, DUAL_CHANNEL (not supported), MONO */
313*8f5875f3SDavid du Colombier int
lame_set_mode(lame_global_flags * gfp,MPEG_mode mode)314*8f5875f3SDavid du Colombier lame_set_mode( lame_global_flags*  gfp,
315*8f5875f3SDavid du Colombier                MPEG_mode           mode )
316*8f5875f3SDavid du Colombier {
317*8f5875f3SDavid du Colombier     /* default: lame chooses based on compression ratio and input channels */
318*8f5875f3SDavid du Colombier 
319*8f5875f3SDavid du Colombier     if( 0 > mode || MAX_INDICATOR <= mode )
320*8f5875f3SDavid du Colombier         return -1;  /* Unknown MPEG mode! */
321*8f5875f3SDavid du Colombier 
322*8f5875f3SDavid du Colombier     gfp->mode = mode;
323*8f5875f3SDavid du Colombier 
324*8f5875f3SDavid du Colombier     return 0;
325*8f5875f3SDavid du Colombier }
326*8f5875f3SDavid du Colombier 
327*8f5875f3SDavid du Colombier MPEG_mode
lame_get_mode(const lame_global_flags * gfp)328*8f5875f3SDavid du Colombier lame_get_mode( const lame_global_flags*  gfp )
329*8f5875f3SDavid du Colombier {
330*8f5875f3SDavid du Colombier     assert( 0 <= gfp->mode && MAX_INDICATOR > gfp->mode );
331*8f5875f3SDavid du Colombier 
332*8f5875f3SDavid du Colombier     return gfp->mode;
333*8f5875f3SDavid du Colombier }
334*8f5875f3SDavid du Colombier 
335*8f5875f3SDavid du Colombier 
336*8f5875f3SDavid du Colombier /* Us a M/S mode with a switching threshold based on compression ratio */
337*8f5875f3SDavid du Colombier int
lame_set_mode_automs(lame_global_flags * gfp,int mode_automs)338*8f5875f3SDavid du Colombier lame_set_mode_automs( lame_global_flags*  gfp,
339*8f5875f3SDavid du Colombier                       int                 mode_automs )
340*8f5875f3SDavid du Colombier {
341*8f5875f3SDavid du Colombier     /* default = 0 (disabled) */
342*8f5875f3SDavid du Colombier 
343*8f5875f3SDavid du Colombier     /* enforce disable/enable meaning, if we need more than two values
344*8f5875f3SDavid du Colombier        we need to switch to an enum to have an apropriate representation
345*8f5875f3SDavid du Colombier        of the possible meanings of the value */
346*8f5875f3SDavid du Colombier     if ( 0 > mode_automs || 1 < mode_automs )
347*8f5875f3SDavid du Colombier         return -1;
348*8f5875f3SDavid du Colombier 
349*8f5875f3SDavid du Colombier     gfp->mode_automs = mode_automs;
350*8f5875f3SDavid du Colombier 
351*8f5875f3SDavid du Colombier     return 0;
352*8f5875f3SDavid du Colombier }
353*8f5875f3SDavid du Colombier 
354*8f5875f3SDavid du Colombier int
lame_get_mode_automs(const lame_global_flags * gfp)355*8f5875f3SDavid du Colombier lame_get_mode_automs( const lame_global_flags*  gfp )
356*8f5875f3SDavid du Colombier {
357*8f5875f3SDavid du Colombier     assert( 0 <= gfp->mode_automs && 1 >= gfp->mode_automs );
358*8f5875f3SDavid du Colombier 
359*8f5875f3SDavid du Colombier     return gfp->mode_automs;
360*8f5875f3SDavid du Colombier }
361*8f5875f3SDavid du Colombier 
362*8f5875f3SDavid du Colombier 
363*8f5875f3SDavid du Colombier // force_ms.  Force M/S for all frames.  For testing only.
364*8f5875f3SDavid du Colombier // default = 0 (disabled)
365*8f5875f3SDavid du Colombier int
366*8f5875f3SDavid du Colombier lame_set_force_ms( lame_global_flags*  gfp,
367*8f5875f3SDavid du Colombier                    int                 force_ms );
368*8f5875f3SDavid du Colombier int
369*8f5875f3SDavid du Colombier lame_get_force_ms( const lame_global_flags*  gfp );
370*8f5875f3SDavid du Colombier 
371*8f5875f3SDavid du Colombier 
372*8f5875f3SDavid du Colombier // use free_format?  default = 0 (disabled)
373*8f5875f3SDavid du Colombier int
374*8f5875f3SDavid du Colombier lame_set_free_format( lame_global_flags*  gfp,
375*8f5875f3SDavid du Colombier                       int                 free_format );
376*8f5875f3SDavid du Colombier int
377*8f5875f3SDavid du Colombier lame_get_free_format( const lame_global_flags*  gfp );
378*8f5875f3SDavid du Colombier 
379*8f5875f3SDavid du Colombier 
380*8f5875f3SDavid du Colombier /* message handlers */
381*8f5875f3SDavid du Colombier int
lame_set_errorf(lame_global_flags * gfp,void (* func)(const char *,va_list))382*8f5875f3SDavid du Colombier lame_set_errorf( lame_global_flags*  gfp,
383*8f5875f3SDavid du Colombier                  void                (*func)( const char*, va_list ) )
384*8f5875f3SDavid du Colombier {
385*8f5875f3SDavid du Colombier     gfp->report.errorf = func;
386*8f5875f3SDavid du Colombier 
387*8f5875f3SDavid du Colombier     return 0;
388*8f5875f3SDavid du Colombier }
389*8f5875f3SDavid du Colombier 
390*8f5875f3SDavid du Colombier int
lame_set_debugf(lame_global_flags * gfp,void (* func)(const char *,va_list))391*8f5875f3SDavid du Colombier lame_set_debugf( lame_global_flags*  gfp,
392*8f5875f3SDavid du Colombier                  void                (*func)( const char*, va_list ) )
393*8f5875f3SDavid du Colombier {
394*8f5875f3SDavid du Colombier     gfp->report.debugf = func;
395*8f5875f3SDavid du Colombier 
396*8f5875f3SDavid du Colombier     return 0;
397*8f5875f3SDavid du Colombier }
398*8f5875f3SDavid du Colombier 
399*8f5875f3SDavid du Colombier int
lame_set_msgf(lame_global_flags * gfp,void (* func)(const char *,va_list))400*8f5875f3SDavid du Colombier lame_set_msgf( lame_global_flags*  gfp,
401*8f5875f3SDavid du Colombier                void                (*func)( const char *, va_list ) )
402*8f5875f3SDavid du Colombier {
403*8f5875f3SDavid du Colombier     gfp->report.msgf = func;
404*8f5875f3SDavid du Colombier 
405*8f5875f3SDavid du Colombier     return 0;
406*8f5875f3SDavid du Colombier }
407*8f5875f3SDavid du Colombier 
408*8f5875f3SDavid du Colombier 
409*8f5875f3SDavid du Colombier /* set one of brate compression ratio.  default is compression ratio of 11.  */
410*8f5875f3SDavid du Colombier int
411*8f5875f3SDavid du Colombier lame_set_brate( lame_global_flags*  gfp,
412*8f5875f3SDavid du Colombier                 int                 brate );
413*8f5875f3SDavid du Colombier int
414*8f5875f3SDavid du Colombier lame_get_brate( const lame_global_flags*  gfp );
415*8f5875f3SDavid du Colombier int
416*8f5875f3SDavid du Colombier lame_set_compression_ratio( lame_global_flags*  gfp,
417*8f5875f3SDavid du Colombier                             float               compression_ratio );
418*8f5875f3SDavid du Colombier float
419*8f5875f3SDavid du Colombier lame_get_compression_ratio( const lame_global_flags*  gfp );
420*8f5875f3SDavid du Colombier 
421*8f5875f3SDavid du Colombier 
422*8f5875f3SDavid du Colombier 
423*8f5875f3SDavid du Colombier 
424*8f5875f3SDavid du Colombier /*
425*8f5875f3SDavid du Colombier  * frame parameters
426*8f5875f3SDavid du Colombier  */
427*8f5875f3SDavid du Colombier 
428*8f5875f3SDavid du Colombier // mark as copyright.  default=0
429*8f5875f3SDavid du Colombier int
430*8f5875f3SDavid du Colombier lame_set_copyright( lame_global_flags*  gfp,
431*8f5875f3SDavid du Colombier                     int                 copyright );
432*8f5875f3SDavid du Colombier int
433*8f5875f3SDavid du Colombier lame_get_copyright( const lame_global_flags*  gfp );
434*8f5875f3SDavid du Colombier 
435*8f5875f3SDavid du Colombier 
436*8f5875f3SDavid du Colombier // mark as original.  default=1
437*8f5875f3SDavid du Colombier int
438*8f5875f3SDavid du Colombier lame_set_original( lame_global_flags*  gfp,
439*8f5875f3SDavid du Colombier                    int                 original );
440*8f5875f3SDavid du Colombier int
441*8f5875f3SDavid du Colombier lame_get_original( const lame_global_flags*  gfp );
442*8f5875f3SDavid du Colombier 
443*8f5875f3SDavid du Colombier 
444*8f5875f3SDavid du Colombier // error_protection.  Use 2 bytes from each fraome for CRC checksum. default=0
445*8f5875f3SDavid du Colombier int
446*8f5875f3SDavid du Colombier lame_set_error_protection( lame_global_flags*  gfp,
447*8f5875f3SDavid du Colombier                            int                 error_protection );
448*8f5875f3SDavid du Colombier int
449*8f5875f3SDavid du Colombier lame_get_error_protection( const lame_global_flags*  gfp );
450*8f5875f3SDavid du Colombier 
451*8f5875f3SDavid du Colombier 
452*8f5875f3SDavid du Colombier // padding_type.  0=pad no frames  1=pad all frames 2=adjust padding(default)
453*8f5875f3SDavid du Colombier int
454*8f5875f3SDavid du Colombier lame_set_padding_type( lame_global_flags*  gfp,
455*8f5875f3SDavid du Colombier                        int                 padding_type );
456*8f5875f3SDavid du Colombier int
457*8f5875f3SDavid du Colombier lame_get_padding_type( const lame_global_flags*  gfp );
458*8f5875f3SDavid du Colombier 
459*8f5875f3SDavid du Colombier 
460*8f5875f3SDavid du Colombier // MP3 'private extension' bit  Meaningless
461*8f5875f3SDavid du Colombier int
462*8f5875f3SDavid du Colombier lame_set_extension( lame_global_flags*  gfp,
463*8f5875f3SDavid du Colombier                     int                 extension );
464*8f5875f3SDavid du Colombier int
465*8f5875f3SDavid du Colombier lame_get_extension( const lame_global_flags*  gfp );
466*8f5875f3SDavid du Colombier 
467*8f5875f3SDavid du Colombier 
468*8f5875f3SDavid du Colombier // enforce strict ISO compliance.  default=0
469*8f5875f3SDavid du Colombier int
470*8f5875f3SDavid du Colombier lame_set_strict_ISO( lame_global_flags*  gfp,
471*8f5875f3SDavid du Colombier                      int                 strict_ISO );
472*8f5875f3SDavid du Colombier int
473*8f5875f3SDavid du Colombier lame_get_strict_ISO( const lame_global_flags*  gfp );
474*8f5875f3SDavid du Colombier 
475*8f5875f3SDavid du Colombier 
476*8f5875f3SDavid du Colombier 
477*8f5875f3SDavid du Colombier 
478*8f5875f3SDavid du Colombier /********************************************************************
479*8f5875f3SDavid du Colombier  * quantization/noise shaping
480*8f5875f3SDavid du Colombier  ***********************************************************************/
481*8f5875f3SDavid du Colombier 
482*8f5875f3SDavid du Colombier // disable the bit reservoir. For testing only. default=0
483*8f5875f3SDavid du Colombier int
484*8f5875f3SDavid du Colombier lame_set_disable_reservoir( lame_global_flags*  gfp,
485*8f5875f3SDavid du Colombier                             int                 disable_reservoir );
486*8f5875f3SDavid du Colombier int
487*8f5875f3SDavid du Colombier lame_get_disable_reservoir( const lame_global_flags*  gfp );
488*8f5875f3SDavid du Colombier 
489*8f5875f3SDavid du Colombier 
490*8f5875f3SDavid du Colombier // select a different "best quantization" function. default=0
491*8f5875f3SDavid du Colombier int
492*8f5875f3SDavid du Colombier lame_set_experimentalX( lame_global_flags*  gfp,
493*8f5875f3SDavid du Colombier                         int                 experimentalX );
494*8f5875f3SDavid du Colombier int
495*8f5875f3SDavid du Colombier lame_get_experimentalX( const lame_global_flags*  gfp );
496*8f5875f3SDavid du Colombier 
497*8f5875f3SDavid du Colombier 
498*8f5875f3SDavid du Colombier // another experimental option.  for testing only
499*8f5875f3SDavid du Colombier int
500*8f5875f3SDavid du Colombier lame_set_experimentalY( lame_global_flags*  gfp,
501*8f5875f3SDavid du Colombier                         int                 experimentalY );
502*8f5875f3SDavid du Colombier int
503*8f5875f3SDavid du Colombier lame_get_experimentalY( const lame_global_flags*  gfp );
504*8f5875f3SDavid du Colombier 
505*8f5875f3SDavid du Colombier 
506*8f5875f3SDavid du Colombier // another experimental option.  for testing only
507*8f5875f3SDavid du Colombier int
508*8f5875f3SDavid du Colombier lame_set_experimentalZ( lame_global_flags*  gfp,
509*8f5875f3SDavid du Colombier                         int                 experimentalZ );
510*8f5875f3SDavid du Colombier int
511*8f5875f3SDavid du Colombier lame_get_experimentalZ( const lame_global_flags*  gfp );
512*8f5875f3SDavid du Colombier 
513*8f5875f3SDavid du Colombier 
514*8f5875f3SDavid du Colombier // Naoki's psycho acoustic model.  default=0
515*8f5875f3SDavid du Colombier int
516*8f5875f3SDavid du Colombier lame_set_exp_nspsytune( lame_global_flags*  gfp,
517*8f5875f3SDavid du Colombier                         int                 exp_nspsytune );
518*8f5875f3SDavid du Colombier int
519*8f5875f3SDavid du Colombier lame_get_exp_nspsytune( const lame_global_flags*  gfp );
520*8f5875f3SDavid du Colombier 
521*8f5875f3SDavid du Colombier 
522*8f5875f3SDavid du Colombier 
523*8f5875f3SDavid du Colombier 
524*8f5875f3SDavid du Colombier /********************************************************************
525*8f5875f3SDavid du Colombier  * VBR control
526*8f5875f3SDavid du Colombier  ***********************************************************************/
527*8f5875f3SDavid du Colombier 
528*8f5875f3SDavid du Colombier // Types of VBR.  default = vbr_off = CBR
529*8f5875f3SDavid du Colombier int
530*8f5875f3SDavid du Colombier lame_set_VBR( lame_global_flags*  gfp,
531*8f5875f3SDavid du Colombier               vbr_mode            VBR );
532*8f5875f3SDavid du Colombier vbr_mode
533*8f5875f3SDavid du Colombier lame_get_exp_VBR( const lame_global_flags*  gfp );
534*8f5875f3SDavid du Colombier 
535*8f5875f3SDavid du Colombier 
536*8f5875f3SDavid du Colombier // VBR quality level.  0=highest  9=lowest
537*8f5875f3SDavid du Colombier int
538*8f5875f3SDavid du Colombier lame_set_VBR_q( lame_global_flags*  gfp,
539*8f5875f3SDavid du Colombier                 int                 VBR_q );
540*8f5875f3SDavid du Colombier int
541*8f5875f3SDavid du Colombier lame_get_VBR_q( const lame_global_flags*  gfp );
542*8f5875f3SDavid du Colombier 
543*8f5875f3SDavid du Colombier 
544*8f5875f3SDavid du Colombier // Ignored except for VBR=vbr_abr (ABR mode)
545*8f5875f3SDavid du Colombier int
546*8f5875f3SDavid du Colombier lame_set_VBR_mean_bitrate_kbps( lame_global_flags*  gfp,
547*8f5875f3SDavid du Colombier                                 int                 VBR_mean_bitrate_kbps );
548*8f5875f3SDavid du Colombier int
549*8f5875f3SDavid du Colombier lame_get_VBR_mean_bitrate_kbps( const lame_global_flags*  gfp );
550*8f5875f3SDavid du Colombier 
551*8f5875f3SDavid du Colombier int
552*8f5875f3SDavid du Colombier lame_set_VBR_min_bitrate_kbps( lame_global_flags*  gfp,
553*8f5875f3SDavid du Colombier                                int                 VBR_min_bitrate_kbps );
554*8f5875f3SDavid du Colombier int
555*8f5875f3SDavid du Colombier lame_get_VBR_min_bitrate_kbps( const lame_global_flags*  gfp );
556*8f5875f3SDavid du Colombier 
557*8f5875f3SDavid du Colombier int
558*8f5875f3SDavid du Colombier lame_set_VBR_max_bitrate_kbps( lame_global_flags*  gfp,
559*8f5875f3SDavid du Colombier                                int                 VBR_max_bitrate_kbps );
560*8f5875f3SDavid du Colombier int
561*8f5875f3SDavid du Colombier lame_get_VBR_max_bitrate_kbps( const lame_global_flags*  gfp );
562*8f5875f3SDavid du Colombier 
563*8f5875f3SDavid du Colombier 
564*8f5875f3SDavid du Colombier // 1=stricetly enforce VBR_min_bitrate.  Normally it will be violated for
565*8f5875f3SDavid du Colombier // analog silence
566*8f5875f3SDavid du Colombier int
567*8f5875f3SDavid du Colombier lame_set_VBR_hard_min( lame_global_flags*  gfp,
568*8f5875f3SDavid du Colombier                        int                 VBR_hard_min );
569*8f5875f3SDavid du Colombier int
570*8f5875f3SDavid du Colombier lame_get_VBR_hard_min( const lame_global_flags*  gfp );
571*8f5875f3SDavid du Colombier 
572*8f5875f3SDavid du Colombier 
573*8f5875f3SDavid du Colombier /********************************************************************
574*8f5875f3SDavid du Colombier  * Filtering control
575*8f5875f3SDavid du Colombier  ***********************************************************************/
576*8f5875f3SDavid du Colombier 
577*8f5875f3SDavid du Colombier // freq in Hz to apply lowpass. Default = 0 = lame chooses.  -1 = disabled
578*8f5875f3SDavid du Colombier int
579*8f5875f3SDavid du Colombier lame_set_lowpassfreq( lame_global_flags*  gfp,
580*8f5875f3SDavid du Colombier                       int                 lowpassfreq );
581*8f5875f3SDavid du Colombier int
582*8f5875f3SDavid du Colombier lame_get_lowpassfreq( const lame_global_flags*  gfp );
583*8f5875f3SDavid du Colombier 
584*8f5875f3SDavid du Colombier 
585*8f5875f3SDavid du Colombier // width of transition band, in Hz.  Default = one polyphase filter band
586*8f5875f3SDavid du Colombier int
587*8f5875f3SDavid du Colombier lame_set_lowpasswidth( lame_global_flags*  gfp,
588*8f5875f3SDavid du Colombier                        int                 lowpasswidth );
589*8f5875f3SDavid du Colombier int
590*8f5875f3SDavid du Colombier lame_get_lowpasswidth( const lame_global_flags*  gfp );
591*8f5875f3SDavid du Colombier 
592*8f5875f3SDavid du Colombier 
593*8f5875f3SDavid du Colombier // freq in Hz to apply highpass. Default = 0 = lame chooses.  -1 = disabled
594*8f5875f3SDavid du Colombier int
595*8f5875f3SDavid du Colombier lame_set_highpassfreq( lame_global_flags*  gfp,
596*8f5875f3SDavid du Colombier                        int                 highpassfreq );
597*8f5875f3SDavid du Colombier int
598*8f5875f3SDavid du Colombier lame_get_highpassfreq( const lame_global_flags*  gfp );
599*8f5875f3SDavid du Colombier 
600*8f5875f3SDavid du Colombier 
601*8f5875f3SDavid du Colombier // width of transition band, in Hz.  Default = one polyphase filter band
602*8f5875f3SDavid du Colombier int
603*8f5875f3SDavid du Colombier lame_set_highpasswidth( lame_global_flags*  gfp,
604*8f5875f3SDavid du Colombier                         int                 highpasswidth );
605*8f5875f3SDavid du Colombier int
606*8f5875f3SDavid du Colombier lame_get_highpasswidth( const lame_global_flags*  gfp );
607*8f5875f3SDavid du Colombier 
608*8f5875f3SDavid du Colombier 
609*8f5875f3SDavid du Colombier 
610*8f5875f3SDavid du Colombier 
611*8f5875f3SDavid du Colombier /*
612*8f5875f3SDavid du Colombier  * psycho acoustics and other arguments which you should not change
613*8f5875f3SDavid du Colombier  * unless you know what you are doing
614*8f5875f3SDavid du Colombier  */
615*8f5875f3SDavid du Colombier 
616*8f5875f3SDavid du Colombier // only use ATH for masking
617*8f5875f3SDavid du Colombier int
618*8f5875f3SDavid du Colombier lame_set_ATHonly( lame_global_flags*  gfp,
619*8f5875f3SDavid du Colombier                   int                 ATHonly );
620*8f5875f3SDavid du Colombier int
621*8f5875f3SDavid du Colombier lame_get_ATHonly( const lame_global_flags*  gfp );
622*8f5875f3SDavid du Colombier 
623*8f5875f3SDavid du Colombier 
624*8f5875f3SDavid du Colombier // only use ATH for short blocks
625*8f5875f3SDavid du Colombier int
626*8f5875f3SDavid du Colombier lame_set_ATHshort( lame_global_flags*  gfp,
627*8f5875f3SDavid du Colombier                    int                 ATHshort );
628*8f5875f3SDavid du Colombier int
629*8f5875f3SDavid du Colombier lame_get_ATHshort( const lame_global_flags*  gfp );
630*8f5875f3SDavid du Colombier 
631*8f5875f3SDavid du Colombier 
632*8f5875f3SDavid du Colombier // disable ATH
633*8f5875f3SDavid du Colombier int
634*8f5875f3SDavid du Colombier lame_set_noATH( lame_global_flags*  gfp,
635*8f5875f3SDavid du Colombier                 int                 noATH );
636*8f5875f3SDavid du Colombier int
637*8f5875f3SDavid du Colombier lame_get_noATH( const lame_global_flags*  gfp );
638*8f5875f3SDavid du Colombier 
639*8f5875f3SDavid du Colombier 
640*8f5875f3SDavid du Colombier // select ATH formula
641*8f5875f3SDavid du Colombier int
642*8f5875f3SDavid du Colombier lame_set_ATHtype( lame_global_flags*  gfp,
643*8f5875f3SDavid du Colombier                   int                 ATHtype );
644*8f5875f3SDavid du Colombier int
645*8f5875f3SDavid du Colombier lame_get_ATHtype( const lame_global_flags*  gfp );
646*8f5875f3SDavid du Colombier 
647*8f5875f3SDavid du Colombier 
648*8f5875f3SDavid du Colombier // lower ATH by this many db
649*8f5875f3SDavid du Colombier int
650*8f5875f3SDavid du Colombier lame_set_ATHlower( lame_global_flags*  gfp,
651*8f5875f3SDavid du Colombier                    float               ATHlower );
652*8f5875f3SDavid du Colombier float
653*8f5875f3SDavid du Colombier lame_get_ATHlower( const lame_global_flags*  gfp );
654*8f5875f3SDavid du Colombier 
655*8f5875f3SDavid du Colombier 
656*8f5875f3SDavid du Colombier // predictability limit (ISO tonality formula)
657*8f5875f3SDavid du Colombier int
658*8f5875f3SDavid du Colombier lame_set_cwlimit( lame_global_flags*  gfp,
659*8f5875f3SDavid du Colombier                   int                 cwlimit );
660*8f5875f3SDavid du Colombier int
661*8f5875f3SDavid du Colombier lame_get_cwlimit( const lame_global_flags*  gfp );
662*8f5875f3SDavid du Colombier 
663*8f5875f3SDavid du Colombier 
664*8f5875f3SDavid du Colombier // allow blocktypes to differ between channels?
665*8f5875f3SDavid du Colombier // default: 0 for jstereo, 1 for stereo
666*8f5875f3SDavid du Colombier int
667*8f5875f3SDavid du Colombier lame_set_allow_diff_short( lame_global_flags*  gfp,
668*8f5875f3SDavid du Colombier                            int                 allow_diff_short );
669*8f5875f3SDavid du Colombier int
670*8f5875f3SDavid du Colombier lame_get_allow_diff_short( const lame_global_flags*  gfp );
671*8f5875f3SDavid du Colombier 
672*8f5875f3SDavid du Colombier 
673*8f5875f3SDavid du Colombier // use temporal masking effect (default = 1)
674*8f5875f3SDavid du Colombier int
675*8f5875f3SDavid du Colombier lame_set_useTemporal( lame_global_flags*  gfp,
676*8f5875f3SDavid du Colombier                       int                 useTemporal );
677*8f5875f3SDavid du Colombier int
678*8f5875f3SDavid du Colombier lame_get_useTemporal( const lame_global_flags*  gfp );
679*8f5875f3SDavid du Colombier 
680*8f5875f3SDavid du Colombier 
681*8f5875f3SDavid du Colombier // disable short blocks
682*8f5875f3SDavid du Colombier int
683*8f5875f3SDavid du Colombier lame_set_no_short_blocks( lame_global_flags*  gfp,
684*8f5875f3SDavid du Colombier                           int                 no_short_blocks );
685*8f5875f3SDavid du Colombier int
686*8f5875f3SDavid du Colombier lame_get_no_short_blocks( const lame_global_flags*  gfp );
687*8f5875f3SDavid du Colombier 
688*8f5875f3SDavid du Colombier 
689*8f5875f3SDavid du Colombier /* Input PCM is emphased PCM (for instance from one of the rarely
690*8f5875f3SDavid du Colombier    emphased CDs), it is STRONGLY not recommended to use this, because
691*8f5875f3SDavid du Colombier    psycho does not take it into account, and last but not least many decoders
692*8f5875f3SDavid du Colombier    ignore these bits */
693*8f5875f3SDavid du Colombier int
694*8f5875f3SDavid du Colombier lame_set_emphasis( lame_global_flags*  gfp,
695*8f5875f3SDavid du Colombier                    int                 emphasis );
696*8f5875f3SDavid du Colombier int
697*8f5875f3SDavid du Colombier lame_get_emphasis( const lame_global_flags*  gfp );
698*8f5875f3SDavid du Colombier 
699*8f5875f3SDavid du Colombier 
700*8f5875f3SDavid du Colombier 
701*8f5875f3SDavid du Colombier 
702*8f5875f3SDavid du Colombier /***************************************************************/
703*8f5875f3SDavid du Colombier /* internal variables, cannot be set...                        */
704*8f5875f3SDavid du Colombier /* provided because they may be of use to calling application  */
705*8f5875f3SDavid du Colombier /***************************************************************/
706*8f5875f3SDavid du Colombier 
707*8f5875f3SDavid du Colombier // version  0=MPEG-2  1=MPEG-1  (2=MPEG-2.5)
708*8f5875f3SDavid du Colombier int
709*8f5875f3SDavid du Colombier lame_get_version( const lame_global_flags* gfp );
710*8f5875f3SDavid du Colombier 
711*8f5875f3SDavid du Colombier 
712*8f5875f3SDavid du Colombier // encoder delay
713*8f5875f3SDavid du Colombier int
714*8f5875f3SDavid du Colombier lame_get_encoder_delay( const lame_global_flags*  gfp );
715*8f5875f3SDavid du Colombier 
716*8f5875f3SDavid du Colombier 
717*8f5875f3SDavid du Colombier // size of MPEG frame
718*8f5875f3SDavid du Colombier int
719*8f5875f3SDavid du Colombier lame_get_framesize( const lame_global_flags*  gfp );
720*8f5875f3SDavid du Colombier 
721*8f5875f3SDavid du Colombier 
722*8f5875f3SDavid du Colombier // number of frames encoded so far
723*8f5875f3SDavid du Colombier int
724*8f5875f3SDavid du Colombier lame_get_frameNum( const lame_global_flags*  gfp );
725*8f5875f3SDavid du Colombier 
726*8f5875f3SDavid du Colombier 
727*8f5875f3SDavid du Colombier // lame's estimate of the total number of frames to be encoded
728*8f5875f3SDavid du Colombier // only valid if calling program set num_samples
729*8f5875f3SDavid du Colombier int
730*8f5875f3SDavid du Colombier lame_get_totalframes( const lame_global_flags*  gfp );
731