annotate libmpcodecs/ae_twolame.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents ed8f90096c65
children 39d9ff988bc0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15359
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
1 #include <stdio.h>
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
2 #include <stdlib.h>
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
3 #include <inttypes.h>
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
4 #include <unistd.h>
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
5 #include <string.h>
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
6 #include <sys/types.h>
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
7 #include "m_option.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16482
diff changeset
8 #include "mp_msg.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
9 #include "libmpdemux/aviheader.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16482
diff changeset
10 #include "libaf/af_format.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
11 #include "libmpdemux/ms_hdr.h"
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 21660
diff changeset
12 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
13 #include "libmpdemux/muxer.h"
15359
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
14 #include "ae_twolame.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16482
diff changeset
15 #include "libmpdemux/mp3_hdr.h"
15359
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
16
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
17
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
18 static int
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
19 param_bitrate = 192,
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
20 param_psy = 3,
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
21 param_maxvbr = 0,
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
22 param_errprot = 0,
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
23 param_debug = 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
24
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
25 static float param_vbr = 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
26 static char *param_mode = "stereo";
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
27
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
28 m_option_t twolameopts_conf[] = {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
29 {"br", &param_bitrate, CONF_TYPE_INT, 0, 0, 0, NULL},
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
30 {"mode", &param_mode, CONF_TYPE_STRING, 0, 0, 0, NULL},
15362
4ff00aa141ef updated psycho model range; made a parameter file-static in ae_toolame.c
nicodvb
parents: 15359
diff changeset
31 {"psy", &param_psy, CONF_TYPE_INT, CONF_RANGE, -1, 4, NULL},
15359
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
32 {"vbr", &param_vbr, CONF_TYPE_FLOAT, CONF_RANGE, -50, 50, NULL},
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
33 {"maxvbr", &param_maxvbr, CONF_TYPE_INT, 0, 0, 0, NULL},
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
34 {"errprot", &param_errprot, CONF_TYPE_INT, CONF_RANGE, 0, 1, NULL},
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
35 {"debug", &param_debug, CONF_TYPE_INT, CONF_RANGE, 0, 100000000, NULL},
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
36 {NULL, NULL, 0, 0, 0, 0, NULL}
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
37 };
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
38
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
39
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
40 static int bind_twolame(audio_encoder_t *encoder, muxer_stream_t *mux_a)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
41 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
42 mpae_twolame_ctx *ctx = (mpae_twolame_ctx *) encoder->priv;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
43
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
44 mux_a->wf = malloc(sizeof(WAVEFORMATEX)+256);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
45 mux_a->wf->wFormatTag = 0x50;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
46 mux_a->wf->nChannels = encoder->params.channels;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
47 mux_a->wf->nSamplesPerSec = encoder->params.sample_rate;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
48 mux_a->wf->nAvgBytesPerSec = encoder->params.bitrate / 8;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
49
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
50 if(ctx->vbr || ((mux_a->wf->nAvgBytesPerSec * encoder->params.samples_per_frame) % mux_a->wf->nSamplesPerSec))
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
51 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
52 mux_a->h.dwScale = encoder->params.samples_per_frame;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
53 mux_a->h.dwRate = encoder->params.sample_rate;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
54 mux_a->h.dwSampleSize = 0; // Blocksize not constant
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
55 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
56 else
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
57 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
58 mux_a->h.dwScale = (mux_a->wf->nAvgBytesPerSec * encoder->params.samples_per_frame)/ mux_a->wf->nSamplesPerSec; /* for cbr */
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
59 mux_a->h.dwRate = mux_a->wf->nAvgBytesPerSec;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
60 mux_a->h.dwSampleSize = mux_a->h.dwScale;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
61 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
62 mux_a->wf->nBlockAlign = mux_a->h.dwScale;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
63 mux_a->h.dwSuggestedBufferSize = (encoder->params.audio_preload*mux_a->wf->nAvgBytesPerSec)/1000;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
64 mux_a->h.dwSuggestedBufferSize -= mux_a->h.dwSuggestedBufferSize % mux_a->wf->nBlockAlign;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
65
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
66 mux_a->wf->cbSize = 0; //12;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
67 mux_a->wf->wBitsPerSample = 0; /* does not apply */
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
68 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->wID = 1;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
69 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->fdwFlags = 2;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
70 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nBlockSize = mux_a->wf->nBlockAlign;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
71 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nFramesPerBlock = 1;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
72 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nCodecDelay = 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
73
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
74 // Fix allocation
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
75 mux_a->wf = realloc(mux_a->wf, sizeof(WAVEFORMATEX)+mux_a->wf->cbSize);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
76
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
77 encoder->input_format = AF_FORMAT_S16_NE;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
78 encoder->min_buffer_size = mux_a->h.dwSuggestedBufferSize;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
79 encoder->max_buffer_size = mux_a->h.dwSuggestedBufferSize*2;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
80
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
81 return 1;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
82 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
83
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
84 static int encode_twolame(audio_encoder_t *encoder, uint8_t *dest, void *src, int len, int max_size)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
85 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
86 mpae_twolame_ctx *ctx = (mpae_twolame_ctx *)encoder->priv;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
87 int ret_size = 0, r2;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
88
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
89 len /= (2*encoder->params.channels);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
90 ret_size = twolame_encode_buffer_interleaved(ctx->twolame_ctx, src, len, dest, max_size);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
91 r2 = mp_decode_mp3_header(dest);
16482
82698fb46c73 reduced verbosity
nicodvb
parents: 15362
diff changeset
92 mp_msg(MSGT_MENCODER, MSGL_DBG2, "\nSIZE: %d, max: %d, r2: %d\n", ret_size, max_size, r2);
15359
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
93 if(r2 > 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
94 ret_size = r2;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
95 return ret_size;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
96 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
97
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
98 int close_twolame(audio_encoder_t *encoder)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
99 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
100 free(encoder->priv);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
101 return 1;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
102 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
103
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
104 static int get_frame_size(audio_encoder_t *encoder)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
105 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
106 int sz;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
107 if(encoder->stream->buffer_len < 4)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
108 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
109 sz = mp_decode_mp3_header(encoder->stream->buffer);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
110 if(sz <= 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
111 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
112 return sz;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
113 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
114
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
115
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
116 int mpae_init_twolame(audio_encoder_t *encoder)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
117 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
118 int mode;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
119 mpae_twolame_ctx *ctx = NULL;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
120
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
121 if(encoder->params.channels == 1)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
122 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
123 mp_msg(MSGT_MENCODER, MSGL_INFO, "ae_twolame, 1 audio channel, forcing mono mode\n");
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
124 mode = TWOLAME_MONO;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
125 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
126 else if(encoder->params.channels == 2)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
127 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
128 if(! strcasecmp(param_mode, "dual"))
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
129 mode = TWOLAME_DUAL_CHANNEL;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
130 else if(! strcasecmp(param_mode, "jstereo"))
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
131 mode = TWOLAME_JOINT_STEREO;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
132 else if(! strcasecmp(param_mode, "stereo"))
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
133 mode = TWOLAME_STEREO;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
134 else
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
135 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
136 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_twolame, unknown mode %s, exiting\n", param_mode);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
137 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
138 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
139 else
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
140 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_twolame, Twolame can't encode > 2 channels, exiting\n");
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
141
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
142 ctx = (mpae_twolame_ctx *) calloc(1, sizeof(mpae_twolame_ctx));
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
143 if(ctx == NULL)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
144 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
145 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_twolame, couldn't alloc a %d bytes context, exiting\n", sizeof(mpae_twolame_ctx));
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
146 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
147 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
148
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
149 ctx->twolame_ctx = twolame_init();
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
150 if(ctx->twolame_ctx == NULL)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
151 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
152 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_twolame, couldn't initial parameters from libtwolame, exiting\n");
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
153 free(ctx);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
154 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
155 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
156 ctx->vbr = 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
157
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
158 if(twolame_set_num_channels(ctx->twolame_ctx, encoder->params.channels) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
159 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
160 if(twolame_set_mode(ctx->twolame_ctx, mode) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
161 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
162
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
163 if(twolame_set_in_samplerate(ctx->twolame_ctx, encoder->params.sample_rate) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
164 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
165
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
166 if(twolame_set_out_samplerate(ctx->twolame_ctx, encoder->params.sample_rate) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
167 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
168
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
169 if(encoder->params.sample_rate < 32000)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
170 twolame_set_version(ctx->twolame_ctx, TWOLAME_MPEG2);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
171 else
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
172 twolame_set_version(ctx->twolame_ctx, TWOLAME_MPEG1);
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
173
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
174 if(twolame_set_psymodel(ctx->twolame_ctx, param_psy) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
175 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
176
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
177 if(twolame_set_bitrate(ctx->twolame_ctx, param_bitrate) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
178 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
179
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
180 if(param_errprot)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
181 if(twolame_set_error_protection(ctx->twolame_ctx, TRUE) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
182 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
183
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
184 if(param_vbr != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
185 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
186 if(twolame_set_VBR(ctx->twolame_ctx, TRUE) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
187 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
188 if(twolame_set_VBR_q(ctx->twolame_ctx, param_vbr) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
189 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
190 if(twolame_set_padding(ctx->twolame_ctx, FALSE) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
191 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
192 if(param_maxvbr)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
193 {
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
194 if(twolame_set_VBR_max_bitrate_kbps(ctx->twolame_ctx, param_maxvbr) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
195 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
196 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
197 ctx->vbr = 1;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
198 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
199
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
200 if(twolame_set_verbosity(ctx->twolame_ctx, param_debug) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
201 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
202
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
203 if(twolame_init_params(ctx->twolame_ctx) != 0)
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
204 return 0;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
205
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
206 encoder->params.bitrate = param_bitrate * 1000;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
207 encoder->params.samples_per_frame = 1152;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
208 encoder->priv = ctx;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
209 encoder->decode_buffer_size = 1152 * 2 * encoder->params.channels;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
210
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
211 encoder->bind = bind_twolame;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
212 encoder->get_frame_size = get_frame_size;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
213 encoder->encode = encode_twolame;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
214 encoder->close = close_twolame;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
215
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
216 return 1;
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
217 }
af245d15f502 added twolame mp2 audio encoder
nicodvb
parents:
diff changeset
218