Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 498cb041 authored by More Kuo's avatar More Kuo Committed by Automerger Merge Worker
Browse files

Merge "Fix race condition for dynamic audio buffer capabilities" am: f36af7e6

Original change: https://android-review.googlesource.com/c/platform/system/bt/+/1563452

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I59aae34bebf6ad436731ebcb2fdeab5bcb234520
parents 0298e765 f36af7e6
Loading
Loading
Loading
Loading
+38 −52
Original line number Diff line number Diff line
@@ -268,55 +268,6 @@ static bool btif_is_a2dp_offload_enabled() {
  return a2dp_offload_enabled_;
}

void btif_dynamic_audio_buffer_init() {
  LOG_INFO("%s entered", __func__);

  char buf[512];
  bt_property_t prop;
  prop.type = BT_PROPERTY_DYNAMIC_AUDIO_BUFFER;
  prop.val = (void*)buf;

  bt_dynamic_audio_buffer_item_t dynamic_audio_buffer_item;
  prop.len = sizeof(bt_dynamic_audio_buffer_item_t);
  LOG_DEBUG("%s prop.len = %d", __func__, prop.len);

  tBTM_BLE_VSC_CB cmn_vsc_cb;
  BTM_BleGetVendorCapabilities(&cmn_vsc_cb);

  if (btif_is_a2dp_offload_enabled() == false) {
    BTIF_TRACE_DEBUG("%s Get buffer time for A2DP software encoding", __func__);
    for (int i = 0; i < CODEC_TYPE_NUMBER; i++) {
      dynamic_audio_buffer_item.dab_item[i] = {
          .default_buffer_time = DEFAULT_BUFFER_TIME,
          .maximum_buffer_time = MAXIMUM_BUFFER_TIME,
          .minimum_buffer_time = MINIMUM_BUFFER_TIME};
    }
    memcpy(prop.val, &dynamic_audio_buffer_item, prop.len);
    invoke_adapter_properties_cb(BT_STATUS_SUCCESS, 1, &prop);
  } else {
    if (cmn_vsc_cb.dynamic_audio_buffer_support != 0) {
      BTIF_TRACE_DEBUG("%s Get buffer time for A2DP Offload", __func__);
      tBTM_BT_DYNAMIC_AUDIO_BUFFER_CB
          bt_dynamic_audio_buffer_cb[CODEC_TYPE_NUMBER];
      BTM_BleGetDynamicAudioBuffer(bt_dynamic_audio_buffer_cb);

      for (int i = 0; i < CODEC_TYPE_NUMBER; i++) {
        dynamic_audio_buffer_item.dab_item[i] = {
            .default_buffer_time =
                bt_dynamic_audio_buffer_cb[i].default_buffer_time,
            .maximum_buffer_time =
                bt_dynamic_audio_buffer_cb[i].maximum_buffer_time,
            .minimum_buffer_time =
                bt_dynamic_audio_buffer_cb[i].minimum_buffer_time};
      }
      memcpy(prop.val, &dynamic_audio_buffer_item, prop.len);
      invoke_adapter_properties_cb(BT_STATUS_SUCCESS, 1, &prop);
    } else {
      BTIF_TRACE_DEBUG("%s Don't support Dynamic Audio Buffer", __func__);
    }
  }
}

/*******************************************************************************
 *
 * Function         btif_enable_bluetooth_evt
@@ -363,9 +314,6 @@ void btif_enable_bluetooth_evt() {
  /* init pan */
  btif_pan_init();

  /* init dynamic audio buffer */
  btif_dynamic_audio_buffer_init();

  /* load did configuration */
  bte_load_did_conf(BTE_DID_CONF_FILE);

@@ -653,6 +601,44 @@ void btif_get_adapter_property(bt_property_type_t type) {
    local_le_features.debug_logging_supported =
        cmn_vsc_cb.debug_logging_supported > 0;
    memcpy(prop.val, &local_le_features, prop.len);
  } else if (prop.type == BT_PROPERTY_DYNAMIC_AUDIO_BUFFER) {
    tBTM_BLE_VSC_CB cmn_vsc_cb;
    bt_dynamic_audio_buffer_item_t dynamic_audio_buffer_item;

    BTM_BleGetVendorCapabilities(&cmn_vsc_cb);

    prop.len = sizeof(bt_dynamic_audio_buffer_item_t);
    if (btif_is_a2dp_offload_enabled() == false) {
      BTIF_TRACE_DEBUG("%s Get buffer millis for A2DP software encoding",
                       __func__);
      for (int i = 0; i < CODEC_TYPE_NUMBER; i++) {
        dynamic_audio_buffer_item.dab_item[i] = {
            .default_buffer_time = DEFAULT_BUFFER_TIME,
            .maximum_buffer_time = MAXIMUM_BUFFER_TIME,
            .minimum_buffer_time = MINIMUM_BUFFER_TIME};
      }
      memcpy(prop.val, &dynamic_audio_buffer_item, prop.len);
    } else {
      if (cmn_vsc_cb.dynamic_audio_buffer_support != 0) {
        BTIF_TRACE_DEBUG("%s Get buffer millis for A2DP Offload", __func__);
        tBTM_BT_DYNAMIC_AUDIO_BUFFER_CB
            bt_dynamic_audio_buffer_cb[CODEC_TYPE_NUMBER];
        BTM_BleGetDynamicAudioBuffer(bt_dynamic_audio_buffer_cb);

        for (int i = 0; i < CODEC_TYPE_NUMBER; i++) {
          dynamic_audio_buffer_item.dab_item[i] = {
              .default_buffer_time =
                  bt_dynamic_audio_buffer_cb[i].default_buffer_time,
              .maximum_buffer_time =
                  bt_dynamic_audio_buffer_cb[i].maximum_buffer_time,
              .minimum_buffer_time =
                  bt_dynamic_audio_buffer_cb[i].minimum_buffer_time};
        }
        memcpy(prop.val, &dynamic_audio_buffer_item, prop.len);
      } else {
        BTIF_TRACE_DEBUG("%s Don't support Dynamic Audio Buffer", __func__);
      }
    }
  } else {
    status = btif_storage_get_adapter_property(&prop);
  }