"PREPARE",
"CHANGE_ROUTE_BY_STREAM_STARTED",
"CHANGE_ROUTE_BY_STREAM_ENDED",
+ "CHANGE_ROUTE_BY_STATE_CHANGED_RUNNING",
+ "CHANGE_ROUTE_BY_STATE_CHANGED_CORKED",
"CHANGE_ROUTE_BY_STREAM_FOCUS_CHANGED",
"UPDATE_VOLUME",
"ADD_PARENT_ID",
}
static process_stream_result_t handle_command_change_route_by_stream_ended(pa_stream_manager *m, void *stream,
- stream_type_t type, bool is_new_data) {
+ stream_type_t type, bool is_new_data, bool by_corked) {
const char *role = NULL;
const char *route_type_str = NULL;
const char *preferred_device_role;
}
skip_notifying_route_end:
- do_notify(m, NOTIFY_COMMAND_INFORM_STREAM_DISCONNECTED, type, false, stream);
+ if (by_corked || CHECK_STREAM_RUNNING(stream, type))
+ do_notify(m, NOTIFY_COMMAND_INFORM_STREAM_DISCONNECTED, type, false, stream);
/* need to skip if this stream does not belong to internal device */
/* if needed, notify to update */
}
if (!IS_ROUTE_TYPE_FOR_EXTERNAL_DEV(route_type_str, route_type)) {
- if (command == PROCESS_COMMAND_ADD_PARENT_ID) {
+ if (command == PROCESS_COMMAND_ADD_PARENT_ID && CHECK_STREAM_RUNNING(stream, type)) {
if (type == STREAM_SINK_INPUT && m->cur_highest_priority.need_to_update_si) {
m->cur_highest_priority.sink_input = stream;
m->cur_highest_priority.role_si = role;
result = handle_command_prepare(m, stream, type, is_new_data);
break;
case PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_STARTED:
+ case PROCESS_COMMAND_CHANGE_ROUTE_BY_STATE_CHANGED_RUNNING:
result = handle_command_change_route_by_stream_started(m, stream, type, is_new_data);
break;
case PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_ENDED:
- result = handle_command_change_route_by_stream_ended(m, stream, type, is_new_data);
+ case PROCESS_COMMAND_CHANGE_ROUTE_BY_STATE_CHANGED_CORKED:
+ result = handle_command_change_route_by_stream_ended(m, stream, type, is_new_data,
+ (command == PROCESS_COMMAND_CHANGE_ROUTE_BY_STATE_CHANGED_CORKED));
break;
case PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_FOCUS_CHANGED:
result = handle_command_change_route_by_stream_focus_changed(m, stream, type, is_new_data);
switch (i->state) {
case PA_SINK_INPUT_CORKED:
- process_stream(m, i, STREAM_SINK_INPUT, PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_ENDED, false);
+ process_stream(m, i, STREAM_SINK_INPUT, PROCESS_COMMAND_CHANGE_ROUTE_BY_STATE_CHANGED_CORKED, false);
break;
case PA_SINK_INPUT_RUNNING:
- process_stream(m, i, STREAM_SINK_INPUT, PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_STARTED, false);
+ process_stream(m, i, STREAM_SINK_INPUT, PROCESS_COMMAND_CHANGE_ROUTE_BY_STATE_CHANGED_RUNNING, false);
break;
default:
break;