src/audio/SDL_mixer.c
changeset 2013 0615fa58c0be
parent 1985 8055185ae4ed
child 2014 7abe37467fa5
equal deleted inserted replaced
2012:575d5c9d4db8 2013:0615fa58c0be
   259 
   259 
   260     case AUDIO_S32LSB:
   260     case AUDIO_S32LSB:
   261         {
   261         {
   262             const Uint32 *src32 = (Uint32 *) src;
   262             const Uint32 *src32 = (Uint32 *) src;
   263             Uint32 *dst32 = (Uint32 *) dst;
   263             Uint32 *dst32 = (Uint32 *) dst;
   264             Sint32 src1, src2;
   264             Sint64 src1, src2;
   265             Sint64 dst_sample;
   265             Sint64 dst_sample;
   266             const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
   266             const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
   267             const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
   267             const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
   268 
   268 
   269             len /= 4;
   269             len /= 4;
   270             while (len--) {
   270             while (len--) {
   271                 src1 = (Sint32) SDL_SwapLE32(*src32);
   271                 src1 = (Sint64) ((Sint32) SDL_SwapLE32(*src32));
   272                 src32++;
   272                 src32++;
   273                 ADJUST_VOLUME(src1, volume);
   273                 ADJUST_VOLUME(src1, volume);
   274                 src2 = (Sint32) SDL_SwapLE32(*dst32);
   274                 src2 = (Sint64) ((Sint32) SDL_SwapLE32(*dst32));
   275                 dst_sample = src1 + src2;
   275                 dst_sample = src1 + src2;
   276                 if (dst_sample > max_audioval) {
   276                 if (dst_sample > max_audioval) {
   277                     dst_sample = max_audioval;
   277                     dst_sample = max_audioval;
   278                 } else if (dst_sample < min_audioval) {
   278                 } else if (dst_sample < min_audioval) {
   279                     dst_sample = min_audioval;
   279                     dst_sample = min_audioval;
   285 
   285 
   286     case AUDIO_S32MSB:
   286     case AUDIO_S32MSB:
   287         {
   287         {
   288             const Uint32 *src32 = (Uint32 *) src;
   288             const Uint32 *src32 = (Uint32 *) src;
   289             Uint32 *dst32 = (Uint32 *) dst;
   289             Uint32 *dst32 = (Uint32 *) dst;
   290             Sint32 src1, src2;
   290             Sint64 src1, src2;
   291             Sint64 dst_sample;
   291             Sint64 dst_sample;
   292             const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
   292             const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
   293             const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
   293             const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
   294 
   294 
   295             len /= 4;
   295             len /= 4;
   296             while (len--) {
   296             while (len--) {
   297                 src1 = (Sint32) SDL_SwapBE32(*src32);
   297                 src1 = (Sint64) ((Sint32) SDL_SwapBE32(*src32));
   298                 src32++;
   298                 src32++;
   299                 ADJUST_VOLUME(src1, volume);
   299                 ADJUST_VOLUME(src1, volume);
   300                 src2 = (Sint32) SDL_SwapBE32(*dst32);
   300                 src2 = (Sint64) ((Sint32) SDL_SwapBE32(*dst32));
   301                 dst_sample = src1 + src2;
   301                 dst_sample = src1 + src2;
   302                 if (dst_sample > max_audioval) {
   302                 if (dst_sample > max_audioval) {
   303                     dst_sample = max_audioval;
   303                     dst_sample = max_audioval;
   304                 } else if (dst_sample < min_audioval) {
   304                 } else if (dst_sample < min_audioval) {
   305                     dst_sample = min_audioval;
   305                     dst_sample = min_audioval;