move some staks to external memory

This commit is contained in:
philippe44
2019-08-26 21:46:48 -07:00
parent df525bbb10
commit 7f97f621c4
12 changed files with 103 additions and 15 deletions

View File

@@ -43,6 +43,8 @@
#include "dmap_parser.h"
#include "log_util.h"
#define RTSP_STACK_SIZE (8*1024)
typedef struct raop_ctx_s {
#ifdef WIN32
struct mdns_service *svc;
@@ -57,6 +59,8 @@ typedef struct raop_ctx_s {
pthread_t thread, search_thread;
#else
TaskHandle_t thread, search_thread, joiner;
StaticTask_t *xTaskBuffer;
StackType_t *xStack;
#endif
unsigned char mac[6];
int latency;
@@ -178,8 +182,14 @@ struct raop_ctx_s *raop_create(struct in_addr host, char *name,
snprintf(id, 64, "%02X%02X%02X%02X%02X%02X@%s", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], name);
#ifdef WIN32
// seems that Windows snprintf does not add NULL char if actual size > max
id[63] = '\0';
// seems that Windows snprintf does not add NULL char if actual size > max
id[63] = '\0';
ctx->svc = mdnsd_register_svc(ctx->svr, id, "_raop._tcp.local", ctx->port, NULL, (const char**) txt);
pthread_create(&ctx->thread, NULL, &rtsp_thread, ctx);
#else
LOG_INFO("starting mDNS with %s", id);
ESP_ERROR_CHECK( mdns_service_add(id, "_raop", "_tcp", ctx->port, txt, sizeof(txt) / sizeof(mdns_txt_item_t)) );
/*
xTaskCreate((TaskFunction_t) rtsp_thread, "RTSP_thread", 8*1024, ctx, ESP_TASK_PRIO_MIN + 1, &ctx->thread);
@@ -192,7 +202,11 @@ void raop_delete(struct raop_ctx_s *ctx) {
return ctx;
}
/*----------------------------------------------------------------------------*/
void raop_delete(struct raop_ctx_s *ctx) {
int sock;
struct sockaddr addr;
socklen_t nlen = sizeof(struct sockaddr);
if (!ctx) return;
@@ -205,8 +219,9 @@ void raop_delete(struct raop_ctx_s *ctx) {
// wake-up thread by connecting socket, needed for freeBSD
sock = socket(AF_INET, SOCK_STREAM, 0);
getsockname(ctx->sock, (struct sockaddr *) &addr, &nlen);
connect(sock, (struct sockaddr*) &addr, sizeof(addr));
getsockname(ctx->sock, (struct sockaddr *) &addr, &nlen);
connect(sock, (struct sockaddr*) &addr, sizeof(addr));
closesocket(sock);
#ifdef WIN32
pthread_join(ctx->thread, NULL);
@@ -229,11 +244,13 @@ void raop_delete(struct raop_ctx_s *ctx) {
// terminate search, but do not reclaim memory of pthread if never launched
if (ctx->active_remote.handle) {
close_mDNS(ctx->active_remote.handle);
pthread_join(ctx->search_thread, NULL);
pthread_join(ctx->search_thread, NULL);
}
*/
NFREE(ctx->rtsp.aeskey);
NFREE(ctx->rtsp.aesiv);
NFREE(ctx->rtsp.fmtp);
// stop broadcasting devices
#ifdef WIN32

View File

@@ -31,6 +31,14 @@ log_level util_loglevel;
static log_level *loglevel = &raop_loglevel;
static struct raop_ctx_s *raop;
/****************************************************************************************
* Airplay sink de-initialization
*/
void raop_sink_deinit(void) {
raop_delete(raop);
mdns_free();
}
/****************************************************************************************
* Airplay sink initialization
*/

View File

@@ -24,6 +24,12 @@ typedef void (*raop_data_cb_t)(const u8_t *data, size_t len, u32_t playtime);
void raop_sink_init(raop_cmd_cb_t cmd_cb, raop_data_cb_t data_cb);
/**
* @brief deinit sink mode (need to be provided)
*/
void raop_sink_deinit(void);
/**
* @brief init sink mode (need to be provided)
*/

View File

@@ -75,6 +75,8 @@
#define BUFFER_FRAMES ( (150 * RAOP_SAMPLE_RATE * 2) / (352 * 100) )
#define MAX_PACKET 1408
#define MIN_LATENCY 11025
#define MAX_LATENCY ( (120 * RAOP_SAMPLE_RATE * 2) / 100 )
#define RTP_STACK_SIZE (4*1024)
#define RTP_SYNC (0x01)
@@ -133,9 +135,11 @@ typedef struct rtp_s {
u32_t discarded;
abuf_t audio_buffer[BUFFER_FRAMES];
seq_t ab_read, ab_write;
pthread_mutex_t ab_mutex;
pthread_mutex_t ab_mutex;
#ifdef WIN32
pthread_t rtp_thread;
pthread_t thread;
#else
TaskHandle_t thread, joiner;
StaticTask_t *xTaskBuffer;
StackType_t *xStack;
#endif
@@ -259,9 +263,13 @@ rtp_resp_t rtp_init(struct in_addr host, int latency, char *aeskey, char *aesiv,
resp.aport = ctx->rtp_sockets[DATA].lport;
if (rc) {
ctx->running = true;
ctx->running = true;
#ifdef WIN32
pthread_create(&ctx->rtp_thread, NULL, rtp_thread_func, (void *) ctx);
pthread_create(&ctx->thread, NULL, rtp_thread_func, (void *) ctx);
#else
// xTaskCreate((TaskFunction_t) rtp_thread_func, "RTP_thread", RTP_TASK_SIZE, ctx, CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT + 1 , &ctx->thread);
ctx->xTaskBuffer = (StaticTask_t*) heap_caps_malloc(sizeof(StaticTask_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
ctx->xStack = (StackType_t*) malloc(RTP_STACK_SIZE);
ctx->thread = xTaskCreateStatic( (TaskFunction_t) rtp_thread_func, "RTP_thread", RTP_STACK_SIZE, ctx,
CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT + 1, ctx->xStack, ctx->xTaskBuffer );
#endif
@@ -281,14 +289,19 @@ void rtp_end(rtp_t *ctx)
int i;
if (!ctx) return;
if (ctx->running) {
#if !defined WIN32
ctx->joiner = xTaskGetCurrentTaskHandle();
#endif
ctx->running = false;
#ifdef WIN32
pthread_join(ctx->rtp_thread, NULL);
pthread_join(ctx->rtp_thread, NULL);
#else
xTaskNotifyWait(0, 0, NULL, portMAX_DELAY);
free(ctx->xStack);
heap_caps_free(ctx->xTaskBuffer);
#endif
}
for (i = 0; i < 3; i++) closesocket(ctx->rtp_sockets[i].sock);