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

Commit babe71d2 authored by Antoine SOULIER's avatar Antoine SOULIER
Browse files

A2DP HAL Reference Implementation: remove static object's

Test: m
Bug: 315652150
Change-Id: Iff72dbea0b9c9ed78f0a20538c66e9396e13bfe9
parent 1fd5aef4
Loading
Loading
Loading
Loading
+32 −17
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@
#include <android-base/logging.h>

#include "A2dpOffloadCodecAac.h"
#include "A2dpOffloadCodecFactory.h"
#include "A2dpOffloadCodecSbc.h"

namespace aidl {
@@ -32,17 +31,21 @@ namespace hardware {
namespace bluetooth {
namespace audio {

A2dpOffloadEncodingAudioProvider::A2dpOffloadEncodingAudioProvider()
    : A2dpOffloadAudioProvider() {
A2dpOffloadEncodingAudioProvider::A2dpOffloadEncodingAudioProvider(
    const A2dpOffloadCodecFactory& codec_factory)
    : A2dpOffloadAudioProvider(codec_factory) {
  session_type_ = SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH;
}

A2dpOffloadDecodingAudioProvider::A2dpOffloadDecodingAudioProvider()
    : A2dpOffloadAudioProvider() {
A2dpOffloadDecodingAudioProvider::A2dpOffloadDecodingAudioProvider(
    const A2dpOffloadCodecFactory& codec_factory)
    : A2dpOffloadAudioProvider(codec_factory) {
  session_type_ = SessionType::A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH;
}

A2dpOffloadAudioProvider::A2dpOffloadAudioProvider() {}
A2dpOffloadAudioProvider::A2dpOffloadAudioProvider(
    const A2dpOffloadCodecFactory& codec_factory)
    : codec_factory_(codec_factory) {}

bool A2dpOffloadAudioProvider::isValid(const SessionType& session_type) {
  return (session_type == session_type_);
@@ -56,17 +59,29 @@ ndk::ScopedAStatus A2dpOffloadAudioProvider::startSession(
    auto a2dp_config = audio_config.get<AudioConfiguration::Tag::a2dp>();
    A2dpStatus a2dp_status = A2dpStatus::NOT_SUPPORTED_CODEC_TYPE;

    if (a2dp_config.codecId ==
        A2dpOffloadCodecSbc::GetInstance()->GetCodecId()) {
    auto codec = codec_factory_.GetCodec(a2dp_config.codecId);
    if (!codec) {
      LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
                << " - CodecId=" << a2dp_config.codecId.toString()
                << " is not found";
      return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
    }

    if (codec->info.id == CodecId(CodecId::A2dp::SBC)) {
      SbcParameters sbc_parameters;
      a2dp_status = A2dpOffloadCodecSbc::GetInstance()->ParseConfiguration(
          a2dp_config.configuration, &sbc_parameters);

    } else if (a2dp_config.codecId ==
               A2dpOffloadCodecAac::GetInstance()->GetCodecId()) {
      auto codec_sbc =
          std::static_pointer_cast<const A2dpOffloadCodecSbc>(codec);
      a2dp_status = codec_sbc->ParseConfiguration(a2dp_config.configuration,
                                                  &sbc_parameters);

    } else if (codec->info.id == CodecId(CodecId::A2dp::AAC)) {
      AacParameters aac_parameters;
      a2dp_status = A2dpOffloadCodecAac::GetInstance()->ParseConfiguration(
          a2dp_config.configuration, &aac_parameters);

      auto codec_aac =
          std::static_pointer_cast<const A2dpOffloadCodecAac>(codec);
      a2dp_status = codec_aac->ParseConfiguration(a2dp_config.configuration,
                                                  &aac_parameters);
    }
    if (a2dp_status != A2dpStatus::OK) {
      LOG(WARNING) << __func__ << " - Invalid Audio Configuration="
@@ -105,7 +120,7 @@ ndk::ScopedAStatus A2dpOffloadAudioProvider::onSessionReady(
ndk::ScopedAStatus A2dpOffloadAudioProvider::parseA2dpConfiguration(
    const CodecId& codec_id, const std::vector<uint8_t>& configuration,
    CodecParameters* codec_parameters, A2dpStatus* _aidl_return) {
  auto codec = A2dpOffloadCodecFactory::GetInstance()->GetCodec(codec_id);
  auto codec = codec_factory_.GetCodec(codec_id);
  if (!codec) {
    LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_)
              << " - CodecId=" << codec_id.toString() << " is not found";
@@ -124,8 +139,8 @@ ndk::ScopedAStatus A2dpOffloadAudioProvider::getA2dpConfiguration(
  *_aidl_return = std::nullopt;
  A2dpConfiguration avdtp_configuration;

  if (A2dpOffloadCodecFactory::GetInstance()->GetConfiguration(
          remote_a2dp_capabilities, hint, &avdtp_configuration))
  if (codec_factory_.GetConfiguration(remote_a2dp_capabilities, hint,
                                      &avdtp_configuration))
    *_aidl_return =
        std::make_optional<A2dpConfiguration>(std::move(avdtp_configuration));

+8 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#pragma once

#include "A2dpOffloadCodecFactory.h"
#include "BluetoothAudioProvider.h"

namespace aidl {
@@ -26,8 +27,6 @@ namespace audio {

class A2dpOffloadAudioProvider : public BluetoothAudioProvider {
 public:
  A2dpOffloadAudioProvider();

  bool isValid(const SessionType& session_type) override;

  ndk::ScopedAStatus startSession(
@@ -45,18 +44,23 @@ class A2dpOffloadAudioProvider : public BluetoothAudioProvider {
      const A2dpConfigurationHint& hint,
      std::optional<audio::A2dpConfiguration>* _aidl_return) override;

 protected:
  A2dpOffloadAudioProvider(const A2dpOffloadCodecFactory&);

 private:
  const A2dpOffloadCodecFactory& codec_factory_;

  ndk::ScopedAStatus onSessionReady(DataMQDesc* _aidl_return) override;
};

class A2dpOffloadEncodingAudioProvider : public A2dpOffloadAudioProvider {
 public:
  A2dpOffloadEncodingAudioProvider();
  A2dpOffloadEncodingAudioProvider(const A2dpOffloadCodecFactory&);
};

class A2dpOffloadDecodingAudioProvider : public A2dpOffloadAudioProvider {
 public:
  A2dpOffloadDecodingAudioProvider();
  A2dpOffloadDecodingAudioProvider(const A2dpOffloadCodecFactory&);
};

}  // namespace audio
+1 −2
Original line number Diff line number Diff line
@@ -18,10 +18,9 @@

#include <aidl/android/hardware/bluetooth/audio/A2dpStatus.h>
#include <aidl/android/hardware/bluetooth/audio/ChannelMode.h>
#include <aidl/android/hardware/bluetooth/audio/CodecInfo.h>
#include <aidl/android/hardware/bluetooth/audio/CodecParameters.h>

#include "BluetoothAudioProviderFactory.h"

namespace aidl::android::hardware::bluetooth::audio {

class A2dpOffloadCodec {
+0 −5
Original line number Diff line number Diff line
@@ -194,11 +194,6 @@ static ChannelMode GetChannelModeEnum(int channel_mode) {
 * AAC Class implementation
 */

const A2dpOffloadCodecAac* A2dpOffloadCodecAac::GetInstance() {
  static A2dpOffloadCodecAac instance;
  return &instance;
}

A2dpOffloadCodecAac::A2dpOffloadCodecAac()
    : A2dpOffloadCodec(info_),
      info_({.id = CodecId(CodecId::A2dp::AAC), .name = "AAC"}) {
+1 −3
Original line number Diff line number Diff line
@@ -29,14 +29,12 @@ struct AacParameters : public CodecParameters {
class A2dpOffloadCodecAac : public A2dpOffloadCodec {
  CodecInfo info_;

  A2dpOffloadCodecAac();

  A2dpStatus ParseConfiguration(const std::vector<uint8_t>& configuration,
                                CodecParameters* codec_parameters,
                                AacParameters* aac_parameters) const;

 public:
  static const A2dpOffloadCodecAac* GetInstance();
  A2dpOffloadCodecAac();

  A2dpStatus ParseConfiguration(
      const std::vector<uint8_t>& configuration,
Loading