From 233783e2c12a224035f49562e4cba3ebd8aa7651 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Mon, 20 Aug 2012 13:25:27 -0400 Subject: vorbisenc: use float planar sample format --- libavcodec/vorbisenc.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'libavcodec/vorbisenc.c') diff --git a/libavcodec/vorbisenc.c b/libavcodec/vorbisenc.c index b0e0e68c2f..42713f98cc 100644 --- a/libavcodec/vorbisenc.c +++ b/libavcodec/vorbisenc.c @@ -963,10 +963,10 @@ static int residue_encode(vorbis_enc_context *venc, vorbis_enc_residue *rc, return 0; } -static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *audio, - int samples) +static int apply_window_and_mdct(vorbis_enc_context *venc, + float **audio, int samples) { - int i, j, channel; + int i, channel; const float * win = venc->win[0]; int window_len = 1 << (venc->log2_blocksize[0] - 1); float n = (float)(1 << venc->log2_blocksize[0]) / 4.; @@ -988,9 +988,8 @@ static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *a if (samples) { for (channel = 0; channel < venc->channels; channel++) { float * offset = venc->samples + channel*window_len*2 + window_len; - j = channel; - for (i = 0; i < samples; i++, j += venc->channels) - offset[i] = audio[j] / 32768. / n * win[window_len - i - 1]; + for (i = 0; i < samples; i++) + offset[i] = audio[channel][i] / n * win[window_len - i - 1]; } } else { for (channel = 0; channel < venc->channels; channel++) @@ -1005,9 +1004,8 @@ static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *a if (samples) { for (channel = 0; channel < venc->channels; channel++) { float *offset = venc->saved + channel * window_len; - j = channel; - for (i = 0; i < samples; i++, j += venc->channels) - offset[i] = audio[j] / 32768. / n * win[i]; + for (i = 0; i < samples; i++) + offset[i] = audio[channel][i] / n * win[i]; } venc->have_saved = 1; } else { @@ -1021,7 +1019,7 @@ static int vorbis_encode_frame(AVCodecContext *avccontext, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) { vorbis_enc_context *venc = avccontext->priv_data; - const int16_t *audio = frame ? (const int16_t *)frame->data[0] : NULL; + float **audio = frame ? (float **)frame->extended_data : NULL; int samples = frame ? frame->nb_samples : 0; vorbis_enc_mode *mode; vorbis_enc_mapping *mapping; @@ -1216,7 +1214,7 @@ AVCodec ff_vorbis_encoder = { .encode2 = vorbis_encode_frame, .close = vorbis_encode_close, .capabilities = CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL, - .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, + .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE }, .long_name = NULL_IF_CONFIG_SMALL("Vorbis"), }; -- cgit v1.2.3