Performance tweaks for smoother tunes

- Pin the decoder task to APP_CORE to reduce context switches
 - Increase sample buffer sizes
custom
jacqueline 2 years ago
parent 795f268737
commit 485e9adfce
  1. 2
      src/audio/audio_converter.cpp
  2. 4
      src/audio/audio_decoder.cpp
  3. 2
      src/audio/i2s_audio_output.cpp
  4. 2
      src/ui/lvgl_task.cpp
  5. 14
      src/ui/widget_top_bar.cpp

@ -24,7 +24,7 @@
static constexpr char kTag[] = "mixer";
static constexpr std::size_t kSourceBufferLength = 8 * 1024;
static constexpr std::size_t kSampleBufferLength = 240 * 2;
static constexpr std::size_t kSampleBufferLength = 240 * 2 * 4;
namespace audio {

@ -46,7 +46,7 @@ namespace audio {
static const char* kTag = "audio_dec";
static constexpr std::size_t kCodecBufferLength = 240 * 4;
static constexpr std::size_t kCodecBufferLength = 240 * 4 * 4;
Timer::Timer(const codecs::ICodec::OutputFormat& format)
: current_seconds_(0),
@ -79,7 +79,7 @@ auto Timer::AddSamples(std::size_t samples) -> void {
auto Decoder::Start(std::shared_ptr<IAudioSource> source,
std::shared_ptr<SampleConverter> sink) -> Decoder* {
Decoder* task = new Decoder(source, sink);
tasks::StartPersistent<tasks::Type::kAudio>([=]() { task->Main(); });
tasks::StartPersistent<tasks::Type::kAudio>(1, [=]() { task->Main(); });
return task;
}

@ -37,7 +37,7 @@ static constexpr uint16_t kMaxVolume = 0x1ff;
static constexpr uint16_t kMinVolume = 0b0;
static constexpr uint16_t kMaxVolumeBeforeClipping = 0x185;
static constexpr uint16_t kLineLevelVolume = 0x13d;
static constexpr uint16_t kDefaultVolume = 0x128;
static constexpr uint16_t kDefaultVolume = 0x100;
static constexpr size_t kDrainBufferSize = 8 * 1024;

@ -49,7 +49,7 @@
namespace ui {
static const char* kTag = "lv_task";
static const TickType_t kMaxFrameRate = pdMS_TO_TICKS(66);
static const TickType_t kMaxFrameRate = pdMS_TO_TICKS(100);
static int sTimerId;
static SemaphoreHandle_t sFrameSemaphore;

@ -58,23 +58,23 @@ auto TopBar::Update(const State& state) -> void {
lv_label_set_text(playback_, "-");
break;
case PlaybackState::kPaused:
lv_label_set_text(playback_, "");
lv_label_set_text(playback_, LV_SYMBOL_PAUSE);
break;
case PlaybackState::kPlaying:
lv_label_set_text(playback_, "");
lv_label_set_text(playback_, LV_SYMBOL_PLAY);
break;
}
if (state.battery_percent >= 95) {
lv_label_set_text(battery_, "");
lv_label_set_text(battery_, LV_SYMBOL_BATTERY_FULL);
} else if (state.battery_percent >= 70) {
lv_label_set_text(battery_, "");
lv_label_set_text(battery_, LV_SYMBOL_BATTERY_1);
} else if (state.battery_percent >= 40) {
lv_label_set_text(battery_, "");
lv_label_set_text(battery_, LV_SYMBOL_BATTERY_2);
} else if (state.battery_percent >= 10) {
lv_label_set_text(battery_, "");
lv_label_set_text(battery_, LV_SYMBOL_BATTERY_3);
} else {
lv_label_set_text(battery_, "");
lv_label_set_text(battery_, LV_SYMBOL_BATTERY_EMPTY);
}
}

Loading…
Cancel
Save