forked from xiaozhi/xiaozhi-esp32
fix i2s race condition error
This commit is contained in:
@@ -137,6 +137,7 @@ void Es8388AudioCodec::SetOutputVolume(int volume) {
|
||||
}
|
||||
|
||||
void Es8388AudioCodec::EnableInput(bool enable) {
|
||||
std::lock_guard<std::mutex> lock(data_if_mutex_);
|
||||
if (enable == input_enabled_) {
|
||||
return;
|
||||
}
|
||||
@@ -157,6 +158,7 @@ void Es8388AudioCodec::EnableInput(bool enable) {
|
||||
}
|
||||
|
||||
void Es8388AudioCodec::EnableOutput(bool enable) {
|
||||
std::lock_guard<std::mutex> lock(data_if_mutex_);
|
||||
if (enable == output_enabled_) {
|
||||
return;
|
||||
}
|
||||
@@ -191,6 +193,7 @@ void Es8388AudioCodec::EnableOutput(bool enable) {
|
||||
}
|
||||
|
||||
int Es8388AudioCodec::Read(int16_t* dest, int samples) {
|
||||
std::lock_guard<std::mutex> lock(data_if_mutex_);
|
||||
if (input_enabled_) {
|
||||
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_codec_dev_read(input_dev_, (void*)dest, samples * sizeof(int16_t)));
|
||||
}
|
||||
@@ -198,6 +201,7 @@ int Es8388AudioCodec::Read(int16_t* dest, int samples) {
|
||||
}
|
||||
|
||||
int Es8388AudioCodec::Write(const int16_t* data, int samples) {
|
||||
std::lock_guard<std::mutex> lock(data_if_mutex_);
|
||||
if (output_enabled_) {
|
||||
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_codec_dev_write(output_dev_, (void*)data, samples * sizeof(int16_t)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user