mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-06-02 09:57:40 +00:00
Remove AudioCVT interface in favor of SDL_AudioStream
This commit is contained in:
parent
9211c0b639
commit
64bc0a1612
8 changed files with 161 additions and 142 deletions
|
@ -191,59 +191,6 @@ typedef struct SDL_AudioSpec
|
|||
} SDL_AudioSpec;
|
||||
|
||||
|
||||
struct SDL_AudioCVT;
|
||||
typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt,
|
||||
SDL_AudioFormat format);
|
||||
|
||||
/**
|
||||
* \brief Upper limit of filters in SDL_AudioCVT
|
||||
*
|
||||
* The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is
|
||||
* currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers,
|
||||
* one of which is the terminating NULL pointer.
|
||||
*/
|
||||
#define SDL_AUDIOCVT_MAX_FILTERS 9
|
||||
|
||||
/**
|
||||
* \struct SDL_AudioCVT
|
||||
* \brief A structure to hold a set of audio conversion filters and buffers.
|
||||
*
|
||||
* Note that various parts of the conversion pipeline can take advantage
|
||||
* of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require
|
||||
* you to pass it aligned data, but can possibly run much faster if you
|
||||
* set both its (buf) field to a pointer that is aligned to 16 bytes, and its
|
||||
* (len) field to something that's a multiple of 16, if possible.
|
||||
*/
|
||||
#if defined(__GNUC__) && !defined(__CHERI_PURE_CAPABILITY__)
|
||||
/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't
|
||||
pad it out to 88 bytes to guarantee ABI compatibility between compilers.
|
||||
This is not a concern on CHERI architectures, where pointers must be stored
|
||||
at aligned locations otherwise they will become invalid, and thus structs
|
||||
containing pointers cannot be packed without giving a warning or error.
|
||||
vvv
|
||||
The next time we rev the ABI, make sure to size the ints and add padding.
|
||||
*/
|
||||
#define SDL_AUDIOCVT_PACKED __attribute__((packed))
|
||||
#else
|
||||
#define SDL_AUDIOCVT_PACKED
|
||||
#endif
|
||||
/* */
|
||||
typedef struct SDL_AudioCVT
|
||||
{
|
||||
int needed; /**< Set to 1 if conversion possible */
|
||||
SDL_AudioFormat src_format; /**< Source audio format */
|
||||
SDL_AudioFormat dst_format; /**< Target audio format */
|
||||
double rate_incr; /**< Rate conversion increment */
|
||||
Uint8 *buf; /**< Buffer to hold entire audio data */
|
||||
int len; /**< Length of original audio buffer */
|
||||
int len_cvt; /**< Length of converted audio buffer */
|
||||
int len_mult; /**< buffer must be len*len_mult big */
|
||||
double len_ratio; /**< Given len, final size is len*len_ratio */
|
||||
SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */
|
||||
int filter_index; /**< Current audio conversion function */
|
||||
} SDL_AUDIOCVT_PACKED SDL_AudioCVT;
|
||||
|
||||
|
||||
/* Function prototypes */
|
||||
|
||||
/**
|
||||
|
@ -734,85 +681,6 @@ extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src,
|
|||
#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \
|
||||
SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len)
|
||||
|
||||
/**
|
||||
* Initialize an SDL_AudioCVT structure for conversion.
|
||||
*
|
||||
* Before an SDL_AudioCVT structure can be used to convert audio data it must
|
||||
* be initialized with source and destination information.
|
||||
*
|
||||
* This function will zero out every field of the SDL_AudioCVT, so it must be
|
||||
* called before the application fills in the final buffer information.
|
||||
*
|
||||
* Once this function has returned successfully, and reported that a
|
||||
* conversion is necessary, the application fills in the rest of the fields in
|
||||
* SDL_AudioCVT, now that it knows how large a buffer it needs to allocate,
|
||||
* and then can call SDL_ConvertAudio() to complete the conversion.
|
||||
*
|
||||
* \param cvt an SDL_AudioCVT structure filled in with audio conversion
|
||||
* information
|
||||
* \param src_format the source format of the audio data; for more info see
|
||||
* SDL_AudioFormat
|
||||
* \param src_channels the number of channels in the source
|
||||
* \param src_rate the frequency (sample-frames-per-second) of the source
|
||||
* \param dst_format the destination format of the audio data; for more info
|
||||
* see SDL_AudioFormat
|
||||
* \param dst_channels the number of channels in the destination
|
||||
* \param dst_rate the frequency (sample-frames-per-second) of the destination
|
||||
* \returns 1 if the audio filter is prepared, 0 if no conversion is needed,
|
||||
* or a negative error code on failure; call SDL_GetError() for more
|
||||
* information.
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*
|
||||
* \sa SDL_ConvertAudio
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
|
||||
SDL_AudioFormat src_format,
|
||||
Uint8 src_channels,
|
||||
int src_rate,
|
||||
SDL_AudioFormat dst_format,
|
||||
Uint8 dst_channels,
|
||||
int dst_rate);
|
||||
|
||||
/**
|
||||
* Convert audio data to a desired audio format.
|
||||
*
|
||||
* This function does the actual audio data conversion, after the application
|
||||
* has called SDL_BuildAudioCVT() to prepare the conversion information and
|
||||
* then filled in the buffer details.
|
||||
*
|
||||
* Once the application has initialized the `cvt` structure using
|
||||
* SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio
|
||||
* data in the source format, this function will convert the buffer, in-place,
|
||||
* to the desired format.
|
||||
*
|
||||
* The data conversion may go through several passes; any given pass may
|
||||
* possibly temporarily increase the size of the data. For example, SDL might
|
||||
* expand 16-bit data to 32 bits before resampling to a lower frequency,
|
||||
* shrinking the data size after having grown it briefly. Since the supplied
|
||||
* buffer will be both the source and destination, converting as necessary
|
||||
* in-place, the application must allocate a buffer that will fully contain
|
||||
* the data during its largest conversion pass. After SDL_BuildAudioCVT()
|
||||
* returns, the application should set the `cvt->len` field to the size, in
|
||||
* bytes, of the source data, and allocate a buffer that is `cvt->len *
|
||||
* cvt->len_mult` bytes long for the `buf` field.
|
||||
*
|
||||
* The source data should be copied into this buffer before the call to
|
||||
* SDL_ConvertAudio(). Upon successful return, this buffer will contain the
|
||||
* converted audio, and `cvt->len_cvt` will be the size of the converted data,
|
||||
* in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once
|
||||
* this function returns.
|
||||
*
|
||||
* \param cvt an SDL_AudioCVT structure that was previously set up by
|
||||
* SDL_BuildAudioCVT().
|
||||
* \returns 0 if the conversion was completed successfully or a negative error
|
||||
* code on failure; call SDL_GetError() for more information.
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*
|
||||
* \sa SDL_BuildAudioCVT
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt);
|
||||
|
||||
/* SDL_AudioStream is a new audio conversion interface.
|
||||
The benefits vs SDL_AudioCVT:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue