src/audio/SDL_audio_c.h
author Sam Lantinga
Mon, 09 Jan 2017 11:58:01 -0800
changeset 10802 6afc9b833867
parent 10799 234f71894a52
child 10815 71bbe3233508
permissions -rw-r--r--
We only need the first few keymaps corresponding to the following constants:
K_NORMTAB, K_SHIFTTAB, K_ALTTAB, K_ALTSHIFTTAB

In the normal case we'll load all the keymaps from the kernel, but this reduces the size of the SDL library for the fallback case when we can't get to the tty.
slouken@0
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@10737
     3
  Copyright (C) 1997-2017 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@10758
    21
icculus@10758
    22
#ifndef SDL_audio_c_h_
icculus@10758
    23
#define SDL_audio_c_h_
icculus@10758
    24
icculus@8093
    25
#include "../SDL_internal.h"
slouken@0
    26
icculus@10575
    27
#ifndef DEBUG_CONVERT
icculus@10575
    28
#define DEBUG_CONVERT 0
icculus@10575
    29
#endif
icculus@10575
    30
icculus@10575
    31
#if DEBUG_CONVERT
icculus@10575
    32
#define LOG_DEBUG_CONVERT(from, to) fprintf(stderr, "Converting %s to %s.\n", from, to);
icculus@10575
    33
#else
icculus@10575
    34
#define LOG_DEBUG_CONVERT(from, to)
icculus@10575
    35
#endif
icculus@10575
    36
slouken@0
    37
/* Functions and variables exported from SDL_audio.c for SDL_sysaudio.c */
slouken@0
    38
icculus@10790
    39
#ifdef HAVE_LIBSAMPLERATE_H
icculus@10791
    40
#include "samplerate.h"
icculus@10790
    41
extern SDL_bool SRC_available;
icculus@10790
    42
extern SRC_STATE* (*SRC_src_new)(int converter_type, int channels, int *error);
icculus@10790
    43
extern int (*SRC_src_process)(SRC_STATE *state, SRC_DATA *data);
icculus@10790
    44
extern int (*SRC_src_reset)(SRC_STATE *state);
icculus@10790
    45
extern SRC_STATE* (*SRC_src_delete)(SRC_STATE *state);
icculus@10790
    46
extern const char* (*SRC_src_strerror)(int error);
icculus@10790
    47
#endif
icculus@10790
    48
slouken@0
    49
/* Functions to get a list of "close" audio formats */
icculus@1982
    50
extern SDL_AudioFormat SDL_FirstAudioFormat(SDL_AudioFormat format);
icculus@1982
    51
extern SDL_AudioFormat SDL_NextAudioFormat(void);
slouken@0
    52
slouken@0
    53
/* Function to calculate the size and silence for a SDL_AudioSpec */
slouken@1895
    54
extern void SDL_CalculateAudioSpec(SDL_AudioSpec * spec);
slouken@0
    55
icculus@10575
    56
void SDLCALL SDL_Convert_S8_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    57
void SDLCALL SDL_Convert_U8_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    58
void SDLCALL SDL_Convert_S16_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    59
void SDLCALL SDL_Convert_U16_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    60
void SDLCALL SDL_Convert_S32_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    61
void SDLCALL SDL_Convert_F32_to_S8(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    62
void SDLCALL SDL_Convert_F32_to_U8(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    63
void SDLCALL SDL_Convert_F32_to_S16(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    64
void SDLCALL SDL_Convert_F32_to_U16(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    65
void SDLCALL SDL_Convert_F32_to_S32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@3021
    66
icculus@10757
    67
icculus@10757
    68
/* SDL_AudioStream is a new audio conversion interface. It
icculus@10757
    69
    might eventually become a public API.
icculus@10757
    70
   The benefits vs SDL_AudioCVT:
icculus@10757
    71
    - it can handle resampling data in chunks without generating
icculus@10757
    72
      artifacts, when it doesn't have the complete buffer available.
icculus@10757
    73
    - it can handle incoming data in any variable size.
icculus@10757
    74
    - You push data as you have it, and pull it when you need it
icculus@10757
    75
icculus@10757
    76
    (Note that currently this converts as data is put into the stream, so
icculus@10757
    77
    you need to push more than a handful of bytes if you want decent
icculus@10757
    78
    resampling. This can be changed later.)
icculus@10757
    79
 */
icculus@10757
    80
icculus@10757
    81
/* this is opaque to the outside world. */
icculus@10757
    82
typedef struct SDL_AudioStream SDL_AudioStream;
icculus@10757
    83
icculus@10757
    84
/* create a new stream */
icculus@10757
    85
SDL_AudioStream *SDL_NewAudioStream(const SDL_AudioFormat src_format,
icculus@10757
    86
                                    const Uint8 src_channels,
icculus@10757
    87
                                    const int src_rate,
icculus@10757
    88
                                    const SDL_AudioFormat dst_format,
icculus@10757
    89
                                    const Uint8 dst_channels,
icculus@10757
    90
                                    const int dst_rate);
icculus@10757
    91
icculus@10757
    92
/* add data to be converted/resampled to the stream */
icculus@10757
    93
int SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, const Uint32 len);
icculus@10757
    94
icculus@10757
    95
/* get converted/resampled data from the stream */
icculus@10764
    96
int SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, const Uint32 len);
icculus@10757
    97
icculus@10757
    98
/* clear any pending data in the stream without converting it. */
icculus@10757
    99
void SDL_AudioStreamClear(SDL_AudioStream *stream);
icculus@10757
   100
icculus@10757
   101
/* number of converted/resampled bytes available */
icculus@10757
   102
int SDL_AudioStreamAvailable(SDL_AudioStream *stream);
icculus@10757
   103
icculus@10757
   104
/* dispose of a stream */
icculus@10757
   105
void SDL_FreeAudioStream(SDL_AudioStream *stream);
icculus@10757
   106
icculus@10758
   107
#endif
icculus@10758
   108
slouken@1895
   109
/* vi: set ts=4 sw=4 expandtab: */