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

Commit c38e6ae4 authored by Chia-chi Yeh's avatar Chia-chi Yeh Committed by Android Git Automerger
Browse files

am 274e3b5d: Merge "RTP: Start AudioRecord before AudioTrack to avoid being...

am 274e3b5d: Merge "RTP: Start AudioRecord before AudioTrack to avoid being disabled." into gingerbread

Merge commit '274e3b5d' into gingerbread-plus-aosp

* commit '274e3b5d':
  RTP: Start AudioRecord before AudioTrack to avoid being disabled.
parents de12c3cf 274e3b5d
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -776,11 +776,14 @@ bool AudioGroup::DeviceThread::threadLoop()
    char c;
    while (recv(deviceSocket, &c, 1, MSG_DONTWAIT) == 1);

    // Start your engine!
    track.start();
    // Start AudioRecord before AudioTrack. This prevents AudioTrack from being
    // disabled due to buffer underrun while waiting for AudioRecord.
    if (mode != MUTED) {
        record.start();
        int16_t one;
        record.read(&one, sizeof(one));
    }
    track.start();

    while (!exitPending()) {
        int16_t output[sampleCount];
@@ -806,34 +809,30 @@ bool AudioGroup::DeviceThread::threadLoop()
                    track.releaseBuffer(&buffer);
                } else if (status != TIMED_OUT && status != WOULD_BLOCK) {
                    LOGE("cannot write to AudioTrack");
                    break;
                    return true;
                }
            }

            if (toRead > 0) {
                AudioRecord::Buffer buffer;
                buffer.frameCount = record.frameCount();
                buffer.frameCount = toRead;

                status_t status = record.obtainBuffer(&buffer, 1);
                if (status == NO_ERROR) {
                    int count = ((int)buffer.frameCount < toRead) ?
                            buffer.frameCount : toRead;
                    memcpy(&input[sampleCount - toRead], buffer.i8, count * 2);
                    toRead -= count;
                    if (buffer.frameCount < record.frameCount()) {
                        buffer.frameCount = count;
                    }
                    int offset = sampleCount - toRead;
                    memcpy(&input[offset], buffer.i8, buffer.size);
                    toRead -= buffer.frameCount;
                    record.releaseBuffer(&buffer);
                } else if (status != TIMED_OUT && status != WOULD_BLOCK) {
                    LOGE("cannot read from AudioRecord");
                    break;
                    return true;
                }
            }
        }

        if (chances <= 0) {
            LOGE("device loop timeout");
            break;
            LOGW("device loop timeout");
            while (recv(deviceSocket, &c, 1, MSG_DONTWAIT) == 1);
        }

        if (mode != MUTED) {