|
@@ -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:
|