annotate libmpcodecs/ae_toolame.c @ 31076:783f8faee539

Put symlinks under revision control instead of generating them during make. This simplifies the build system and should have no practical disadvantage.
author diego
date Mon, 03 May 2010 23:00:58 +0000
parents 4e59a7aebadb
children bc52a219f741
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
1 /*
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
2 * This file is part of MPlayer.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
3 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
5 * it under the terms of the GNU General Public License as published by
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
7 * (at your option) any later version.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
8 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
12 * GNU General Public License for more details.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
13 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
14 * You should have received a copy of the GNU General Public License along
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
17 */
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
18
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
19 #include <stdio.h>
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
20 #include <stdlib.h>
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
21 #include <inttypes.h>
15238
2cc48c37a7eb FreeBSD fix
nexus
parents: 15234
diff changeset
22 #include <unistd.h>
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
23 #include <string.h>
15240
6d6792c02b6f macosx compilation fix
nicodvb
parents: 15238
diff changeset
24 #include <sys/types.h>
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
25 #include "m_option.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16482
diff changeset
26 #include "mp_msg.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
27 #include "libmpdemux/aviheader.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16482
diff changeset
28 #include "libaf/af_format.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
29 #include "libmpdemux/ms_hdr.h"
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 21660
diff changeset
30 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
31 #include "libmpdemux/muxer.h"
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
32 #include "ae_toolame.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16482
diff changeset
33 #include "libmpdemux/mp3_hdr.h"
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
34
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
35
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
36 static int
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
37 param_bitrate = 192,
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
38 param_psy = 3,
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
39 param_maxvbr = 0,
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
40 param_errprot = 0,
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
41 param_debug = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
42
15362
4ff00aa141ef updated psycho model range; made a parameter file-static in ae_toolame.c
nicodvb
parents: 15281
diff changeset
43 static float param_vbr = 0;
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
44 static char *param_mode = "stereo";
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
45
30955
4e59a7aebadb Mark encoder-related m_option_t struct arrays as const.
diego
parents: 30743
diff changeset
46 const m_option_t toolameopts_conf[] = {
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
47 {"br", &param_bitrate, CONF_TYPE_INT, 0, 0, 0, NULL},
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
48 {"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: 15281
diff changeset
49 {"psy", &param_psy, CONF_TYPE_INT, CONF_RANGE, -1, 4, NULL},
15281
dcf97e9eb7e8 fixed variability range
nicodvb
parents: 15265
diff changeset
50 {"vbr", &param_vbr, CONF_TYPE_FLOAT, CONF_RANGE, -50, 50, NULL},
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
51 {"maxvbr", &param_maxvbr, CONF_TYPE_INT, 0, 0, 0, NULL},
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
52 {"errprot", &param_errprot, CONF_TYPE_INT, CONF_RANGE, 0, 1, NULL},
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
53 {"debug", &param_debug, CONF_TYPE_INT, CONF_RANGE, 0, 100000000, NULL},
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
54 {NULL, NULL, 0, 0, 0, 0, NULL}
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
55 };
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
56
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
57
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
58 static int bind_toolame(audio_encoder_t *encoder, muxer_stream_t *mux_a)
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
59 {
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
60 mpae_toolame_ctx *ctx = (mpae_toolame_ctx *) encoder->priv;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
61
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
62 mux_a->wf = malloc(sizeof(WAVEFORMATEX)+256);
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
63 mux_a->wf->wFormatTag = 0x50;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
64 mux_a->wf->nChannels = encoder->params.channels;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
65 mux_a->wf->nSamplesPerSec = encoder->params.sample_rate;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
66 mux_a->wf->nAvgBytesPerSec = 125 * encoder->params.bitrate;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
67
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
68 if(ctx->vbr || ((mux_a->wf->nAvgBytesPerSec * encoder->params.samples_per_frame) % mux_a->wf->nSamplesPerSec))
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
69 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
70 mux_a->h.dwScale = encoder->params.samples_per_frame;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
71 mux_a->h.dwRate = encoder->params.sample_rate;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
72 mux_a->h.dwSampleSize = 0; // Blocksize not constant
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
73 }
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
74 else
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
75 {
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
76 mux_a->h.dwScale = (mux_a->wf->nAvgBytesPerSec * encoder->params.samples_per_frame)/ mux_a->wf->nSamplesPerSec; /* for cbr */
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
77 mux_a->h.dwRate = mux_a->wf->nAvgBytesPerSec;
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
78 mux_a->h.dwSampleSize = mux_a->h.dwScale;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
79 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
80 mux_a->wf->nBlockAlign = mux_a->h.dwScale;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
81 mux_a->h.dwSuggestedBufferSize = (encoder->params.audio_preload*mux_a->wf->nAvgBytesPerSec)/1000;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
82 mux_a->h.dwSuggestedBufferSize -= mux_a->h.dwSuggestedBufferSize % mux_a->wf->nBlockAlign;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
83
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
84 mux_a->wf->cbSize = 0; //12;
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
85 mux_a->wf->wBitsPerSample = 0; /* does not apply */
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
86 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->wID = 1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
87 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->fdwFlags = 2;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
88 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nBlockSize = mux_a->wf->nBlockAlign;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
89 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nFramesPerBlock = 1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
90 ((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nCodecDelay = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
91
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
92 // Fix allocation
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
93 mux_a->wf = realloc(mux_a->wf, sizeof(WAVEFORMATEX)+mux_a->wf->cbSize);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
94
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
95 encoder->input_format = AF_FORMAT_S16_NE;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
96 encoder->min_buffer_size = mux_a->h.dwSuggestedBufferSize;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
97 encoder->max_buffer_size = mux_a->h.dwSuggestedBufferSize*2;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
98
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
99 return 1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
100 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
101
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
102 static int encode_toolame(audio_encoder_t *encoder, uint8_t *dest, void *src, int len, int max_size)
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
103 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
104 mpae_toolame_ctx *ctx = (mpae_toolame_ctx *)encoder->priv;
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
105 int ret_size = 0, r2, i, nsamples;
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
106 int16_t *buffer;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
107
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
108 nsamples = len / (2*encoder->params.channels);
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
109 buffer = (uint16_t *) src;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
110 for(i = 0; i < nsamples; i++)
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
111 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
112 ctx->left_pcm[i] = buffer[ctx->channels * i];
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
113 ctx->right_pcm[i] = buffer[(ctx->channels * i) + (ctx->channels - 1)];
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
114 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
115
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
116 toolame_encode_buffer(ctx->toolame_ctx, ctx->left_pcm, ctx->right_pcm, nsamples, dest, max_size, &ret_size);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
117 r2 = mp_decode_mp3_header(dest);
16482
82698fb46c73 reduced verbosity
nicodvb
parents: 15362
diff changeset
118 mp_msg(MSGT_MENCODER, MSGL_DBG2, "\nSIZE: %d, max: %d, r2: %d\n", ret_size, max_size, r2);
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
119 if(r2 > 0)
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
120 ret_size = r2;
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
121 return ret_size;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
122 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
123
30743
b08fb4b8cfab Make close_toolame() static, only used in ae_toolame.c.
cehoyos
parents: 30702
diff changeset
124 static int close_toolame(audio_encoder_t *encoder)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
125 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
126 free(encoder->priv);
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
127 return 1;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
128 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
129
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
130 static int get_frame_size(audio_encoder_t *encoder)
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
131 {
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
132 int sz;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
133 if(encoder->stream->buffer_len < 4)
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
134 return 0;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
135 sz = mp_decode_mp3_header(encoder->stream->buffer);
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
136 if(sz <= 0)
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
137 return 0;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
138 return sz;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
139 }
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
140
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
141
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
142 int mpae_init_toolame(audio_encoder_t *encoder)
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
143 {
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
144 int mode;
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
145 mpae_toolame_ctx *ctx = NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
146
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
147 if(encoder->params.channels == 1)
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
148 {
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
149 mp_msg(MSGT_MENCODER, MSGL_INFO, "ae_toolame, 1 audio channel, forcing mono mode\n");
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
150 mode = MPG_MD_MONO;
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
151 }
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
152 else if(encoder->params.channels == 2)
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
153 {
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
154 if(! strcasecmp(param_mode, "dual"))
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
155 mode = MPG_MD_DUAL_CHANNEL;
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
156 else if(! strcasecmp(param_mode, "jstereo"))
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
157 mode = MPG_MD_JOINT_STEREO;
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
158 else if(! strcasecmp(param_mode, "stereo"))
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
159 mode = MPG_MD_STEREO;
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
160 else
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
161 {
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
162 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_toolame, unknown mode %s, exiting\n", param_mode);
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
163 }
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
164 }
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
165 else
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
166 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_toolame, Toolame can't encode > 2 channels, exiting\n");
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
167
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 30633
diff changeset
168 ctx = calloc(1, sizeof(mpae_toolame_ctx));
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
169 if(ctx == NULL)
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
170 {
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
171 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_toolame, couldn't alloc a %d bytes context, exiting\n", sizeof(mpae_toolame_ctx));
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
172 return 0;
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
173 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
174
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
175 ctx->toolame_ctx = toolame_init();
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
176 if(ctx->toolame_ctx == NULL)
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
177 {
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
178 mp_msg(MSGT_MENCODER, MSGL_ERR, "ae_toolame, couldn't initial parameters from libtoolame, exiting\n");
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
179 free(ctx);
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
180 return 0;
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
181 }
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
182 ctx->vbr = 0;
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
183 ctx->channels = encoder->params.channels;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
184 ctx->srate = encoder->params.sample_rate;
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
185
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
186 if(toolame_setMode(ctx->toolame_ctx, mode) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
187 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
188
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
189 if(toolame_setPsymodel(ctx->toolame_ctx, param_psy) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
190 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
191
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
192 if(toolame_setSampleFreq(ctx->toolame_ctx, encoder->params.sample_rate) != 0)
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
193 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
194
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
195 if(toolame_setBitrate(ctx->toolame_ctx, param_bitrate) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
196 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
197
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
198 if(param_errprot)
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
199 if(toolame_setErrorProtection(ctx->toolame_ctx, TRUE) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
200 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
201
15281
dcf97e9eb7e8 fixed variability range
nicodvb
parents: 15265
diff changeset
202 if(param_vbr != 0)
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
203 {
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
204 if(toolame_setVBR(ctx->toolame_ctx, TRUE) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
205 return 0;
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
206 if(toolame_setVBRLevel(ctx->toolame_ctx, param_vbr) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
207 return 0;
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
208 if(toolame_setPadding(ctx->toolame_ctx, FALSE) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
209 return 0;
15265
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
210 if(param_maxvbr)
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
211 {
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
212 if(toolame_setVBRUpperBitrate(ctx->toolame_ctx, param_maxvbr) != 0)
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
213 return 0;
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
214 }
92772475ed8d toolame now works in vbr mode, too
nicodvb
parents: 15240
diff changeset
215 ctx->vbr = 1;
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
216 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
217
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
218 if(toolame_setVerbosity(ctx->toolame_ctx, param_debug) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
219 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
220
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
221 if(toolame_init_params(ctx->toolame_ctx) != 0)
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
222 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
223
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
224 ctx->bitrate = param_bitrate;
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
225 encoder->params.bitrate = ctx->bitrate;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
226 encoder->params.samples_per_frame = 1152;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
227 encoder->priv = ctx;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
228 encoder->decode_buffer_size = 1152 * 2 * encoder->params.channels;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
229
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
230 encoder->bind = bind_toolame;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
231 encoder->get_frame_size = get_frame_size;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
232 encoder->encode = encode_toolame;
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
233 encoder->close = close_toolame;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 22601
diff changeset
234
15234
e84a6ae9d51e audio encoding reworked
nicodvb
parents: 14550
diff changeset
235 return 1;
13425
a87f1a948a24 encoding to mp2 with libtoolame - only cbr atm
nicodvb
parents:
diff changeset
236 }