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

Commit 975116d1 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add audio configuration API and the callback function for bluetooth.audo@2.2" am: e944c853

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1934259

Change-Id: Ibec15248923f9852c915abbea4a8c6b255164ee6
parents 85d99bc8 e944c853
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -59,4 +59,14 @@ interface IBluetoothAudioProvider extends @2.1::IBluetoothAudioProvider {
     */
     */
    startSession_2_2(IBluetoothAudioPort hostIf, AudioConfiguration audioConfig)
    startSession_2_2(IBluetoothAudioPort hostIf, AudioConfiguration audioConfig)
                generates (Status status, fmq_sync<uint8_t> dataMQ);
                generates (Status status, fmq_sync<uint8_t> dataMQ);

    /**
     * Called when the audio configuration of the stream has been changed.
     *
     * @param audioConfig The audio configuration negotiated with the remote
     *    device. The PCM parameters are set if software based encoding,
     *    otherwise the correct codec configuration is used for hardware
     *    encoding.
     */
    updateAudioConfiguration(AudioConfiguration audioConfig);
};
};
+23 −0
Original line number Original line Diff line number Diff line
@@ -186,6 +186,29 @@ Return<void> BluetoothAudioProvider::endSession() {
  return Void();
  return Void();
}
}


Return<void> BluetoothAudioProvider::updateAudioConfiguration(
    const AudioConfiguration& audioConfig) {
  LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_);

  if (stack_iface_ == nullptr) {
    LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
              << " has NO session";
    return Void();
  }

  if (audioConfig.getDiscriminator() != audio_config_.getDiscriminator()) {
    LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
              << " audio config type is not match";
    return Void();
  }

  audio_config_ = audioConfig;
  BluetoothAudioSessionReport_2_2::ReportAudioConfigChanged(session_type_,
                                                            audio_config_);

  return Void();
}

}  // namespace implementation
}  // namespace implementation
}  // namespace V2_2
}  // namespace V2_2
}  // namespace audio
}  // namespace audio
+2 −0
Original line number Original line Diff line number Diff line
@@ -53,6 +53,8 @@ class BluetoothAudioProvider : public IBluetoothAudioProvider {
  Return<void> streamStarted(BluetoothAudioStatus status) override;
  Return<void> streamStarted(BluetoothAudioStatus status) override;
  Return<void> streamSuspended(BluetoothAudioStatus status) override;
  Return<void> streamSuspended(BluetoothAudioStatus status) override;
  Return<void> endSession() override;
  Return<void> endSession() override;
  Return<void> updateAudioConfiguration(
      const AudioConfiguration& audioConfig) override;


 protected:
 protected:
  sp<BluetoothAudioDeathRecipient> death_recipient_;
  sp<BluetoothAudioDeathRecipient> death_recipient_;
+21 −3
Original line number Original line Diff line number Diff line
@@ -48,20 +48,38 @@ class BluetoothAudioSessionControl_2_2 {
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
    if (session_ptr != nullptr) {
    if (session_ptr != nullptr) {
      return session_ptr->GetAudioSession()->RegisterStatusCback(cbacks);
      PortStatusCallbacks_2_2 cb = {
          .control_result_cb_ = cbacks.control_result_cb_,
          .session_changed_cb_ = cbacks.session_changed_cb_,
          .audio_configuration_changed_cb_ = nullptr};
      return session_ptr->RegisterStatusCback(cb);
    }
    return kObserversCookieUndefined;
  }

  // The control API helps the bluetooth_audio module to register
  // PortStatusCallbacks_2_2
  // @return: cookie - the assigned number to this bluetooth_audio output
  static uint16_t RegisterControlResultCback(
      const SessionType_2_1& session_type,
      const PortStatusCallbacks_2_2& cbacks) {
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
    if (session_ptr != nullptr) {
      return session_ptr->RegisterStatusCback(cbacks);
    }
    }
    return kObserversCookieUndefined;
    return kObserversCookieUndefined;
  }
  }


  // The control API helps the bluetooth_audio module to unregister
  // The control API helps the bluetooth_audio module to unregister
  // PortStatusCallbacks
  // PortStatusCallbacks and PortStatusCallbacks_2_2
  // @param: cookie - indicates which bluetooth_audio output is
  // @param: cookie - indicates which bluetooth_audio output is
  static void UnregisterControlResultCback(const SessionType_2_1& session_type,
  static void UnregisterControlResultCback(const SessionType_2_1& session_type,
                                           uint16_t cookie) {
                                           uint16_t cookie) {
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
    if (session_ptr != nullptr) {
    if (session_ptr != nullptr) {
      session_ptr->GetAudioSession()->UnregisterStatusCback(cookie);
      session_ptr->UnregisterStatusCback(cookie);
    }
    }
  }
  }


+14 −1
Original line number Original line Diff line number Diff line
@@ -60,7 +60,20 @@ class BluetoothAudioSessionReport_2_2 {
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
    if (session_ptr != nullptr) {
    if (session_ptr != nullptr) {
      session_ptr->GetAudioSession()->ReportControlStatus(start_resp, status);
      session_ptr->ReportControlStatus(start_resp, status);
    }
  }
  // The API reports the Bluetooth stack has replied the changed of the audio
  // configuration, and will inform registered bluetooth_audio outputs
  static void ReportAudioConfigChanged(
      const ::android::hardware::bluetooth::audio::V2_1::SessionType&
          session_type,
      const ::android::hardware::bluetooth::audio::V2_2::AudioConfiguration&
          audio_config) {
    std::shared_ptr<BluetoothAudioSession_2_2> session_ptr =
        BluetoothAudioSessionInstance_2_2::GetSessionInstance(session_type);
    if (session_ptr != nullptr) {
      session_ptr->ReportAudioConfigChanged(audio_config);
    }
    }
  }
  }
};
};
Loading