globals.read_frame.datalen = samples * 2;
globals.read_frame.samples = samples;
- switch_core_timer_check(&globals.timer, SWITCH_TRUE);
+ //switch_core_timer_check(&globals.timer, SWITCH_TRUE);
*frame = &globals.read_frame;
if (!switch_test_flag((&globals), GFLAG_MOUTH)) {
{
long bytesRead;
char *p = (char *) data;
- long numBytes = aStream->bytesPerFrame * numFrames;
+ long avail, readBytes = 0, numBytes = aStream->bytesPerFrame * numFrames;
while (numBytes > 0) {
- bytesRead = PaUtil_ReadRingBuffer(&aStream->inFIFO, p, numBytes);
- numBytes -= bytesRead;
+ avail = PaUtil_GetRingBufferReadAvailable(&aStream->inFIFO);
+
+ if (avail >= numBytes * 10) {
+ PaUtil_FlushRingBuffer(&aStream->inFIFO);
+ avail = 0;
+ }
+
+ if (avail >= numBytes) {
+ bytesRead = PaUtil_ReadRingBuffer(&aStream->inFIFO, p, numBytes);
+ numBytes -= bytesRead;
+ readBytes += bytesRead;
+ }
+
if (numBytes > 0) {
if (switch_core_timer_check(timer, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
- PaUtil_FlushRingBuffer(&aStream->inFIFO);
- return 0;
+ break;
}
switch_yield(1000);
+ p += bytesRead;
}
}
- return numFrames;
+
+ if (readBytes) {
+ switch_core_timer_sync(timer);
+ }
+
+ return readBytes / aStream->bytesPerFrame;
}
/************************************************************