Fixed S32 audio mixing, but I'm a bit nervous about the use of 64-bit
datatypes here... --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%402060
This commit is contained in:
parent
648d2a839d
commit
b046008cbd
1 changed files with 6 additions and 6 deletions
|
@ -261,17 +261,17 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
|
||||||
{
|
{
|
||||||
const Uint32 *src32 = (Uint32 *) src;
|
const Uint32 *src32 = (Uint32 *) src;
|
||||||
Uint32 *dst32 = (Uint32 *) dst;
|
Uint32 *dst32 = (Uint32 *) dst;
|
||||||
Sint32 src1, src2;
|
Sint64 src1, src2;
|
||||||
Sint64 dst_sample;
|
Sint64 dst_sample;
|
||||||
const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
|
const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
|
||||||
const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
|
const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
|
||||||
|
|
||||||
len /= 4;
|
len /= 4;
|
||||||
while (len--) {
|
while (len--) {
|
||||||
src1 = (Sint32) SDL_SwapLE32(*src32);
|
src1 = (Sint64) ((Sint32) SDL_SwapLE32(*src32));
|
||||||
src32++;
|
src32++;
|
||||||
ADJUST_VOLUME(src1, volume);
|
ADJUST_VOLUME(src1, volume);
|
||||||
src2 = (Sint32) SDL_SwapLE32(*dst32);
|
src2 = (Sint64) ((Sint32) SDL_SwapLE32(*dst32));
|
||||||
dst_sample = src1 + src2;
|
dst_sample = src1 + src2;
|
||||||
if (dst_sample > max_audioval) {
|
if (dst_sample > max_audioval) {
|
||||||
dst_sample = max_audioval;
|
dst_sample = max_audioval;
|
||||||
|
@ -287,17 +287,17 @@ SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
|
||||||
{
|
{
|
||||||
const Uint32 *src32 = (Uint32 *) src;
|
const Uint32 *src32 = (Uint32 *) src;
|
||||||
Uint32 *dst32 = (Uint32 *) dst;
|
Uint32 *dst32 = (Uint32 *) dst;
|
||||||
Sint32 src1, src2;
|
Sint64 src1, src2;
|
||||||
Sint64 dst_sample;
|
Sint64 dst_sample;
|
||||||
const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
|
const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
|
||||||
const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
|
const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
|
||||||
|
|
||||||
len /= 4;
|
len /= 4;
|
||||||
while (len--) {
|
while (len--) {
|
||||||
src1 = (Sint32) SDL_SwapBE32(*src32);
|
src1 = (Sint64) ((Sint32) SDL_SwapBE32(*src32));
|
||||||
src32++;
|
src32++;
|
||||||
ADJUST_VOLUME(src1, volume);
|
ADJUST_VOLUME(src1, volume);
|
||||||
src2 = (Sint32) SDL_SwapBE32(*dst32);
|
src2 = (Sint64) ((Sint32) SDL_SwapBE32(*dst32));
|
||||||
dst_sample = src1 + src2;
|
dst_sample = src1 + src2;
|
||||||
if (dst_sample > max_audioval) {
|
if (dst_sample > max_audioval) {
|
||||||
dst_sample = max_audioval;
|
dst_sample = max_audioval;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue