diff options
Diffstat (limited to 'src/libmpg123/layer3.c')
-rw-r--r-- | src/libmpg123/layer3.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/libmpg123/layer3.c b/src/libmpg123/layer3.c index 7f1d36b32..697415834 100644 --- a/src/libmpg123/layer3.c +++ b/src/libmpg123/layer3.c @@ -1596,12 +1596,17 @@ void do_layer3(metronom_t *metronom, mpgaudio_t *mp, uint32_t pts) } } - if (!mp->is_output_initialized) { - mp->ao_output->open (metronom, 16, fr->sample_rate, + if ((!mp->is_output_initialized) || (mp->sample_rate_device != fr->sample_rate)) { + + if (mp->is_output_initialized) + mp->ao_output->close(); + + mp->ao_output->open (16, fr->sample_rate, stereo-1 ? AO_MODE_STEREO: AO_MODE_MONO); mp->is_output_initialized = 1; - - printf ("layer3\n"); + mp->sample_rate_device = fr->sample_rate; + + printf ("layer3\n"); } mp->ao_output->write_audio_data (metronom, (int16_t*)mp->osspace, num_bytes/(stereo-1 ? 4:2), pts); |