Re: [PATCH v2 2/3] transport: Update transport release flow for bcast src

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

ma, 2023-10-02 kello 18:33 +0300, Iulia Tanasescu kirjoitti:
> From: Silviu Florian Barbulescu <silviu.barbulescu@xxxxxxx>
> 
> Update transport release flow for broadcast source
> 
> ---
>  profiles/audio/transport.c | 63 ++++++++++++++++++++++----------------
>  1 file changed, 36 insertions(+), 27 deletions(-)
> 
> diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
> index 1e03b7b51..646061358 100644
> --- a/profiles/audio/transport.c
> +++ b/profiles/audio/transport.c
> @@ -606,11 +606,38 @@ static DBusMessage *try_acquire(DBusConnection *conn, DBusMessage *msg,
>  	return NULL;
>  }
>  
> +static void bap_stop_complete(struct bt_bap_stream *stream,
> +					uint8_t code, uint8_t reason,
> +					void *user_data)
> +{
> +	struct media_owner *owner = user_data;
> +	struct media_request *req = owner->pending;
> +	struct media_transport *transport = owner->transport;
> +
> +	/* Release always succeeds */
> +	if (req) {
> +		req->id = 0;
> +		media_request_reply(req, 0);
> +		media_owner_remove(owner);
> +	}
> +
> +	transport_set_state(transport, TRANSPORT_STATE_IDLE);
> +	media_transport_remove_owner(transport);
> +}
> +
> +static void bap_disable_complete(struct bt_bap_stream *stream,
> +					uint8_t code, uint8_t reason,
> +					void *user_data)
> +{
> +	bap_stop_complete(stream, code, reason, user_data);
> +}
> +
>  static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
>  					void *data)
>  {
>  	struct media_transport *transport = data;
>  	struct media_owner *owner = transport->owner;
> +	struct bap_transport *bap = transport->data;
>  	const char *sender;
>  	struct media_request *req;
>  	guint id;
> @@ -642,6 +669,11 @@ static DBusMessage *release(DBusConnection *conn, DBusMessage *msg,
>  	req = media_request_create(msg, id);
>  	media_owner_add(owner, req);
>  
> +	if (bt_bap_stream_get_type(bap->stream) ==
> +			BT_BAP_STREAM_TYPE_BCAST) {
> +		bap_disable_complete(bap->stream, 0x00, 0x00, owner);
> +	}
> +
>  	return NULL;
>  }
>  
> @@ -1370,32 +1402,6 @@ static guint resume_bap(struct media_transport *transport,
>  	return id;
>  }
>  
> -static void bap_stop_complete(struct bt_bap_stream *stream,
> -					uint8_t code, uint8_t reason,
> -					void *user_data)
> -{
> -	struct media_owner *owner = user_data;
> -	struct media_request *req = owner->pending;
> -	struct media_transport *transport = owner->transport;
> -
> -	/* Release always succeeds */
> -	if (req) {
> -		req->id = 0;
> -		media_request_reply(req, 0);
> -		media_owner_remove(owner);
> -	}
> -
> -	transport_set_state(transport, TRANSPORT_STATE_IDLE);
> -	media_transport_remove_owner(transport);
> -}
> -
> -static void bap_disable_complete(struct bt_bap_stream *stream,
> -					uint8_t code, uint8_t reason,
> -					void *user_data)
> -{
> -	bap_stop_complete(stream, code, reason, user_data);
> -}
> -
>  static guint suspend_bap(struct media_transport *transport,
>  				struct media_owner *owner)
>  {
> @@ -1499,9 +1505,12 @@ static void bap_state_changed(struct bt_bap_stream *stream, uint8_t old_state,
>  			return;
>  		break;
>  	case BT_BAP_STREAM_STATE_STREAMING:
> -		if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)

This change is maybe not intended, seems to run update_bcast_qos also
for ucast?

>  			bap_update_bcast_qos(transport);
>  		break;
> +	case BT_BAP_STREAM_STATE_RELEASING:
> +		if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SINK)
> +			return;
> +		break;
>  	}
>  
>  	io = bt_bap_stream_get_io(stream);





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux