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

Commit 66cb6df0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "leaudio: Yet another optimisation on max CIS needed" into tm-qpr-dev

parents fdeea5ab 1d8400fb
Loading
Loading
Loading
Loading
+22 −4
Original line number Diff line number Diff line
@@ -973,10 +973,19 @@ bool LeAudioDeviceGroup::CigAssignCisIds(LeAudioDevice* leAudioDevice) {
        cis_id = GetFirstFreeCisId(CisType::CIS_TYPE_UNIDIRECTIONAL_SINK);
      }

      if (cis_id == kInvalidCisId) {
        LOG_WARN(
            " Unable to get free Uni-Directional Sink CIS ID - maybe there is "
            "bi-directional available");
        /* This could happen when scenarios for given context type allows for
         * Sink and Source configuration but also only Sink configuration.
         */
        cis_id = GetFirstFreeCisId(CisType::CIS_TYPE_BIDIRECTIONAL);
        if (cis_id == kInvalidCisId) {
          LOG_ERROR("Unable to get free Uni-Directional Sink CIS ID");
          return false;
        }
      }

      ase->cis_id = cis_id;
      cises_[cis_id].addr = leAudioDevice->address_;
@@ -993,10 +1002,19 @@ bool LeAudioDeviceGroup::CigAssignCisIds(LeAudioDevice* leAudioDevice) {
      cis_id = GetFirstFreeCisId(CisType::CIS_TYPE_UNIDIRECTIONAL_SOURCE);
    }

    if (cis_id == kInvalidCisId) {
      /* This could happen when scenarios for given context type allows for
       * Sink and Source configuration but also only Sink configuration.
       */
      LOG_WARN(
          "Unable to get free Uni-Directional Source CIS ID - maybe there "
          "is bi-directional available");
      cis_id = GetFirstFreeCisId(CisType::CIS_TYPE_BIDIRECTIONAL);
      if (cis_id == kInvalidCisId) {
        LOG_ERROR("Unable to get free Uni-Directional Source CIS ID");
        return false;
      }
    }

    ase->cis_id = cis_id;
    cises_[cis_id].addr = leAudioDevice->address_;
+28 −0
Original line number Diff line number Diff line
@@ -109,10 +109,38 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs,
                              : 0;

    *cis_count_bidir = std::max(bidir_count, *cis_count_bidir);

    /* Check if we can reduce a number of unicast CISes in case bidirectional
     * are use in other or this scenario */
    if (bidir_count < *cis_count_bidir) {
      /* Since we already have bidirectional cises available from other
       * scenarios, let's decrease number of unicast sinks in this scenario.
       */
      uint8_t available_bidir = *cis_count_bidir - bidir_count;
      unidir_sink_count =
          unidir_sink_count - std::min(unidir_sink_count, available_bidir);
      unidir_source_count =
          unidir_source_count - std::min(unidir_source_count, available_bidir);
    } else if (bidir_count > *cis_count_bidir) {
      /* Lets decrease number of the unicast cises from previouse scenarios */
      uint8_t available_bidir = bidir_count - *cis_count_bidir;
      *cis_count_unidir_sink =
          *cis_count_unidir_sink -
          std::min(*cis_count_unidir_sink, available_bidir);
      *cis_count_unidir_source =
          *cis_count_unidir_source -
          std::min(*cis_count_unidir_source, available_bidir);
    }

    *cis_count_unidir_sink =
        std::max(unidir_sink_count, *cis_count_unidir_sink);
    *cis_count_unidir_source =
        std::max(unidir_source_count, *cis_count_unidir_source);

    LOG_INFO(
        "Intermediate step:  Bi-Directional: %d,"
        " Uni-Directional Sink: %d, Uni-Directional Source: %d ",
        *cis_count_bidir, *cis_count_unidir_sink, *cis_count_unidir_source);
  }

  LOG_INFO(