Tweak opus build flags and allocs

This gets us to ~40% of one core cpu usage during playback. Good enough
for a while I reckon!

Paid for the internal ram usage by reclaiming some stack size headroom.
custom
jacqueline 1 year ago
parent f772ab9f20
commit 4bc77f901b
  1. 6
      lib/opusfile/CMakeLists.txt
  2. 10
      lib/opusfile/include/custom_support.h
  3. 2
      src/dev_console/include/console.hpp
  4. 12
      src/tasks/tasks.cpp

@ -11,6 +11,11 @@ set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
set(OPUS_FIXED_POINT ON)
set(OPUS_ENABLE_FLOAT_API OFF)
set(OPUS_VAR_ARRAYS OFF)
set(OPUS_USE_ALLOCA ON)
set(OPUS_NONTHREADSAFE_PSEUDOSTACK OFF)
set(OPUS_INSTALL_PKG_CONFIG_MODULE OFF)
set(OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF)
set(OPUS_BUILD_TESTING OFF)
@ -18,5 +23,6 @@ set(OPUS_BUILD_SHARED_LIBS OFF)
add_subdirectory($ENV{PROJ_PATH}/lib/opus ${CMAKE_CURRENT_BINARY_DIR}/opus)
target_compile_definitions(opus PRIVATE CUSTOM_SUPPORT)
target_compile_options(opus PRIVATE -Os -DSMALL_FOOTPRINT -funroll-loops -ffast-math)
target_include_directories(opus PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_link_libraries(${COMPONENT_LIB} PUBLIC opus)

@ -6,12 +6,10 @@
#define OVERRIDE_OPUS_ALLOC
#define OVERRIDE_OPUS_FREE
static OPUS_INLINE void *opus_alloc (size_t size)
{
return heap_caps_malloc(size, MALLOC_CAP_SPIRAM);
static OPUS_INLINE void* opus_alloc(size_t size) {
return heap_caps_malloc(size, MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
}
static OPUS_INLINE void opus_free (void *ptr)
{
heap_caps_free(ptr);
static OPUS_INLINE void opus_free(void* ptr) {
heap_caps_free(ptr);
}

@ -18,7 +18,7 @@ class Console {
auto Launch() -> void;
protected:
virtual auto GetStackSizeKiB() -> uint16_t { return 16; }
virtual auto GetStackSizeKiB() -> uint16_t { return 8; }
virtual auto RegisterExtraComponents() -> void {}
private:

@ -39,22 +39,20 @@ auto AllocateStack() -> cpp::span<StackType_t>;
// usually written with embedded use cases in mind.
template <>
auto AllocateStack<Type::kAudioDecoder>() -> cpp::span<StackType_t> {
constexpr std::size_t size = 24 * 1024;
constexpr std::size_t size = 20 * 1024;
static StackType_t sStack[size];
return {sStack, size};
}
// LVGL requires only a relatively small stack. However, it can be allocated in
// PSRAM so we give it a bit of headroom for safety.
// LVGL requires only a relatively small stack. Lua's stack is allocated
// separately.
template <>
auto AllocateStack<Type::kUi>() -> cpp::span<StackType_t> {
constexpr std::size_t size = 16 * 1024;
constexpr std::size_t size = 14 * 1024;
static StackType_t sStack[size];
return {sStack, size};
}
template <>
// PCM conversion and resampling uses a very small amount of stack. It works
// entirely with PSRAM-allocated buffers, so no real speed gain from allocating
// it internally.
// PCM conversion and resampling uses a very small amount of stack.
auto AllocateStack<Type::kAudioConverter>() -> cpp::span<StackType_t> {
constexpr std::size_t size = 4 * 1024;
static StackType_t sStack[size];

Loading…
Cancel
Save