⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspaudioout.cpp

📁 KphoneSI (kpsi) is a SIP (Session Initiation Protocol) user agent for Linux, with which you can in
💻 CPP
字号:
#include <stdio.h>#include <assert.h>#include <unistd.h>#include "../config.h"#include "audiobuffer.h"#include "dspout.h"#include "dspoutrtp.h"#include "dspaudioout.h"DspAudioOut::DspAudioOut( DspOut *in, DspOut *out )	: DspAudio( in, out ){	curpos = 0;}DspAudioOut::~DspAudioOut( void ){}void DspAudioOut::timerTick( void ){	if( broken ){		printf("(b)");		fflush(stdout);		return;	}	short *curbuf;	unsigned int outputsize = output->getBuffer().getSize() / sizeof( short );	if ( !broken ) {		int numBytes;		if( input->getDeviceState() == DspOut::DeviceClosed ) {			return;		}		numBytes = input->readableBytes();		unsigned int samplesleft = input->getBuffer().getSize() / sizeof( short );		short *inbuf = (short *)input->getBuffer().getData();		if (numBytes > 0) {			input->readBuffer( numBytes );		}		if (!numBytes) {			if (!currentTone && !newTone) {				return;			}		} else if (dtmfSamples > 0) { // This is complete bullshit. dtmfSamples can never have a value other than 0			if (dtmfSamples - samplesleft > 0) {				dtmfSamples -= 80;				return;			} else {				inbuf += dtmfSamples;				samplesleft -= dtmfSamples;				dtmfSamples = 0;			}		}		while( samplesleft > 0 ) {			if( isCanceled() ) break;			if( samplesleft >= ( outputsize - curpos ) ) {				curbuf = (short *) copybuffer.getData();				curbuf += curpos;				if (!generateDTMF(curbuf, outputsize - curpos)) {					memcpy( curbuf, inbuf, ( outputsize - curpos ) * sizeof( short ) );				}				memcpy( output->getBuffer().getData(), copybuffer.getData(),					output->getBuffer().getSize() );				// If the write fails, mark the pipe as broken and stop sending!				if( !output->writeBuffer() ) {					printf( QObject::tr("DspAudio: Broken pipe") + "\n" );					broken = true;				}				samplesleft -= ( outputsize - curpos );				inbuf += ( outputsize - curpos );				curpos = 0;			} else {				curbuf = (short *) copybuffer.getData();				curbuf += curpos;				if (!generateDTMF(curbuf, samplesleft)) {					memcpy( curbuf, inbuf, samplesleft * sizeof( short ) );				}				curpos += samplesleft;				samplesleft = 0;			}		}	}}#ifndef QT_THREAD_SUPPORTvoid DspAudioOut::start( void ){	timer = new QTimer();	connect( timer, SIGNAL( timeout() ), this, SLOT( timeout() ) );	timer->start( 1 );}void DspAudioOut::timeout(){	timerTick();}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -