src/audio/SDL_audio_c.h
author Ryan C. Gordon
Sat, 05 Nov 2016 02:34:38 -0400
changeset 10575 bb99dede0675
parent 10239 04cda108b406
child 10737 3406a0f8b041
permissions -rw-r--r--
Reworked audio converter code.

This no longer uses a script to generate code for every possible type
conversion or resampler. This caused a bloat in binary size and and compile
times. Now we use a handful of more generic functions and assume staying in
the CPU cache is the most important thing anyhow.

This shrinks the size of the final build (in this case: macOS X amd64, -Os to
optimize for size) by 15%. When compiling on a single core, build times drop
by about 15% too (although the previous cost was largely hidden by multicore
builds).
slouken@0
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@9998
     3
  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
slouken@0
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@0
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@0
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@0
    20
*/
icculus@8093
    21
#include "../SDL_internal.h"
slouken@0
    22
icculus@10575
    23
#ifndef DEBUG_CONVERT
icculus@10575
    24
#define DEBUG_CONVERT 0
icculus@10575
    25
#endif
icculus@10575
    26
icculus@10575
    27
#if DEBUG_CONVERT
icculus@10575
    28
#define LOG_DEBUG_CONVERT(from, to) fprintf(stderr, "Converting %s to %s.\n", from, to);
icculus@10575
    29
#else
icculus@10575
    30
#define LOG_DEBUG_CONVERT(from, to)
icculus@10575
    31
#endif
icculus@10575
    32
slouken@0
    33
/* Functions and variables exported from SDL_audio.c for SDL_sysaudio.c */
slouken@0
    34
slouken@0
    35
/* Functions to get a list of "close" audio formats */
icculus@1982
    36
extern SDL_AudioFormat SDL_FirstAudioFormat(SDL_AudioFormat format);
icculus@1982
    37
extern SDL_AudioFormat SDL_NextAudioFormat(void);
slouken@0
    38
slouken@0
    39
/* Function to calculate the size and silence for a SDL_AudioSpec */
slouken@1895
    40
extern void SDL_CalculateAudioSpec(SDL_AudioSpec * spec);
slouken@0
    41
icculus@10575
    42
void SDLCALL SDL_Convert_S8_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    43
void SDLCALL SDL_Convert_U8_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    44
void SDLCALL SDL_Convert_S16_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    45
void SDLCALL SDL_Convert_U16_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    46
void SDLCALL SDL_Convert_S32_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    47
void SDLCALL SDL_Convert_F32_to_S8(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    48
void SDLCALL SDL_Convert_F32_to_U8(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    49
void SDLCALL SDL_Convert_F32_to_S16(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    50
void SDLCALL SDL_Convert_F32_to_U16(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    51
void SDLCALL SDL_Convert_F32_to_S32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    52
void SDL_Upsample_Arbitrary(SDL_AudioCVT *cvt, const int channels);
icculus@10575
    53
void SDL_Downsample_Arbitrary(SDL_AudioCVT *cvt, const int channels);
icculus@10575
    54
void SDL_Upsample_x2(SDL_AudioCVT *cvt, const int channels);
icculus@10575
    55
void SDL_Upsample_x4(SDL_AudioCVT *cvt, const int channels);
icculus@10575
    56
void SDL_Downsample_Multiple(SDL_AudioCVT *cvt, const int multiple, const int channels);
icculus@3021
    57
slouken@1895
    58
/* vi: set ts=4 sw=4 expandtab: */