src/audio/SDL_audiotypecvt.c
changeset 2011 b2b7154ce016
parent 1985 8055185ae4ed
child 2859 99210400e8b9
equal deleted inserted replaced
2010:39897da56f63 2011:b2b7154ce016
    26 #include "SDL_audio_c.h"
    26 #include "SDL_audio_c.h"
    27 
    27 
    28 /* *INDENT-OFF* */
    28 /* *INDENT-OFF* */
    29 
    29 
    30 #define DIVBY127 0.0078740157480315f
    30 #define DIVBY127 0.0078740157480315f
    31 #define DIVBY255 0.00392156862745098f
       
    32 #define DIVBY32767 3.05185094759972e-05f
    31 #define DIVBY32767 3.05185094759972e-05f
    33 #define DIVBY65535 1.52590218966964e-05f
       
    34 #define DIVBY2147483647 4.6566128752458e-10f
    32 #define DIVBY2147483647 4.6566128752458e-10f
    35 
    33 
    36 static void SDLCALL
    34 static void SDLCALL
    37 SDL_Convert_U8_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
    35 SDL_Convert_U8_to_S8(SDL_AudioCVT * cvt, SDL_AudioFormat format)
    38 {
    36 {
   219 #endif
   217 #endif
   220 
   218 
   221     src = (const Uint8 *) (cvt->buf + cvt->len_cvt);
   219     src = (const Uint8 *) (cvt->buf + cvt->len_cvt);
   222     dst = (float *) (cvt->buf + cvt->len_cvt * 4);
   220     dst = (float *) (cvt->buf + cvt->len_cvt * 4);
   223     for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
   221     for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
   224         const float val = (((float) *src) * DIVBY255);
   222         const float val = ((((float) *src) * DIVBY127) - 1.0f);
   225         *dst = SDL_SwapFloatLE(val);
   223         *dst = SDL_SwapFloatLE(val);
   226     }
   224     }
   227 
   225 
   228     cvt->len_cvt *= 4;
   226     cvt->len_cvt *= 4;
   229     format = AUDIO_F32LSB;
   227     format = AUDIO_F32LSB;
   244 #endif
   242 #endif
   245 
   243 
   246     src = (const Uint8 *) (cvt->buf + cvt->len_cvt);
   244     src = (const Uint8 *) (cvt->buf + cvt->len_cvt);
   247     dst = (float *) (cvt->buf + cvt->len_cvt * 4);
   245     dst = (float *) (cvt->buf + cvt->len_cvt * 4);
   248     for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
   246     for (i = cvt->len_cvt / sizeof (Uint8); i; --i, --src, --dst) {
   249         const float val = (((float) *src) * DIVBY255);
   247         const float val = ((((float) *src) * DIVBY127) - 1.0f);
   250         *dst = SDL_SwapFloatBE(val);
   248         *dst = SDL_SwapFloatBE(val);
   251     }
   249     }
   252 
   250 
   253     cvt->len_cvt *= 4;
   251     cvt->len_cvt *= 4;
   254     format = AUDIO_F32MSB;
   252     format = AUDIO_F32MSB;
   665 #endif
   663 #endif
   666 
   664 
   667     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
   665     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
   668     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
   666     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
   669     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
   667     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
   670         const float val = (((float) SDL_SwapLE16(*src)) * DIVBY65535);
   668         const float val = ((((float) SDL_SwapLE16(*src)) * DIVBY32767) - 1.0f);
   671         *dst = SDL_SwapFloatLE(val);
   669         *dst = SDL_SwapFloatLE(val);
   672     }
   670     }
   673 
   671 
   674     cvt->len_cvt *= 2;
   672     cvt->len_cvt *= 2;
   675     format = AUDIO_F32LSB;
   673     format = AUDIO_F32LSB;
   690 #endif
   688 #endif
   691 
   689 
   692     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
   690     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
   693     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
   691     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
   694     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
   692     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
   695         const float val = (((float) SDL_SwapLE16(*src)) * DIVBY65535);
   693         const float val = ((((float) SDL_SwapLE16(*src)) * DIVBY32767) - 1.0f);
   696         *dst = SDL_SwapFloatBE(val);
   694         *dst = SDL_SwapFloatBE(val);
   697     }
   695     }
   698 
   696 
   699     cvt->len_cvt *= 2;
   697     cvt->len_cvt *= 2;
   700     format = AUDIO_F32MSB;
   698     format = AUDIO_F32MSB;
  1109 #endif
  1107 #endif
  1110 
  1108 
  1111     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
  1109     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
  1112     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
  1110     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
  1113     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
  1111     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
  1114         const float val = (((float) SDL_SwapBE16(*src)) * DIVBY65535);
  1112         const float val = ((((float) SDL_SwapBE16(*src)) * DIVBY32767) - 1.0f);
  1115         *dst = SDL_SwapFloatLE(val);
  1113         *dst = SDL_SwapFloatLE(val);
  1116     }
  1114     }
  1117 
  1115 
  1118     cvt->len_cvt *= 2;
  1116     cvt->len_cvt *= 2;
  1119     format = AUDIO_F32LSB;
  1117     format = AUDIO_F32LSB;
  1134 #endif
  1132 #endif
  1135 
  1133 
  1136     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
  1134     src = (const Uint16 *) (cvt->buf + cvt->len_cvt);
  1137     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
  1135     dst = (float *) (cvt->buf + cvt->len_cvt * 2);
  1138     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
  1136     for (i = cvt->len_cvt / sizeof (Uint16); i; --i, --src, --dst) {
  1139         const float val = (((float) SDL_SwapBE16(*src)) * DIVBY65535);
  1137         const float val = ((((float) SDL_SwapBE16(*src)) * DIVBY32767) - 1.0f);
  1140         *dst = SDL_SwapFloatBE(val);
  1138         *dst = SDL_SwapFloatBE(val);
  1141     }
  1139     }
  1142 
  1140 
  1143     cvt->len_cvt *= 2;
  1141     cvt->len_cvt *= 2;
  1144     format = AUDIO_F32MSB;
  1142     format = AUDIO_F32MSB;
  1825 #endif
  1823 #endif
  1826 
  1824 
  1827     src = (const float *) cvt->buf;
  1825     src = (const float *) cvt->buf;
  1828     dst = (Uint8 *) cvt->buf;
  1826     dst = (Uint8 *) cvt->buf;
  1829     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  1827     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  1830         const Uint8 val = ((Uint8) (SDL_SwapFloatLE(*src) * 255.0f));
  1828         const Uint8 val = ((Uint8) ((SDL_SwapFloatLE(*src) + 1.0f) * 127.0f));
  1831         *dst = val;
  1829         *dst = val;
  1832     }
  1830     }
  1833 
  1831 
  1834     cvt->len_cvt /= 4;
  1832     cvt->len_cvt /= 4;
  1835     format = AUDIO_U8;
  1833     format = AUDIO_U8;
  1875 #endif
  1873 #endif
  1876 
  1874 
  1877     src = (const float *) cvt->buf;
  1875     src = (const float *) cvt->buf;
  1878     dst = (Uint16 *) cvt->buf;
  1876     dst = (Uint16 *) cvt->buf;
  1879     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  1877     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  1880         const Uint16 val = ((Uint16) (SDL_SwapFloatLE(*src) * 65535.0f));
  1878         const Uint16 val = ((Uint16) ((SDL_SwapFloatLE(*src) + 1.0f) * 32767.0f));
  1881         *dst = SDL_SwapLE16(val);
  1879         *dst = SDL_SwapLE16(val);
  1882     }
  1880     }
  1883 
  1881 
  1884     cvt->len_cvt /= 2;
  1882     cvt->len_cvt /= 2;
  1885     format = AUDIO_U16LSB;
  1883     format = AUDIO_U16LSB;
  1925 #endif
  1923 #endif
  1926 
  1924 
  1927     src = (const float *) cvt->buf;
  1925     src = (const float *) cvt->buf;
  1928     dst = (Uint16 *) cvt->buf;
  1926     dst = (Uint16 *) cvt->buf;
  1929     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  1927     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  1930         const Uint16 val = ((Uint16) (SDL_SwapFloatLE(*src) * 65535.0f));
  1928         const Uint16 val = ((Uint16) ((SDL_SwapFloatLE(*src) + 1.0f) * 32767.0f));
  1931         *dst = SDL_SwapBE16(val);
  1929         *dst = SDL_SwapBE16(val);
  1932     }
  1930     }
  1933 
  1931 
  1934     cvt->len_cvt /= 2;
  1932     cvt->len_cvt /= 2;
  1935     format = AUDIO_U16MSB;
  1933     format = AUDIO_U16MSB;
  2047 #endif
  2045 #endif
  2048 
  2046 
  2049     src = (const float *) cvt->buf;
  2047     src = (const float *) cvt->buf;
  2050     dst = (Uint8 *) cvt->buf;
  2048     dst = (Uint8 *) cvt->buf;
  2051     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  2049     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  2052         const Uint8 val = ((Uint8) (SDL_SwapFloatBE(*src) * 255.0f));
  2050         const Uint8 val = ((Uint8) ((SDL_SwapFloatBE(*src) + 1.0f) * 127.0f));
  2053         *dst = val;
  2051         *dst = val;
  2054     }
  2052     }
  2055 
  2053 
  2056     cvt->len_cvt /= 4;
  2054     cvt->len_cvt /= 4;
  2057     format = AUDIO_U8;
  2055     format = AUDIO_U8;
  2097 #endif
  2095 #endif
  2098 
  2096 
  2099     src = (const float *) cvt->buf;
  2097     src = (const float *) cvt->buf;
  2100     dst = (Uint16 *) cvt->buf;
  2098     dst = (Uint16 *) cvt->buf;
  2101     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  2099     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  2102         const Uint16 val = ((Uint16) (SDL_SwapFloatBE(*src) * 65535.0f));
  2100         const Uint16 val = ((Uint16) ((SDL_SwapFloatBE(*src) + 1.0f) * 32767.0f));
  2103         *dst = SDL_SwapLE16(val);
  2101         *dst = SDL_SwapLE16(val);
  2104     }
  2102     }
  2105 
  2103 
  2106     cvt->len_cvt /= 2;
  2104     cvt->len_cvt /= 2;
  2107     format = AUDIO_U16LSB;
  2105     format = AUDIO_U16LSB;
  2147 #endif
  2145 #endif
  2148 
  2146 
  2149     src = (const float *) cvt->buf;
  2147     src = (const float *) cvt->buf;
  2150     dst = (Uint16 *) cvt->buf;
  2148     dst = (Uint16 *) cvt->buf;
  2151     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  2149     for (i = cvt->len_cvt / sizeof (float); i; --i, ++src, ++dst) {
  2152         const Uint16 val = ((Uint16) (SDL_SwapFloatBE(*src) * 65535.0f));
  2150         const Uint16 val = ((Uint16) ((SDL_SwapFloatBE(*src) + 1.0f) * 32767.0f));
  2153         *dst = SDL_SwapBE16(val);
  2151         *dst = SDL_SwapBE16(val);
  2154     }
  2152     }
  2155 
  2153 
  2156     cvt->len_cvt /= 2;
  2154     cvt->len_cvt /= 2;
  2157     format = AUDIO_U16MSB;
  2155     format = AUDIO_U16MSB;