mirror of https://github.com/mgba-emu/mgba.git
Libretro: Fix audio resampling after GBA fix
This commit is contained in:
parent
e5333f4e7c
commit
1ca75446c6
|
@ -53,6 +53,7 @@ static retro_set_sensor_state_t sensorStateCallback;
|
||||||
static void GBARetroLog(struct mLogger* logger, int category, enum mLogLevel level, const char* format, va_list args);
|
static void GBARetroLog(struct mLogger* logger, int category, enum mLogLevel level, const char* format, va_list args);
|
||||||
|
|
||||||
static void _postAudioBuffer(struct mAVStream*, struct mAudioBuffer*);
|
static void _postAudioBuffer(struct mAVStream*, struct mAudioBuffer*);
|
||||||
|
static void _audioRateChanged(struct mAVStream*, unsigned rate);
|
||||||
static void _setRumble(struct mRumble* rumble, int enable);
|
static void _setRumble(struct mRumble* rumble, int enable);
|
||||||
static uint8_t _readLux(struct GBALuminanceSource* lux);
|
static uint8_t _readLux(struct GBALuminanceSource* lux);
|
||||||
static void _updateLux(struct GBALuminanceSource* lux);
|
static void _updateLux(struct GBALuminanceSource* lux);
|
||||||
|
@ -498,10 +499,11 @@ void retro_init(void) {
|
||||||
logger.log = GBARetroLog;
|
logger.log = GBARetroLog;
|
||||||
mLogSetDefaultLogger(&logger);
|
mLogSetDefaultLogger(&logger);
|
||||||
|
|
||||||
stream.videoDimensionsChanged = 0;
|
stream.videoDimensionsChanged = NULL;
|
||||||
stream.postAudioFrame = 0;
|
stream.postAudioFrame = NULL;
|
||||||
stream.postAudioBuffer = _postAudioBuffer;
|
stream.postAudioBuffer = NULL;
|
||||||
stream.postVideoFrame = 0;
|
stream.postVideoFrame = NULL;
|
||||||
|
stream.audioRateChanged = _audioRateChanged;
|
||||||
|
|
||||||
imageSource.startRequestImage = _startImage;
|
imageSource.startRequestImage = _startImage;
|
||||||
imageSource.stopRequestImage = _stopImage;
|
imageSource.stopRequestImage = _stopImage;
|
||||||
|
@ -913,13 +915,14 @@ bool retro_load_game(const struct retro_game_info* game) {
|
||||||
* using the regular stream-set _postAudioBuffer()
|
* using the regular stream-set _postAudioBuffer()
|
||||||
* callback with a fixed buffer size, which seems
|
* callback with a fixed buffer size, which seems
|
||||||
* (historically) to produce adequate results */
|
* (historically) to produce adequate results */
|
||||||
core->setAVStream(core, &stream);
|
stream.postAudioBuffer = _postAudioBuffer;
|
||||||
audioSampleBufferSize = GB_SAMPLES * 2;
|
audioSampleBufferSize = GB_SAMPLES * 2;
|
||||||
audioSampleBuffer = malloc(audioSampleBufferSize * sizeof(int16_t));
|
audioSampleBuffer = malloc(audioSampleBufferSize * sizeof(int16_t));
|
||||||
audioSamplesPerFrameAvg = GB_SAMPLES;
|
audioSamplesPerFrameAvg = GB_SAMPLES;
|
||||||
core->setAudioBufferSize(core, GB_SAMPLES);
|
core->setAudioBufferSize(core, GB_SAMPLES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
core->setAVStream(core, &stream);
|
||||||
core->setPeripheral(core, mPERIPH_RUMBLE, &rumble);
|
core->setPeripheral(core, mPERIPH_RUMBLE, &rumble);
|
||||||
core->setPeripheral(core, mPERIPH_ROTATION, &rotation);
|
core->setPeripheral(core, mPERIPH_ROTATION, &rotation);
|
||||||
|
|
||||||
|
@ -1250,6 +1253,13 @@ static void _postAudioBuffer(struct mAVStream* stream, struct mAudioBuffer* buff
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _audioRateChanged(struct mAVStream* stream, unsigned rate) {
|
||||||
|
UNUSED(stream);
|
||||||
|
struct retro_system_av_info info;
|
||||||
|
retro_get_system_av_info(&info);
|
||||||
|
environCallback(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &info);
|
||||||
|
}
|
||||||
|
|
||||||
static void _setRumble(struct mRumble* rumble, int enable) {
|
static void _setRumble(struct mRumble* rumble, int enable) {
|
||||||
UNUSED(rumble);
|
UNUSED(rumble);
|
||||||
if (!rumbleInitDone) {
|
if (!rumbleInitDone) {
|
||||||
|
|
Loading…
Reference in New Issue