diff --git a/src/audio/audio.c b/src/audio/audio.c index 7501d2e9f..6077ee1bc 100644 --- a/src/audio/audio.c +++ b/src/audio/audio.c @@ -144,6 +144,8 @@ struct state_audio { int resample_to; char *requested_encryption; + + volatile bool paused; }; /** @@ -689,9 +691,15 @@ static void audio_sender_process_message(struct state_audio *s, struct msg_sende &s->audio_network_parameters); break; case SENDER_MSG_PAUSE: + s->paused = true; + break; case SENDER_MSG_PLAY: + s->paused = false; + break; + case SENDER_MSG_CHANGE_FEC: fprintf(stderr, "Not implemented!\n"); abort(); + } } @@ -726,6 +734,9 @@ static void *audio_sender_thread(void *arg) continue; #endif } + if (s->paused) { + continue; + } if(s->sender == NET_NATIVE) { // RESAMPLE resample(&resample_state, buffer); diff --git a/src/control_socket.cpp b/src/control_socket.cpp index e3c36cfd9..93d9a91c4 100644 --- a/src/control_socket.cpp +++ b/src/control_socket.cpp @@ -300,10 +300,22 @@ static int process_msg(struct control_state *s, fd_t client_fd, char *message) abort(); } + struct msg_sender *msg_audio = (struct msg_sender *) malloc(sizeof(struct msg_sender)); + memcpy(msg_audio, msg, sizeof(struct msg_sender)); + if (msg_audio->type == SENDER_MSG_CHANGE_PORT) { + msg->port = atoi(suffix(message, "sender-port ")); + } + enum module_class path_sender[] = { MODULE_CLASS_SENDER, MODULE_CLASS_NONE }; + enum module_class path_sender_audio[] = { MODULE_CLASS_AUDIO, MODULE_CLASS_SENDER, MODULE_CLASS_NONE }; + char path_audio[1024]; + memcpy(path_audio, path, sizeof(path_audio)); append_message_path(path, sizeof(path), path_sender); + append_message_path(path_audio, sizeof(path_audio), path_sender_audio); + resp = send_message(s->root_module, path, (struct message *) msg); + send_message(s->root_module, path_audio, (struct message *) msg_audio); } else if (prefix_matches(message, "receiver-port ")) { struct msg_receiver *msg = (struct msg_receiver *)