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

Commit 4e90fa8e authored by Alice Kuo's avatar Alice Kuo Committed by Automerger Merge Worker
Browse files

Merge "Add A2dp decode software and offload session type" am: 0dac5667 am: 67fa92a1

parents 225debfd 67fa92a1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -44,4 +44,6 @@ enum SessionType {
  LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH = 7,
  LE_AUDIO_BROADCAST_SOFTWARE_ENCODING_DATAPATH = 8,
  LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH = 9,
  A2DP_SOFTWARE_DECODING_DATAPATH = 10,
  A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH = 11,
}
+8 −0
Original line number Diff line number Diff line
@@ -62,4 +62,12 @@ enum SessionType {
     * Audio broadcast channels. This is a control path only.
     */
    LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH,
    /**
     * A2DP legacy that AVDTP media is decoded by Bluetooth Stack
     */
    A2DP_SOFTWARE_DECODING_DATAPATH,
    /**
     * The decoding of AVDTP media is done by HW and there is control only
     */
    A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH,
}
+9 −1
Original line number Diff line number Diff line
@@ -28,10 +28,18 @@ namespace hardware {
namespace bluetooth {
namespace audio {

A2dpOffloadAudioProvider::A2dpOffloadAudioProvider() {
A2dpOffloadEncodingAudioProvider::A2dpOffloadEncodingAudioProvider()
    : A2dpOffloadAudioProvider() {
  session_type_ = SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH;
}

A2dpOffloadDecodingAudioProvider::A2dpOffloadDecodingAudioProvider()
    : A2dpOffloadAudioProvider() {
  session_type_ = SessionType::A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH;
}

A2dpOffloadAudioProvider::A2dpOffloadAudioProvider() {}

bool A2dpOffloadAudioProvider::isValid(const SessionType& session_type) {
  return (session_type == session_type_);
}
+10 −0
Original line number Diff line number Diff line
@@ -40,6 +40,16 @@ class A2dpOffloadAudioProvider : public BluetoothAudioProvider {
  ndk::ScopedAStatus onSessionReady(DataMQDesc* _aidl_return) override;
};

class A2dpOffloadEncodingAudioProvider : public A2dpOffloadAudioProvider {
 public:
  A2dpOffloadEncodingAudioProvider();
};

class A2dpOffloadDecodingAudioProvider : public A2dpOffloadAudioProvider {
 public:
  A2dpOffloadDecodingAudioProvider();
};

}  // namespace audio
}  // namespace bluetooth
}  // namespace hardware
+10 −1
Original line number Diff line number Diff line
@@ -40,6 +40,16 @@ static constexpr uint32_t kBufferSize = kRtpFrameSize * kRtpFrameCount;
static constexpr uint32_t kBufferCount = 2;  // double buffer
static constexpr uint32_t kDataMqSize = kBufferSize * kBufferCount;

A2dpSoftwareEncodingAudioProvider::A2dpSoftwareEncodingAudioProvider()
    : A2dpSoftwareAudioProvider() {
  session_type_ = SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH;
}

A2dpSoftwareDecodingAudioProvider::A2dpSoftwareDecodingAudioProvider()
    : A2dpSoftwareAudioProvider() {
  session_type_ = SessionType::A2DP_SOFTWARE_DECODING_DATAPATH;
}

A2dpSoftwareAudioProvider::A2dpSoftwareAudioProvider()
    : BluetoothAudioProvider(), data_mq_(nullptr) {
  LOG(INFO) << __func__ << " - size of audio buffer " << kDataMqSize
@@ -48,7 +58,6 @@ A2dpSoftwareAudioProvider::A2dpSoftwareAudioProvider()
      new DataMQ(kDataMqSize, /* EventFlag */ true));
  if (data_mq && data_mq->isValid()) {
    data_mq_ = std::move(data_mq);
    session_type_ = SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH;
  } else {
    ALOGE_IF(!data_mq, "failed to allocate data MQ");
    ALOGE_IF(data_mq && !data_mq->isValid(), "data MQ is invalid");
Loading