summaryrefslogtreecommitdiff
path: root/src/audio/i2s_audio_output.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-10 15:33:00 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-10 15:33:00 +1000
commitd8fc77101dcf80a3643a00b3446dca1e390ce997 (patch)
tree9e03881f3857c7b4c6a0b6e3a062947daecc69d1 /src/audio/i2s_audio_output.cpp
parent67caeb6e3cda44205ba8fe783274b20dc7ea216e (diff)
downloadtangara-fw-d8fc77101dcf80a3643a00b3446dca1e390ce997.tar.gz
Give codecs complete control of their input files
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
-rw-r--r--src/audio/i2s_audio_output.cpp25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp
index e53dbe2a..b7fcf104 100644
--- a/src/audio/i2s_audio_output.cpp
+++ b/src/audio/i2s_audio_output.cpp
@@ -115,26 +115,25 @@ auto I2SAudioOutput::AdjustVolumeDown() -> bool {
return true;
}
-auto I2SAudioOutput::PrepareFormat(const StreamInfo::Pcm& orig)
- -> StreamInfo::Pcm {
- return StreamInfo::Pcm{
- .channels = std::min<uint8_t>(orig.channels, 2),
- .bits_per_sample = std::clamp<uint8_t>(orig.bits_per_sample, 16, 32),
+auto I2SAudioOutput::PrepareFormat(const Format& orig) -> Format {
+ return Format{
.sample_rate = std::clamp<uint32_t>(orig.sample_rate, 8000, 96000),
+ .num_channels = std::min<uint8_t>(orig.num_channels, 2),
+ .bits_per_sample = std::clamp<uint8_t>(orig.bits_per_sample, 16, 32),
};
}
-auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> void {
- if (current_config_ && pcm == *current_config_) {
+auto I2SAudioOutput::Configure(const Format& fmt) -> void {
+ if (current_config_ && fmt == *current_config_) {
ESP_LOGI(kTag, "ignoring unchanged format");
return;
}
- ESP_LOGI(kTag, "incoming audio stream: %u ch %u bpp @ %lu Hz", pcm.channels,
- pcm.bits_per_sample, pcm.sample_rate);
+ ESP_LOGI(kTag, "incoming audio stream: %u ch %u bpp @ %lu Hz",
+ fmt.num_channels, fmt.bits_per_sample, fmt.sample_rate);
drivers::I2SDac::Channels ch;
- switch (pcm.channels) {
+ switch (fmt.num_channels) {
case 1:
ch = drivers::I2SDac::CHANNELS_MONO;
break;
@@ -147,7 +146,7 @@ auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> void {
}
drivers::I2SDac::BitsPerSample bps;
- switch (pcm.bits_per_sample) {
+ switch (fmt.bits_per_sample) {
case 16:
bps = drivers::I2SDac::BPS_16;
break;
@@ -163,7 +162,7 @@ auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> void {
}
drivers::I2SDac::SampleRate sample_rate;
- switch (pcm.sample_rate) {
+ switch (fmt.sample_rate) {
case 8000:
sample_rate = drivers::I2SDac::SAMPLE_RATE_8;
break;
@@ -188,7 +187,7 @@ auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> void {
}
dac_->Reconfigure(ch, bps, sample_rate);
- current_config_ = pcm;
+ current_config_ = fmt;
}
} // namespace audio