mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 20:47:08 +03:00
fix flush mode
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -227,7 +227,7 @@ int main(int argc, char *argv[]) {
|
|||||||
} else if (!strcasecmp(arg, "-i")) {
|
} else if (!strcasecmp(arg, "-i")) {
|
||||||
identity = *++argv;
|
identity = *++argv;
|
||||||
} else {
|
} else {
|
||||||
// nothing let's try to be smart and handle legacy crappy
|
// nothing let's try to be smart and handle legacy crap
|
||||||
if (!identity) identity = *argv;
|
if (!identity) identity = *argv;
|
||||||
else if (!type) (void) !asprintf(&type, "%s.local", *argv);
|
else if (!type) (void) !asprintf(&type, "%s.local", *argv);
|
||||||
else if (!port) port = atoi(*argv);
|
else if (!port) port = atoi(*argv);
|
||||||
@@ -235,6 +235,7 @@ int main(int argc, char *argv[]) {
|
|||||||
txt = (const char**) malloc((argc + 1) * sizeof(char**));
|
txt = (const char**) malloc((argc + 1) * sizeof(char**));
|
||||||
memcpy(txt, argv, argc * sizeof(char**));
|
memcpy(txt, argv, argc * sizeof(char**));
|
||||||
txt[argc] = NULL;
|
txt[argc] = NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
argc--;
|
argc--;
|
||||||
}
|
}
|
||||||
@@ -250,13 +251,14 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
mdnsd_set_hostname(svr, hostname, host);
|
mdnsd_set_hostname(svr, hostname, host);
|
||||||
svc = mdnsd_register_svc(svr, identity, type, port, NULL, txt);
|
svc = mdnsd_register_svc(svr, identity, type, port, NULL, txt);
|
||||||
mdns_service_destroy(svc);
|
// mdns_service_destroy(svc);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
Sleep(INFINITE);
|
Sleep(INFINITE);
|
||||||
#else
|
#else
|
||||||
pause();
|
pause();
|
||||||
#endif
|
#endif
|
||||||
|
mdns_service_remove(svr, svc);
|
||||||
mdnsd_stop(svr);
|
mdnsd_stop(svr);
|
||||||
} else {
|
} else {
|
||||||
printf("Can't start server");
|
printf("Can't start server");
|
||||||
@@ -264,7 +266,7 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
free(type);
|
free(type);
|
||||||
free(txt);
|
if (txt) free(txt);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
winsock_close();
|
winsock_close();
|
||||||
|
|||||||
@@ -144,11 +144,10 @@ static int create_recv_sock(uint32_t host) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
on = sizeof(on);
|
socklen_t len = sizeof(on);
|
||||||
socklen_t len;
|
if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, &len)) {
|
||||||
if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, &len)) {
|
|
||||||
on = 1;
|
on = 1;
|
||||||
if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, sizeof(on))) < 0) {
|
if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on))) < 0) {
|
||||||
log_message(LOG_ERR, "recv setsockopt(SO_REUSEPORT): %m\n", r);
|
log_message(LOG_ERR, "recv setsockopt(SO_REUSEPORT): %m\n", r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -443,7 +443,7 @@ void output_close_common(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void output_flush(void) {
|
void output_flush(void) {
|
||||||
LOG_INFO("flush output buffer");
|
LOG_INFO("flush output buffer (full)");
|
||||||
buf_flush(outputbuf);
|
buf_flush(outputbuf);
|
||||||
LOCK;
|
LOCK;
|
||||||
output.fade = FADE_INACTIVE;
|
output.fade = FADE_INACTIVE;
|
||||||
@@ -457,3 +457,15 @@ void output_flush(void) {
|
|||||||
output.frames_played = 0;
|
output.frames_played = 0;
|
||||||
UNLOCK;
|
UNLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool output_flush_streaming(void) {
|
||||||
|
LOG_INFO("flush output buffer (streaming)");
|
||||||
|
LOCK;
|
||||||
|
bool flushed = output.track_start != NULL;
|
||||||
|
if (output.track_start) {
|
||||||
|
outputbuf->writep = output.track_start;
|
||||||
|
output.track_start = NULL;
|
||||||
|
}
|
||||||
|
UNLOCK;
|
||||||
|
return flushed;
|
||||||
|
}
|
||||||
|
|||||||
@@ -305,8 +305,18 @@ static void process_strm(u8_t *pkt, int len) {
|
|||||||
sendSTAT("STMt", strm->replay_gain); // STMt replay_gain is no longer used to track latency, but support it
|
sendSTAT("STMt", strm->replay_gain); // STMt replay_gain is no longer used to track latency, but support it
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
|
{
|
||||||
|
decode_flush(false);
|
||||||
|
bool flushed = false;
|
||||||
|
if (!output.external) flushed |= output_flush_streaming();
|
||||||
|
// we can have fully finished the current streaming, that's still a flush
|
||||||
|
if (stream_disconnect() || flushed) sendSTAT("STMf", 0);
|
||||||
|
buf_flush(streambuf);
|
||||||
|
output.stop_time = gettime_ms();
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'q':
|
case 'q':
|
||||||
decode_flush(strm->command == 'q');
|
decode_flush(true);
|
||||||
if (!output.external) output_flush();
|
if (!output.external) output_flush();
|
||||||
status.frames_played = 0;
|
status.frames_played = 0;
|
||||||
if (stream_disconnect() && strm->command == 'f') sendSTAT("STMf", 0);
|
if (stream_disconnect() && strm->command == 'f') sendSTAT("STMf", 0);
|
||||||
|
|||||||
@@ -727,6 +727,7 @@ struct outputstate {
|
|||||||
void output_init_common(log_level level, const char *device, unsigned output_buf_size, unsigned rates[], unsigned idle);
|
void output_init_common(log_level level, const char *device, unsigned output_buf_size, unsigned rates[], unsigned idle);
|
||||||
void output_close_common(void);
|
void output_close_common(void);
|
||||||
void output_flush(void);
|
void output_flush(void);
|
||||||
|
bool output_flush_streaming(void);
|
||||||
// _* called with mutex locked
|
// _* called with mutex locked
|
||||||
frames_t _output_frames(frames_t avail);
|
frames_t _output_frames(frames_t avail);
|
||||||
void _checkfade(bool);
|
void _checkfade(bool);
|
||||||
|
|||||||
Reference in New Issue
Block a user