84 #include <speex/speex.h>
85 #include <speex/speex_header.h>
86 #include <speex/speex_stereo.h>
113 const char *mode_str =
"unknown";
117 case SPEEX_MODEID_NB: mode_str =
"narrowband";
break;
118 case SPEEX_MODEID_WB: mode_str =
"wideband";
break;
119 case SPEEX_MODEID_UWB: mode_str =
"ultra-wideband";
break;
147 const SpeexMode *mode;
155 "mono are supported\n", avctx->
channels);
161 case 8000: mode = &speex_nb_mode;
break;
162 case 16000: mode = &speex_wb_mode;
break;
163 case 32000: mode = &speex_uwb_mode;
break;
166 "Resample to 8, 16, or 32 kHz.\n", avctx->
sample_rate);
192 speex_encoder_ctl(s->
enc_state, SPEEX_SET_ABR,
194 speex_encoder_ctl(s->
enc_state, SPEEX_GET_ABR,
197 speex_encoder_ctl(s->
enc_state, SPEEX_SET_BITRATE,
199 speex_encoder_ctl(s->
enc_state, SPEEX_GET_BITRATE,
204 speex_encoder_ctl(s->
enc_state, SPEEX_SET_QUALITY,
206 speex_encoder_ctl(s->
enc_state, SPEEX_GET_BITRATE,
216 speex_encoder_ctl(s->
enc_state, SPEEX_SET_VAD, &s->
vad);
220 speex_encoder_ctl(s->
enc_state, SPEEX_SET_DTX, &s->
dtx);
228 speex_encoder_ctl(s->
enc_state, SPEEX_SET_COMPLEXITY, &complexity);
230 speex_encoder_ctl(s->
enc_state, SPEEX_GET_COMPLEXITY, &complexity);
238 speex_encoder_ctl(s->
enc_state, SPEEX_GET_LOOKAHEAD, &avctx->
delay);
244 header_data = speex_header_to_packet(&s->
header, &header_size);
249 speex_header_free(header_data);
256 memcpy(avctx->
extradata, header_data, header_size);
258 speex_header_free(header_data);
261 speex_bits_init(&s->
bits);
268 const AVFrame *frame,
int *got_packet_ptr)
277 speex_encode_stereo_int(samples, s->
header.frame_size, &s->
bits);
288 speex_bits_pack(&s->
bits, 15, 5);
300 ret = speex_bits_write(&s->
bits, avpkt->
data, avpkt->
size);
301 speex_bits_reset(&s->
bits);
318 speex_bits_destroy(&s->
bits);
327 #define OFFSET(x) offsetof(LibSpeexEncContext, x)
328 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
331 {
"cbr_quality",
"Set quality value (0 to 10) for CBR",
OFFSET(cbr_quality),
AV_OPT_TYPE_INT, { .i64 = 8 }, 0, 10,
AE },
332 {
"frames_per_packet",
"Number of frames to encode in each packet",
OFFSET(frames_per_packet),
AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 8,
AE },
347 {
"compression_level",
"3" },
366 .supported_samplerates = (
const int[]){ 8000, 16000, 32000, 0 },
367 .priv_class = &
class,