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

Commit da7970fc authored by Weichin Weng's avatar Weichin Weng Committed by Gerrit Code Review
Browse files

Merge "Hearing Aid: Combine audio from stereo to mono when only one side connect"

parents a6197615 5495a0ab
Loading
Loading
Loading
Loading
+28 −14
Original line number Diff line number Diff line
@@ -852,20 +852,6 @@ class HearingAidImpl : public HearingAid {
    if (num_samples % 2 != 0)
      LOG(FATAL) << "num_samples is not even: " << num_samples;

    std::vector<uint16_t> chan_left;
    std::vector<uint16_t> chan_right;
    // TODO: encode data into G.722 left/right or mono.
    for (int i = 0; i < num_samples; i++) {
      const uint8_t* sample = data.data() + i * 4;

      uint16_t left = (int16_t)((*(sample + 1) << 8) + *sample) >> 1;
      chan_left.push_back(left);

      sample += 2;
      uint16_t right = (int16_t)((*(sample + 1) << 8) + *sample) >> 1;
      chan_right.push_back(right);
    }

    // TODO: we should cache left/right and current state, instad of recomputing
    // it for each packet, 100 times a second.
    HearingDevice* left = nullptr;
@@ -885,6 +871,34 @@ class HearingAidImpl : public HearingAid {
      return;
    }

    std::vector<uint16_t> chan_left;
    std::vector<uint16_t> chan_right;
    if (left == nullptr || right == nullptr) {
      for (int i = 0; i < num_samples; i++) {
        const uint8_t* sample = data.data() + i * 4;

        int16_t left = (int16_t)((*(sample + 1) << 8) + *sample) >> 1;

        sample += 2;
        int16_t right = (int16_t)((*(sample + 1) << 8) + *sample) >> 1;

        uint16_t mono_data = (int16_t)(((uint32_t)left + (uint32_t)right) >> 1);
        chan_left.push_back(mono_data);
        chan_right.push_back(mono_data);
      }
    } else {
      for (int i = 0; i < num_samples; i++) {
        const uint8_t* sample = data.data() + i * 4;

        uint16_t left = (int16_t)((*(sample + 1) << 8) + *sample) >> 1;
        chan_left.push_back(left);

        sample += 2;
        uint16_t right = (int16_t)((*(sample + 1) << 8) + *sample) >> 1;
        chan_right.push_back(right);
      }
    }

    // TODO: monural, binarual check

    // divide encoded data into packets, add header, send.