Skip to content

Commit

Permalink
Fixes from Bugzilla #110.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Jun 23, 2006
1 parent 6170c13 commit b3bd4c9
Showing 1 changed file with 37 additions and 24 deletions.
61 changes: 37 additions & 24 deletions effect_position.c
Expand Up @@ -622,9 +622,9 @@ static void _Eff_position_u16lsb_c4(int chan, void *stream, int len, void *udata
* args->distance_f) + 32768);
Uint16 swapr = (Uint16) ((Sint16) (((float) sampr * args->right_f)
* args->distance_f) + 32768);
Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_f)
Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_rear_f)
* args->distance_f) + 32768);
Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_f)
Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_rear_f)
* args->distance_f) + 32768);

switch (args->room_angle) {
Expand Down Expand Up @@ -668,18 +668,18 @@ static void _Eff_position_u16lsb_c6(int chan, void *stream, int len, void *udata
Sint16 samprr = (Sint16) (SDL_SwapLE16(*(ptr+3)) - 32768);
Sint16 sampce = (Sint16) (SDL_SwapLE16(*(ptr+4)) - 32768);
Sint16 sampwf = (Sint16) (SDL_SwapLE16(*(ptr+5)) - 32768);

Uint16 swapl = (Uint16) ((Sint16) (((float) sampl * args->left_f)
* args->distance_f) + 32768);
Uint16 swapr = (Uint16) ((Sint16) (((float) sampr * args->right_f)
* args->distance_f) + 32768);
Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_f)
Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_rear_f)
* args->distance_f) + 32768);
Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_f)
Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_rear_f)
* args->distance_f) + 32768);
Uint16 swapce = (Uint16) ((Sint16) (((float) sampce * args->left_f)
Uint16 swapce = (Uint16) ((Sint16) (((float) sampce * args->center_f)
* args->distance_f) + 32768);
Uint16 swapwf = (Uint16) ((Sint16) (((float) sampwf * args->right_f)
Uint16 swapwf = (Uint16) ((Sint16) (((float) sampwf * args->lfe_f)
* args->distance_f) + 32768);

switch (args->room_angle) {
Expand Down Expand Up @@ -1417,12 +1417,16 @@ int Mix_SetPanning(int channel, Uint8 left, Uint8 right)
return(1);

if (channels > 2) {
/* left = right = 255 => angle = 0, to unregister effect as when channels = 2 */
/* left = 255 => angle = -90; left = 0 => angle = +89 */
int angle = (int)left;
angle = 127 - angle;
angle = -angle;
angle = angle * 90 / 128; /* Make it larger for more effect? */
return( Mix_SetPosition(channel, angle, 0) );
int angle = 0;
if ((left != 255) || (right != 255)) {
angle = (int)left;
angle = 127 - angle;
angle = -angle;
angle = angle * 90 / 128; /* Make it larger for more effect? */
}
return( Mix_SetPosition(channel, angle, 0) );
}

f = get_position_effect_func(format, channels);
Expand All @@ -1434,10 +1438,12 @@ int Mix_SetPanning(int channel, Uint8 left, Uint8 right)
return(0);

/* it's a no-op; unregister the effect, if it's registered. */
if ((args->distance_u8 == 255) && (left == 255) &&
(right == 255) && (args->in_use))
{
return(Mix_UnregisterEffect(channel, f));
if ((args->distance_u8 == 255) && (left == 255) && (right == 255)) {
if (args->in_use) {
return(Mix_UnregisterEffect(channel, f));
} else {
return(1);
}
}

args->left_u8 = left;
Expand Down Expand Up @@ -1474,10 +1480,12 @@ int Mix_SetDistance(int channel, Uint8 distance)
distance = 255 - distance; /* flip it to our scale. */

/* it's a no-op; unregister the effect, if it's registered. */
if ((distance == 255) && (args->left_u8 == 255) &&
(args->right_u8 == 255) && (args->in_use))
{
return(Mix_UnregisterEffect(channel, f));
if ((distance == 255) && (args->left_u8 == 255) && (args->right_u8 == 255)) {
if (args->in_use) {
return(Mix_UnregisterEffect(channel, f));
} else {
return(1);
}
}

args->distance_u8 = distance;
Expand Down Expand Up @@ -1513,8 +1521,13 @@ int Mix_SetPosition(int channel, Sint16 angle, Uint8 distance)
return(0);

/* it's a no-op; unregister the effect, if it's registered. */
if ((!distance) && (!angle) && (args->in_use))
return(Mix_UnregisterEffect(channel, f));
if ((!distance) && (!angle)) {
if (args->in_use) {
return(Mix_UnregisterEffect(channel, f));
} else {
return(1);
}
}

if (channels == 2)
{
Expand Down Expand Up @@ -1547,8 +1560,8 @@ int Mix_SetPosition(int channel, Sint16 angle, Uint8 distance)
args->right_rear_f = ((float) speaker_amplitude[3]) / 255.0f;
args->center_u8 = speaker_amplitude[4];
args->center_f = ((float) speaker_amplitude[4]) / 255.0f;
args->lfe_u8 = 255;
args->lfe_f = 255.0f;
args->lfe_u8 = speaker_amplitude[5];
args->lfe_f = ((float) speaker_amplitude[5]) / 255.0f;
args->distance_u8 = distance;
args->distance_f = ((float) distance) / 255.0f;
args->room_angle = room_angle;
Expand Down

0 comments on commit b3bd4c9

Please sign in to comment.