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

Commit f36af7e6 authored by More Kuo's avatar More Kuo Committed by Gerrit Code Review
Browse files

Merge "Fix race condition for dynamic audio buffer capabilities"

parents 86b13b04 a39a774a
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);
  }