You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kopete/protocols/jabber/jingle/libjingle/talk/session/phone/portaudiomediaengine.h

70 lines
1.5 KiB

#ifndef PORTAUDIOMEDIAENGINE_H
#define PORTAUDIOMEDIAENGINE_H
#include <portaudio.h>
#include <speex.h>
#include <ortp/ortp.h>
#include "talk/session/phone/mediaengine.h"
class PortAudioMediaChannel : public cricket::MediaChannel
{
public:
PortAudioMediaChannel();
virtual ~PortAudioMediaChannel();
virtual void SetCodec(const char *codec);
virtual void OnPacketReceived(const void *data, int len);
virtual void SetPlayout(bool playout);
virtual void SetSend(bool send);
virtual float GetCurrentQuality();
virtual int GetOutputLevel();
void readOutput(float*, int);
void writeInput(float*, int);
protected:
void readBuffer(float*, float**, float*, float*, float*, int);
void writeBuffer(float*, float*, float**, float*, float*, int);
private:
bool mute_;
bool play_;
PortAudioStream* stream_;
// Buffers
float *out_buffer_, *out_buffer_read_, *out_buffer_write_, *out_buffer_end_;
float *in_buffer_, *in_buffer_read_, *in_buffer_write_, *in_buffer_end_;
// Speex
SpeexBits speex_bits_;
void *speex_enc_state_, *speex_dec_state_;
float *speex_frame_;
int speex_frame_size_;
// ORTP
int rtp_socket_;
RtpSession* rtp_session_;
int rtp_timestamp_;
};
class PortAudioMediaEngine : public cricket::MediaEngine
{
public:
PortAudioMediaEngine();
~PortAudioMediaEngine();
virtual bool Init();
virtual void Terminate();
virtual cricket::MediaChannel *CreateChannel();
virtual int SetAudioOptions(int options);
virtual int SetSoundDevices(int wave_in_device, int wave_out_device);
virtual int GetInputLevel();
};
#endif