diff options
Diffstat (limited to 'audio/unix.c')
| -rw-r--r-- | audio/unix.c | 28 | 
1 files changed, 28 insertions, 0 deletions
diff --git a/audio/unix.c b/audio/unix.c index 10856b93..0e5fd5c1 100644 --- a/audio/unix.c +++ b/audio/unix.c @@ -140,6 +140,30 @@ static service_type_t select_service(struct device *dev)  		return TYPE_NONE;  } + +static void stream_state_changed(struct avdtp_stream *stream, +					avdtp_state_t old_state, +					avdtp_state_t new_state, +					struct avdtp_error *err, +					void *user_data) +{ +	struct unix_client *client = user_data; + +	if (err) +		return; +	 +	switch (new_state) { +	case AVDTP_STATE_IDLE: +		if (client->data.session) { +			avdtp_unref(client->data.session); +			client->data.session = NULL; +		} +		break; +	default: +		break; +	} +} +  static void a2dp_setup_complete(struct avdtp *session, struct device *dev,  					struct avdtp_stream *stream,  					void *user_data) @@ -223,11 +247,15 @@ static void a2dp_setup_complete(struct avdtp *session, struct device *dev,  	unix_send_cfg(client->sock, cfg, fd); +	avdtp_stream_add_cb(session, stream, stream_state_changed, dev); +  	return;  failed:  	unix_send_cfg(client->sock, NULL, -1);  	a2dp_source_unlock(dev, session); +	avdtp_unref(client->data.session); +	client->data.session = NULL;  }  static void cfg_event(struct unix_client *client, struct ipc_packet *pkt,  | 
