RTP: prevent buffer overflow in AudioRecord.

This change simply reduces the receive timeout of DeviceSocket. It works
because AudioRecord will block us till there is enough data, which makes
AudioSocket overlap AudioRecord.

Change-Id: I4700224fb407e148ef359a9d99279e10240128d0
This commit is contained in:
Chia-chi Yeh
2010-09-08 09:56:02 +08:00
parent dc296b0d4b
commit 557b04de23

View File

@@ -588,7 +588,7 @@ bool AudioGroup::set(int sampleRate, int sampleCount)
// Give device socket a reasonable timeout and buffer size.
timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 1000 * sampleCount / sampleRate * 1000;
tv.tv_usec = 1000 * sampleCount / sampleRate * 500;
if (setsockopt(pair[0], SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) ||
setsockopt(pair[0], SOL_SOCKET, SO_RCVBUF, &output, sizeof(output)) ||
setsockopt(pair[1], SOL_SOCKET, SO_SNDBUF, &output, sizeof(output))) {
@@ -793,7 +793,7 @@ bool AudioGroup::deviceLoop()
status_t status = mRecord.obtainBuffer(&buffer, 1);
if (status == NO_ERROR) {
int count = (buffer.frameCount < toRead) ?
int count = ((int)buffer.frameCount < toRead) ?
buffer.frameCount : toRead;
memcpy(&input[mSampleCount - toRead], buffer.i8, count * 2);
toRead -= count;