Fix null poiner dereference when turning off i2s output twice

custom
jacqueline 1 year ago
parent 673b6a33ef
commit 251c0ba96d
  1. 19
      src/audio/i2s_audio_output.cpp

@ -63,16 +63,21 @@ auto I2SAudioOutput::changeMode(Modes mode) -> void {
return; return;
} }
if (mode == Modes::kOff) { if (mode == Modes::kOff) {
dac_->Stop(); if (dac_) {
dac_.reset(); dac_->Stop();
dac_.reset();
}
return; return;
} else if (current_mode_ == Modes::kOff) { }
auto instance = drivers::I2SDac::create(expander_); if (current_mode_ == Modes::kOff) {
if (!instance) { if (!dac_) {
return; auto instance = drivers::I2SDac::create(expander_);
if (!instance) {
return;
}
dac_.reset(*instance);
} }
SetVolume(GetVolume()); SetVolume(GetVolume());
dac_.reset(*instance);
dac_->SetSource(stream()); dac_->SetSource(stream());
dac_->Start(); dac_->Start();
} }

Loading…
Cancel
Save