/* * audio.cxx * * Audio conferencing functions for a simple MCU * * Copyright (c) 2000 Equivalence Pty. Ltd. * Copyright (c) 2004 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written by Post Increment (http://www.postincrement.com) * with the assistance of funding from Citron Networks (http://www.citron.com.tw) * * Portions are Copyright (C) 1993 Free Software Foundation, Inc. * All Rights Reserved. * * Contributor(s): Derek J Smithies (derek@indranet.co.nz) * ------------------------------ * * $Log: audio.cxx,v $ * Revision 2.0 2004/03/08 02:06:24 csoutheren * Totally rewritten to use new connection locking mecahnism * Added ability to monitor conferences * Added initial support for H.323 MCU messages * Thanks to Citron Networks for supporting this work * */ #include #include "main.h" #define MIN_HEADROOM 30 #define MAX_HEADROOM 60 AudioDelay::AudioDelay() { firstTime = TRUE; error = 0; } void AudioDelay::Restart() { firstTime = TRUE; } BOOL AudioDelay::Delay(int frameTime) { if (firstTime) { firstTime = FALSE; previousTime = PTime(); return TRUE; } // add in the new delay error += frameTime; // remove the actual delay since the last call PTime now; PTimeInterval delay = now - previousTime; error -= (int)delay.GetMilliSeconds(); previousTime = now; // if the delay is > 10 ms, then accumulate the error until next time if (error > 10) { #ifdef P_LINUX usleep(error * 1000); #else PThread::Current()->Sleep(error); #endif } //return error <= -frameTime; return FALSE; }