Skip to content
Snippets Groups Projects
Commit 0f318251 authored by Tristan Matthews's avatar Tristan Matthews
Browse files

* #18668: audiortp: remove duplicated code

parent b9a1978c
No related branches found
No related tags found
No related merge requests found
...@@ -51,6 +51,7 @@ AudioRtpSession::AudioRtpSession(SIPCall &call, ost::RTPDataQueue &queue) : ...@@ -51,6 +51,7 @@ AudioRtpSession::AudioRtpSession(SIPCall &call, ost::RTPDataQueue &queue) :
, remote_ip_() , remote_ip_()
, remote_port_(0) , remote_port_(0)
, timestampCount_(0) , timestampCount_(0)
, rtpSendThread_(*this)
{ {
queue_.setTypeOfService(ost::RTPDataQueue::tosEnhanced); queue_.setTypeOfService(ost::RTPDataQueue::tosEnhanced);
} }
...@@ -268,4 +269,52 @@ void AudioRtpSession::startRtpThreads(const std::vector<AudioCodec*> &audioCodec ...@@ -268,4 +269,52 @@ void AudioRtpSession::startRtpThreads(const std::vector<AudioCodec*> &audioCodec
startSendThread(); startSendThread();
} }
AudioRtpSession::AudioRtpSendThread::AudioRtpSendThread(AudioRtpSession &session) :
running_(false), rtpSession_(session), thread_(0), timer_()
{}
AudioRtpSession::AudioRtpSendThread::~AudioRtpSendThread()
{
running_ = false;
if (thread_)
pthread_join(thread_, NULL);
}
void AudioRtpSession::AudioRtpSendThread::start()
{
running_ = true;
pthread_create(&thread_, NULL, &runCallback, this);
}
void *
AudioRtpSession::AudioRtpSendThread::runCallback(void *data)
{
AudioRtpSession::AudioRtpSendThread *context = static_cast<AudioRtpSession::AudioRtpSendThread*>(data);
context->run();
return NULL;
}
void AudioRtpSession::AudioRtpSendThread::run()
{
timer_.setTimer(rtpSession_.transportRate_);
const int MS_TO_USEC = 1000;
while (running_) {
// Send session
if (rtpSession_.hasDTMFPending())
rtpSession_.sendDtmfEvent();
else
rtpSession_.sendMicData();
usleep(timer_.getTimer() * MS_TO_USEC);
timer_.incTimer(rtpSession_.transportRate_);
}
}
void AudioRtpSession::startSendThread()
{
rtpSendThread_.start();
}
} }
...@@ -86,19 +86,6 @@ class AudioRtpSession : public AudioRtpRecordHandler { ...@@ -86,19 +86,6 @@ class AudioRtpSession : public AudioRtpRecordHandler {
bool onRTPPacketRecv(ost::IncomingRTPPkt&); bool onRTPPacketRecv(ost::IncomingRTPPkt&);
/**
* Send DTMF over RTP (RFC2833). The timestamp and sequence number must be
* incremented as if it was microphone audio. This function change the payload type of the rtp session,
* send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get
* back the codec payload for further audio processing.
*/
void sendDtmfEvent();
/**
* Send encoded data to peer
*/
virtual void sendMicData();
SIPCall &call_; SIPCall &call_;
/** /**
...@@ -121,7 +108,37 @@ class AudioRtpSession : public AudioRtpRecordHandler { ...@@ -121,7 +108,37 @@ class AudioRtpSession : public AudioRtpRecordHandler {
private: private:
NON_COPYABLE(AudioRtpSession); NON_COPYABLE(AudioRtpSession);
virtual void startReceiveThread() = 0; virtual void startReceiveThread() = 0;
virtual void startSendThread() = 0; void startSendThread();
/**
* Send DTMF over RTP (RFC2833). The timestamp and sequence number must be
* incremented as if it was microphone audio. This function change the payload type of the rtp session,
* send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get
* back the codec payload for further audio processing.
*/
void sendDtmfEvent();
/**
* Send encoded data to peer
*/
virtual void sendMicData();
class AudioRtpSendThread {
public:
AudioRtpSendThread(AudioRtpSession &session);
~AudioRtpSendThread();
void start();
bool running_;
private:
static void *runCallback(void *data);
void run();
NON_COPYABLE(AudioRtpSendThread);
AudioRtpSession &rtpSession_;
pthread_t thread_;
ost::TimerPort timer_;
};
/** /**
* Set RTP Sockets send/receive timeouts * Set RTP Sockets send/receive timeouts
...@@ -152,6 +169,8 @@ class AudioRtpSession : public AudioRtpRecordHandler { ...@@ -152,6 +169,8 @@ class AudioRtpSession : public AudioRtpRecordHandler {
* Timestamp reset frequency specified in number of packet sent * Timestamp reset frequency specified in number of packet sent
*/ */
short timestampCount_; short timestampCount_;
AudioRtpSendThread rtpSendThread_;
}; };
} }
......
...@@ -41,63 +41,14 @@ namespace sfl { ...@@ -41,63 +41,14 @@ namespace sfl {
AudioSymmetricRtpSession::AudioSymmetricRtpSession(SIPCall &call) : AudioSymmetricRtpSession::AudioSymmetricRtpSession(SIPCall &call) :
ost::SymmetricRTPSession(ost::InetHostAddress(call.getLocalIp().c_str()), call.getLocalAudioPort()) ost::SymmetricRTPSession(ost::InetHostAddress(call.getLocalIp().c_str()), call.getLocalAudioPort())
, AudioRtpSession(call, *this) , AudioRtpSession(call, *this)
, rtpSendThread_(*this)
{ {
DEBUG("Setting new RTP session with destination %s:%d", DEBUG("Setting new RTP session with destination %s:%d",
call_.getLocalIp().c_str(), call_.getLocalAudioPort()); call_.getLocalIp().c_str(), call_.getLocalAudioPort());
audioRtpRecord_.callId_ = call_.getCallId(); audioRtpRecord_.callId_ = call_.getCallId();
} }
AudioSymmetricRtpSession::AudioRtpSendThread::AudioRtpSendThread(AudioSymmetricRtpSession &session) :
running_(false), rtpSession_(session), thread_(0)
{}
AudioSymmetricRtpSession::AudioRtpSendThread::~AudioRtpSendThread()
{
running_ = false;
if (thread_)
pthread_join(thread_, NULL);
}
void AudioSymmetricRtpSession::AudioRtpSendThread::start()
{
running_ = true;
pthread_create(&thread_, NULL, &runCallback, this);
}
void *
AudioSymmetricRtpSession::AudioRtpSendThread::runCallback(void *data)
{
AudioSymmetricRtpSession::AudioRtpSendThread *context = static_cast<AudioSymmetricRtpSession::AudioRtpSendThread*>(data);
context->run();
return NULL;
}
void AudioSymmetricRtpSession::AudioRtpSendThread::run()
{
ost::TimerPort::setTimer(rtpSession_.transportRate_);
const int MS_TO_USEC = 1000;
while (running_) {
// Send session
if (rtpSession_.hasDTMFPending())
rtpSession_.sendDtmfEvent();
else
rtpSession_.sendMicData();
usleep(ost::TimerPort::getTimer() * MS_TO_USEC);
ost::TimerPort::incTimer(rtpSession_.transportRate_);
}
}
void AudioSymmetricRtpSession::startReceiveThread() void AudioSymmetricRtpSession::startReceiveThread()
{ {
ost::SymmetricRTPSession::start(); ost::SymmetricRTPSession::start();
} }
void AudioSymmetricRtpSession::startSendThread()
{
rtpSendThread_.start();
}
} }
...@@ -78,25 +78,7 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP ...@@ -78,25 +78,7 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP
private: private:
NON_COPYABLE(AudioSymmetricRtpSession); NON_COPYABLE(AudioSymmetricRtpSession);
class AudioRtpSendThread : public ost::TimerPort {
public:
AudioRtpSendThread(AudioSymmetricRtpSession &session);
~AudioRtpSendThread();
void start();
bool running_;
private:
NON_COPYABLE(AudioRtpSendThread);
static void *runCallback(void *data);
void run();
pthread_t thread_;
AudioSymmetricRtpSession &rtpSession_;
};
void startReceiveThread(); void startReceiveThread();
void startSendThread();
AudioRtpSendThread rtpSendThread_ ;
}; };
} }
......
...@@ -50,7 +50,6 @@ AudioZrtpSession::AudioZrtpSession(SIPCall &call, const std::string &zidFilename ...@@ -50,7 +50,6 @@ AudioZrtpSession::AudioZrtpSession(SIPCall &call, const std::string &zidFilename
ost::SymmetricZRTPSession(ost::InetHostAddress(call.getLocalIp().c_str()), call.getLocalAudioPort()) ost::SymmetricZRTPSession(ost::InetHostAddress(call.getLocalIp().c_str()), call.getLocalAudioPort())
, AudioRtpSession(call, *this) , AudioRtpSession(call, *this)
, zidFilename_(zidFilename) , zidFilename_(zidFilename)
, rtpSendThread_(*this)
{ {
initializeZid(); initializeZid();
DEBUG("Setting new RTP session with destination %s:%d", DEBUG("Setting new RTP session with destination %s:%d",
...@@ -112,52 +111,6 @@ void AudioZrtpSession::sendMicData() ...@@ -112,52 +111,6 @@ void AudioZrtpSession::sendMicData()
queue_.sendImmediate(timestamp_, getMicDataEncoded(), compSize); queue_.sendImmediate(timestamp_, getMicDataEncoded(), compSize);
} }
AudioZrtpSession::AudioZrtpSendThread::AudioZrtpSendThread(AudioZrtpSession &session) :
running_(true), zrtpSession_(session), thread_(0)
{}
AudioZrtpSession::AudioZrtpSendThread::~AudioZrtpSendThread()
{
running_ = false;
if (thread_)
pthread_join(thread_, NULL);
}
void
AudioZrtpSession::AudioZrtpSendThread::start()
{
pthread_create(&thread_, NULL, &runCallback, this);
}
void *
AudioZrtpSession::AudioZrtpSendThread::runCallback(void *data)
{
AudioZrtpSession::AudioZrtpSendThread *context = static_cast<AudioZrtpSession::AudioZrtpSendThread*>(data);
context->run();
return NULL;
}
void AudioZrtpSession::AudioZrtpSendThread::run()
{
DEBUG("Entering Audio zrtp thread main loop %s", running_ ? "running" : "not running");
TimerPort::setTimer(zrtpSession_.transportRate_);
while (running_) {
// Send session
if (zrtpSession_.hasDTMFPending())
zrtpSession_.sendDtmfEvent();
else
zrtpSession_.sendMicData();
Thread::sleep(TimerPort::getTimer());
TimerPort::incTimer(zrtpSession_.transportRate_);
}
DEBUG("Leaving audio rtp thread loop");
}
int AudioZrtpSession::getIncrementForDTMF() const int AudioZrtpSession::getIncrementForDTMF() const
{ {
return 160; return 160;
...@@ -168,9 +121,4 @@ void AudioZrtpSession::startReceiveThread() ...@@ -168,9 +121,4 @@ void AudioZrtpSession::startReceiveThread()
ost::SymmetricZRTPSession::start(); ost::SymmetricZRTPSession::start();
} }
void AudioZrtpSession::startSendThread()
{
rtpSendThread_.start();
}
} }
...@@ -42,7 +42,6 @@ using std::ptrdiff_t; ...@@ -42,7 +42,6 @@ using std::ptrdiff_t;
#include "global.h" #include "global.h"
#include "audio_rtp_session.h" #include "audio_rtp_session.h"
// #include <commoncpp/numbers.h> // OST::Time
class SIPCall; class SIPCall;
class AudioCodec; class AudioCodec;
...@@ -76,28 +75,11 @@ class AudioZrtpSession : ...@@ -76,28 +75,11 @@ class AudioZrtpSession :
private: private:
NON_COPYABLE(AudioZrtpSession); NON_COPYABLE(AudioZrtpSession);
class AudioZrtpSendThread : public ost::TimerPort {
public:
AudioZrtpSendThread(AudioZrtpSession &session);
~AudioZrtpSendThread();
void start();
bool running_;
private:
static void *runCallback(void *data);
void run();
NON_COPYABLE(AudioZrtpSendThread);
AudioZrtpSession &zrtpSession_;
pthread_t thread_;
};
void sendMicData(); void sendMicData();
void initializeZid(); void initializeZid();
std::string zidFilename_; std::string zidFilename_;
void startReceiveThread(); void startReceiveThread();
void startSendThread();
virtual int getIncrementForDTMF() const; virtual int getIncrementForDTMF() const;
AudioZrtpSendThread rtpSendThread_;
}; };
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment