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

Commit 6ed8eca4 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

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

parents d7bd2fb4 87130fa1
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
@@ -846,8 +864,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.
@@ -909,12 +926,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) {
@@ -1002,12 +1015,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;
    }
@@ -1360,6 +1368,8 @@ class HearingAidImpl : public HearingAid {
    }

    hearingDevices.devices.clear();

    encoder_state_release();
  }

 private: