[FFmpeg-cvslog] x86: lavr: fix stack allocation for 7 and 8 channel downmixing on x86-32

Ronald S. Bultje git at videolan.org
Sun Nov 18 13:39:56 CET 2012


ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Mon Oct 29 16:18:04 2012 -0400| [7a9e65aceee678ee2677480579cb3b2208474140] | committer: Justin Ruggles

x86: lavr: fix stack allocation for 7 and 8 channel downmixing on x86-32

Fixes crashes on Win32 and stack overruns on x86-32 in general.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7a9e65aceee678ee2677480579cb3b2208474140
---

 libavresample/x86/audio_mix.asm |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/libavresample/x86/audio_mix.asm b/libavresample/x86/audio_mix.asm
index 47c23e4..daf0a7b 100644
--- a/libavresample/x86/audio_mix.asm
+++ b/libavresample/x86/audio_mix.asm
@@ -272,7 +272,15 @@ cglobal mix_%1_to_%2_%3_flt, 3,in_channels+2,needed_mmregs+matrix_elements_mm, s
     and           rsp, ~(mmsize-1)
     sub           rsp, matrix_elements_stack * mmsize
     %else
-    %assign pad matrix_elements_stack * mmsize + (mmsize - gprsize) - (stack_offset & (mmsize - gprsize))
+    %assign matrix_stack_size matrix_elements_stack * mmsize
+    %assign pad matrix_stack_size + (mmsize - gprsize) - (stack_offset & (mmsize - gprsize))
+    ; on x86-32 for 7 and 8 channels we need more stack space for src pointers
+    %if ARCH_X86_32 && in_channels >= 7
+    %assign pad pad + 0x10
+    %define src5m [rsp+matrix_stack_size+0]
+    %define src6m [rsp+matrix_stack_size+4]
+    %define src7m [rsp+matrix_stack_size+8]
+    %endif
     SUB           rsp, pad
     %endif
 %endif



More information about the ffmpeg-cvslog mailing list