Browse Source

stack & internal memory optimization

will need to move pthread stack to external memory at some point ...
philippe44 5 years ago
parent
commit
217dd8e5f0

+ 4 - 0
components/raop/raop_sink.c

@@ -18,6 +18,10 @@
 
 
 #include "trace.h"
 #include "trace.h"
 
 
+#ifndef CONFIG_AIRPLAY_NAME
+#define CONFIG_AIRPLAY_NAME		"disabled"
+#endif
+
 static const char * TAG = "platform";
 static const char * TAG = "platform";
 extern char current_namespace[];
 extern char current_namespace[];
 
 

+ 4 - 4
components/squeezelite/embedded.h

@@ -19,10 +19,10 @@
 #define PTHREAD_STACK_MIN	256
 #define PTHREAD_STACK_MIN	256
 #endif
 #endif
 
 
-#define STREAM_THREAD_STACK_SIZE  8 * 1024
-#define DECODE_THREAD_STACK_SIZE 20 * 1024
-#define OUTPUT_THREAD_STACK_SIZE  8 * 1024
-#define IR_THREAD_STACK_SIZE      8 * 1024
+#define STREAM_THREAD_STACK_SIZE  6 * 1024
+#define DECODE_THREAD_STACK_SIZE 16 * 1024
+#define OUTPUT_THREAD_STACK_SIZE  6 * 1024
+#define IR_THREAD_STACK_SIZE      6 * 1024
 
 
 //#define BASE_CAP "Model=squeezelite,AccuratePlayPoints=0,HasDigitalOut=1,HasPolarityInversion=1,Firmware=" VERSION	
 //#define BASE_CAP "Model=squeezelite,AccuratePlayPoints=0,HasDigitalOut=1,HasPolarityInversion=1,Firmware=" VERSION	
 
 

+ 1 - 1
components/squeezelite/opus.c

@@ -139,7 +139,7 @@ static decode_state opus_decompress(void) {
 		info = OP(u, head, u->of, -1);
 		info = OP(u, head, u->of, -1);
 
 
 		LOCK_O;
 		LOCK_O;
-		output.next_sample_rate = 48000;
+		output.next_sample_rate = decode_newstream(48000, output.supported_rates);
 		IF_DSD(	output.next_fmt = PCM; )
 		IF_DSD(	output.next_fmt = PCM; )
 		output.track_start = outputbuf->writep;
 		output.track_start = outputbuf->writep;
 		if (output.fade_mode) _checkfade(true);
 		if (output.fade_mode) _checkfade(true);

+ 3 - 3
components/squeezelite/output_i2s.c

@@ -86,7 +86,7 @@ typedef enum { DAC_ON = 0, DAC_OFF, DAC_POWERDOWN, DAC_VOLUME } dac_cmd_e;
 
 
 // must have an integer ratio with FRAME_BLOCK
 // must have an integer ratio with FRAME_BLOCK
 #define DMA_BUF_LEN		512	
 #define DMA_BUF_LEN		512	
-#define DMA_BUF_COUNT	16
+#define DMA_BUF_COUNT	12
 
 
 #define DECLARE_ALL_MIN_MAX 	\
 #define DECLARE_ALL_MIN_MAX 	\
 	DECLARE_MIN_MAX(o); 		\
 	DECLARE_MIN_MAX(o); 		\
@@ -307,7 +307,7 @@ void output_init_i2s(log_level level, char *device, unsigned output_buf_size, ch
 	pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN + OUTPUT_THREAD_STACK_SIZE);
 	pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN + OUTPUT_THREAD_STACK_SIZE);
 	pthread_create_name(&thread, &attr, output_thread_i2s, NULL, "output_i2s");
 	pthread_create_name(&thread, &attr, output_thread_i2s, NULL, "output_i2s");
 	pthread_attr_destroy(&attr);
 	pthread_attr_destroy(&attr);
-
+	
 	// leave stack size to default 
 	// leave stack size to default 
 	pthread_create_name(&stats_thread, NULL, output_thread_i2s_stats, NULL, "output_i2s_sts");
 	pthread_create_name(&stats_thread, NULL, output_thread_i2s_stats, NULL, "output_i2s_sts");
 }
 }
@@ -404,7 +404,7 @@ static void *output_thread_i2s() {
 	// spdif needs 16 bytes per frame : 32 bits/sample, 2 channels, BMC encoded
 	// spdif needs 16 bytes per frame : 32 bits/sample, 2 channels, BMC encoded
 	if (spdif && (sbuf = malloc(FRAME_BLOCK * 16)) == NULL) {
 	if (spdif && (sbuf = malloc(FRAME_BLOCK * 16)) == NULL) {
 		LOG_ERROR("Cannot allocate SPDIF buffer");
 		LOG_ERROR("Cannot allocate SPDIF buffer");
-	}	
+	}
 	
 	
 	while (running) {
 	while (running) {
 			
 			

+ 1 - 1
main/cmd_squeezelite.c

@@ -17,7 +17,7 @@
 #include "nvs_flash.h"
 #include "nvs_flash.h"
 //extern char current_namespace[];
 //extern char current_namespace[];
 static const char * TAG = "squeezelite_cmd";
 static const char * TAG = "squeezelite_cmd";
-#define SQUEEZELITE_THREAD_STACK_SIZE 8192
+#define SQUEEZELITE_THREAD_STACK_SIZE (6*1024)
 extern int main(int argc, char **argv);
 extern int main(int argc, char **argv);
 static int launchsqueezelite(int argc, char **argv);
 static int launchsqueezelite(int argc, char **argv);
 pthread_t thread_squeezelite;
 pthread_t thread_squeezelite;

+ 1 - 1
main/console.c

@@ -146,7 +146,7 @@ void process_autoexec(){
 		ESP_LOGD(TAG,"No matching command found for name autoexec. Adding default entries");
 		ESP_LOGD(TAG,"No matching command found for name autoexec. Adding default entries");
 		uint8_t autoexec_dft=0;
 		uint8_t autoexec_dft=0;
 		char autoexec1_dft[64];
 		char autoexec1_dft[64];
-		char autoexec2_dft[]="squeezelite -o \"I2S\" -b 500:2000 -d all=info -M esp32";
+		char autoexec2_dft[256]="squeezelite -o \"I2S\" -b 500:2000 -d all=info -M esp32";
 		snprintf(autoexec1_dft, 64, "join %s %s", CONFIG_WIFI_SSID, CONFIG_WIFI_PASSWORD);
 		snprintf(autoexec1_dft, 64, "join %s %s", CONFIG_WIFI_SSID, CONFIG_WIFI_PASSWORD);
 		store_nvs_value(NVS_TYPE_U8,"autoexec",&autoexec_dft);
 		store_nvs_value(NVS_TYPE_U8,"autoexec",&autoexec_dft);
 		store_nvs_value(NVS_TYPE_STR,"autoexec1",autoexec1_dft);
 		store_nvs_value(NVS_TYPE_STR,"autoexec1",autoexec1_dft);