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

Commit eca6e329 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 am: 498cb041

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ibc5b9b120364662068f289969a4441ff4ad16628
parents 3dc33d7c 498cb041
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);
  }