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

Commit b9649f72 authored by Cheney Ni's avatar Cheney Ni Committed by android-build-merger
Browse files

Merge "Release encoder state when cleaning up the hearing aids instance"

am: 6ed8eca4

Change-Id: Iebef7301770d31cd38df3007b49aa52873aa0e29
parents f91350ed 6ed8eca4
Loading
Loading
Loading
Loading
+24 −14
Original line number Diff line number Diff line
@@ -171,6 +171,24 @@ static void write_rpt_ctl_cfg_cb(uint16_t conn_id, tGATT_STATUS status,
g722_encode_state_t* encoder_state_left = nullptr;
g722_encode_state_t* encoder_state_right = nullptr;

inline void encoder_state_init() {
  if (encoder_state_left != nullptr) {
    LOG(WARNING) << __func__ << ": encoder already initialized";
    return;
  }
  encoder_state_left = g722_encode_init(nullptr, 64000, G722_PACKED);
  encoder_state_right = g722_encode_init(nullptr, 64000, G722_PACKED);
}

inline void encoder_state_release() {
  if (encoder_state_left != nullptr) {
    g722_encode_release(encoder_state_left);
    encoder_state_left = nullptr;
    g722_encode_release(encoder_state_right);
    encoder_state_right = nullptr;
  }
}

class HearingAidImpl : public HearingAid {
 private:
  // Keep track of whether the Audio Service has resumed audio playback
@@ -835,8 +853,7 @@ class HearingAidImpl : public HearingAid {
    VLOG(0) << __func__ << ": device=" << hearingDevice.address;

    if (encoder_state_left == nullptr) {
      encoder_state_left = g722_encode_init(nullptr, 64000, G722_PACKED);
      encoder_state_right = g722_encode_init(nullptr, 64000, G722_PACKED);
      encoder_state_init();
      seq_counter = 0;

      // use the best codec avaliable for this pair of devices.
@@ -898,12 +915,8 @@ class HearingAidImpl : public HearingAid {
    audio_running = true;

    // TODO: shall we also reset the encoder ?
    if (encoder_state_left != nullptr) {
      g722_encode_release(encoder_state_left);
      g722_encode_release(encoder_state_right);
    }
    encoder_state_left = g722_encode_init(nullptr, 64000, G722_PACKED);
    encoder_state_right = g722_encode_init(nullptr, 64000, G722_PACKED);
    encoder_state_release();
    encoder_state_init();
    seq_counter = 0;

    for (auto& device : hearingDevices.devices) {
@@ -991,12 +1004,7 @@ class HearingAidImpl : public HearingAid {

    if (left == nullptr && right == nullptr) {
      HearingAidAudioSource::Stop();
      if (encoder_state_left != nullptr) {
        g722_encode_release(encoder_state_left);
        encoder_state_left = nullptr;
        g722_encode_release(encoder_state_right);
        encoder_state_right = nullptr;
      }
      encoder_state_release();
      current_volume = VOLUME_UNKNOWN;
      return;
    }
@@ -1343,6 +1351,8 @@ class HearingAidImpl : public HearingAid {
    }

    hearingDevices.devices.clear();

    encoder_state_release();
  }

 private: