OsStatus mpStartTasks(void) { if (OS_SUCCESS != dmaStartup(MpMisc.frameSamples)) { return OS_TASK_NOT_STARTED; } if (OS_SUCCESS != startNetInTask()) { return OS_TASK_NOT_STARTED; } return OS_SUCCESS; }
// audio buffer grows if there aren't enough buffers OsStatus mpStartUp() { MpMisc.m_audioSamplesPerSec = SAMPLES_PER_SECOND; MpMisc.m_audioSamplesPerFrame = SAMPLES_PER_FRAME; // Create buffer for audio data in mediagraph MpMisc.m_pRawAudioPool = new MpBufPool(MpMisc.m_audioSamplesPerFrame*sizeof(MpAudioSample) + MpArrayBuf::getHeaderSize(), DEFAULT_INITIAL_AUDIO_BUFFERS); // Create buffer for audio headers int audioBuffers = MpMisc.m_pRawAudioPool->getNumBlocks(); MpMisc.m_pAudioHeadersPool = new MpBufPool(sizeof(MpAudioBuf), audioBuffers); MpAudioBuf::smpDefaultPool = MpMisc.m_pAudioHeadersPool; /* * Go get a buffer and fill with silence. We will use this for muting * either or both of input and output, and whenever we are starved for * audio data. */ MpAudioBufPtr sb = MpMisc.m_pRawAudioPool->getBuffer(); if (!sb.isValid()) { return OS_FAILED; } sb->setSamplesNumber(MpMisc.m_audioSamplesPerFrame); memset(sb->getSamplesWritePtr(), 0, sb->getSamplesNumber()*sizeof(MpAudioSample)); sb->setSpeechType(MP_SPEECH_SILENT); MpMisc.m_fgSilence = sb; // Create buffer for RTP packets MpMisc.m_pRtpPool = new MpBufPool(RTP_MTU + MpArrayBuf::getHeaderSize(), RTP_BUFS); // Create buffer for RTCP packets MpMisc.m_pRtcpPool = new MpBufPool(RTCP_MTU + MpArrayBuf::getHeaderSize(), RTCP_BUFS); // Create buffer for RTP and RTCP headers MpMisc.m_pRtpHeadersPool = new MpBufPool(sizeof(MpRtpBuf), MpMisc.m_pRtpPool->getNumBlocks() + MpMisc.m_pRtcpPool->getNumBlocks()); MpRtpBuf::smpDefaultPool = MpMisc.m_pRtpHeadersPool; // Create buffer for UDP packets MpMisc.m_pUdpPool = new MpBufPool(UDP_MTU + MpArrayBuf::getHeaderSize(), UDP_BUFS); // Create buffer for UDP packet headers MpMisc.m_pUdpHeadersPool = new MpBufPool(sizeof(MpUdpBuf), MpMisc.m_pUdpPool->getNumBlocks()); MpUdpBuf::smpDefaultPool = MpMisc.m_pUdpHeadersPool; // create queue for echo canceller MpMisc.m_pEchoQ = new OsMsgQ(ECHO_BUFFER_Q_LEN); #ifndef DISABLE_LOCAL_AUDIO // create audio driver manager, which creates audio driver if (!MpAudioDriverManager::getInstance(TRUE)) { return OS_FAILED; } #endif // start media task if (!MpMediaTask::getMediaTask()) { return OS_TASK_NOT_STARTED; } // start netintask if (startNetInTask() != OS_SUCCESS) { return OS_TASK_NOT_STARTED; } return OS_SUCCESS; }