|
|
|
@ -50,17 +50,17 @@ static av_cold int libshine_encode_init(AVCodecContext *avctx) |
|
|
|
|
shine_set_config_mpeg_defaults(&s->config.mpeg); |
|
|
|
|
if (avctx->bit_rate) |
|
|
|
|
s->config.mpeg.bitr = avctx->bit_rate / 1000; |
|
|
|
|
if (shine_find_bitrate_index(s->config.mpeg.bitr) < 0) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "invalid bitrate\n"); |
|
|
|
|
return AVERROR(EINVAL); |
|
|
|
|
} |
|
|
|
|
s->config.mpeg.mode = avctx->channels == 2 ? STEREO : MONO; |
|
|
|
|
s->config.wave.samplerate = avctx->sample_rate; |
|
|
|
|
s->config.wave.channels = avctx->channels == 2 ? PCM_STEREO : PCM_MONO; |
|
|
|
|
if (shine_check_config(s->config.wave.samplerate, s->config.mpeg.bitr) < 0) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "invalid configuration\n"); |
|
|
|
|
return AVERROR(EINVAL); |
|
|
|
|
} |
|
|
|
|
s->shine = shine_initialise(&s->config); |
|
|
|
|
if (!s->shine) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
avctx->frame_size = samp_per_frame; |
|
|
|
|
avctx->frame_size = shine_samples_per_pass(s->shine); |
|
|
|
|
ff_af_queue_init(avctx, &s->afq); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
@ -75,7 +75,7 @@ static int libshine_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, |
|
|
|
|
int ret, len; |
|
|
|
|
|
|
|
|
|
if (frame) |
|
|
|
|
data = shine_encode_frame(s->shine, frame->data[0], &written); |
|
|
|
|
data = shine_encode_buffer(s->shine, (int16_t **)frame->data, &written); |
|
|
|
|
else |
|
|
|
|
data = shine_flush(s->shine, &written); |
|
|
|
|
if (written < 0) |
|
|
|
|