Re: [PATCH BlueZ 3/5] shared/bap: Update stream management to avoid PACs

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

 



Hi Andrei,

On Fri, Apr 19, 2024 at 2:08 PM Andrei Istodorescu
<andrei.istodorescu@xxxxxxx> wrote:
>
> Set the stream to enabling for BAP Broadcast Sink, when the transport is
> acquired.
> Remove PAC logic for BAP Broadcast Sink stream creation.
> ---
>  src/shared/bap.c | 60 +++++-------------------------------------------
>  1 file changed, 6 insertions(+), 54 deletions(-)
>
> diff --git a/src/shared/bap.c b/src/shared/bap.c
> index 36f0b0a3b50a..d7a2f9381c53 100644
> --- a/src/shared/bap.c
> +++ b/src/shared/bap.c
> @@ -2006,7 +2006,7 @@ static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
>                                         void *user_data)
>  {
>         if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)
> -               stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
> +               stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);

There is no Enabling state for Broadcast Stream in BAP:

https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/16212-BAP-html5/out/en/index-en.html#UUID-4a295bf2-6e50-be11-e827-c23e63569087_figure-idm4631863059107233170457600297

>         else
>                 stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
>
> @@ -5287,7 +5287,6 @@ void bt_bap_cancel_select(struct bt_bap_pac *lpac, bt_bap_pac_select_t func,
>
>  static struct bt_bap_stream *bap_bcast_stream_new(struct bt_bap *bap,
>                                         struct bt_bap_pac *lpac,
> -                                       struct bt_bap_pac *rpac,
>                                         struct bt_bap_qos *pqos,
>                                         struct iovec *data)
>  {
> @@ -5298,71 +5297,24 @@ static struct bt_bap_stream *bap_bcast_stream_new(struct bt_bap *bap,
>         if (!bap)
>                 return NULL;
>
> -       if (!rpac && (lpac->type != BT_BAP_BCAST_SOURCE)
> -               && queue_isempty(bap->remote_eps))
> -               return NULL;
> -
> -       if (lpac && rpac) {
> -               if ((rpac->type != BT_BAP_BCAST_SOURCE)
> -                       && (!bap_codec_equal(&lpac->codec, &rpac->codec)))
> -                       return NULL;
> -       } else {
> -               uint8_t type;
> -
> +       if (lpac->type == BT_BAP_BCAST_SOURCE) {
>                 match.lpac = lpac;
> -               match.rpac = rpac;
> +               match.rpac = NULL;
>                 memset(&match.codec, 0, sizeof(match.codec));
>
> -               if (rpac)
> -                       type = rpac->type;
> -               else if (lpac) {
> -                       switch (lpac->type) {
> -                       case BT_BAP_BCAST_SOURCE:
> -                               type = BT_BAP_BCAST_SINK;
> -                               break;
> -                       case BT_BAP_BCAST_SINK:
> -                               type = BT_BAP_BCAST_SOURCE;
> -                               break;
> -                       default:
> -                               return NULL;
> -                       }
> -               } else
> -                       return NULL;
> -
> -               bt_bap_foreach_pac(bap, type, match_pac, &match);
> +               bt_bap_foreach_pac(bap, BT_BAP_BCAST_SINK, match_pac, &match);
>                 if ((!match.lpac) || (!lpac))
>                         return NULL;
> -               if (!match.rpac && (lpac->type != BT_BAP_BCAST_SOURCE))
> -                       return NULL;
>
>                 lpac = match.lpac;
> -               rpac = match.rpac;
> -       }
> -
> -       match.lpac = lpac;
> -       match.rpac = rpac;
>
> -       if (lpac->type != BT_BAP_BCAST_SOURCE) {
> -               /* Check for existing stream */
> -               ep = queue_find(bap->remote_eps, find_ep_pacs, &match);
> -               if (!ep) {
> -                       /* Check for unused ASE */
> -                       ep = queue_find(bap->remote_eps, find_ep_unused,
> -                                       &match);
> -                       if (!ep) {
> -                               DBG(bap, "Unable to find unused ASE");
> -                               return NULL;
> -                       }
> -               }
> -               stream = ep->stream;
> -       } else {
>                 ep = queue_find(bap->remote_eps, find_ep_source, NULL);
>                 if (!ep)
>                         return NULL;
>         }
>
>         if (!stream)
> -               stream = bap_stream_new(bap, ep, lpac, rpac, data, true);
> +               stream = bap_stream_new(bap, ep, lpac, NULL, data, true);
>
>         return stream;
>  }
> @@ -5415,7 +5367,7 @@ struct bt_bap_stream *bt_bap_stream_new(struct bt_bap *bap,
>         if (bt_bap_get_att(bap))
>                 return bap_ucast_stream_new(bap, lpac, rpac, pqos, data);
>
> -       return bap_bcast_stream_new(bap, lpac, rpac, pqos, data);
> +       return bap_bcast_stream_new(bap, lpac, pqos, data);
>  }
>
>  struct bt_bap *bt_bap_stream_get_session(struct bt_bap_stream *stream)
> --
> 2.40.1
>


-- 
Luiz Augusto von Dentz





[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