Support for shine 3.0.0
authorRomain Beauxis <toots@rastageeks.org>
Sun, 21 Jul 2013 20:40:08 +0000 (15:40 -0500)
committerPaul B Mahol <onemda@gmail.com>
Tue, 30 Jul 2013 21:12:34 +0000 (21:12 +0000)
configure
libavcodec/libshine.c

index a341d87..e215a2a 100755 (executable)
--- a/configure
+++ b/configure
@@ -4169,7 +4169,7 @@ enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h p
 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
-enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_frame
+enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
 enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex
 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
index 521ac17..cf8b1bb 100644 (file)
@@ -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)