diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c
index 73598cd517bacec3e4a147e15d7126667e3a574d..7c849a7ae6ae693ef9fbafcac6b25c512c78d8b7 100644
--- a/libavcodec/vorbis_enc.c
+++ b/libavcodec/vorbis_enc.c
@@ -847,7 +847,7 @@ static int window(venc_context_t * venc, signed short * audio, int samples) {
             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. * win[window_len - i] / n;
+                offset[i] = audio[j] / 32768. / n * win[window_len - i - 1];
         }
     } else {
         for (channel = 0; channel < venc->channels; channel++) {
@@ -864,7 +864,7 @@ static int window(venc_context_t * venc, signed short * audio, int samples) {
             float * offset = venc->saved + channel*window_len;
             j = channel;
             for (i = 0; i < samples; i++, j += venc->channels)
-                offset[i] = audio[j] / 32768. * win[i] / n;
+                offset[i] = audio[j] / 32768. / n * win[i];
         }
         venc->have_saved = 1;
     } else {