Mercurial > sdl-ios-xcode
view src/hermes/mmx_main.asm @ 3880:74e828c64315 SDL-1.2
Fixed bug #292
I might be on crack here.
It looks like SDL_ConvertMono() in src/audio/SDL_audiocvt.c adds the left and
right channels of a stereo stream together, and clamps the new mono channel if
it would overflow.
Shouldn't it be dividing by 2 to average the two sample points instead of
clamping? Otherwise the mono sample point's volume doubles in the conversion.
This would also make the conversion faster, as it replaces two branches per
sample frame with a bitwise shift.
--ryan.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 24 Sep 2006 15:45:37 +0000 |
parents | eb4d9d99849b |
children | 180fa05e98e2 |
line wrap: on
line source
; ; mmx format converter main loops for HERMES ; Some routines Copyright (c) 1998 Christian Nentwich (c.nentwich@cs.ucl.ac.uk) ; This source code is licensed under the GNU LGPL ; ; Please refer to the file COPYING.LIB contained in the distribution for ; licensing conditions ; BITS 32 %include "common.inc" SDL_FUNC _ConvertMMX SDL_FUNC _mmxreturn SECTION .text ;; _ConvertMMX: ;; [ESP+8] ConverterInfo* ;; -------------------------------------------------------------------------- ;; ConverterInfo (ebp+..) ;; 0: void *s_pixels ;; 4: int s_width ;; 8: int s_height ;; 12: int s_add ;; 16: void *d_pixels ;; 20: int d_width ;; 24: int d_height ;; 28: int d_add ;; 32: void (*converter_function)() ;; 36: int32 *lookup _ConvertMMX: push ebp mov ebp,esp ; Save the registers used by the blitters, necessary for optimized code pusha mov eax,[ebp+8] cmp dword [eax+4],BYTE 0 je endconvert mov ebp,eax mov esi,[ebp+0] mov edi,[ebp+16] y_loop: mov ecx,[ebp+4] jmp [ebp+32] _mmxreturn: add esi,[ebp+12] add edi,[ebp+28] dec dword [ebp+8] jnz y_loop ; Restore the registers used by the blitters, necessary for optimized code popa pop ebp endconvert: emms ret %ifidn __OUTPUT_FORMAT__,elf section .note.GNU-stack noalloc noexec nowrite progbits %endif