Module: sems Branch: master Commit: fcf0186040d68cdd86770892a35b6903ee1370f2 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=fcf0186040d68cdd86770892a35b6903ee1370f2
Author: Raphael Coeffic <[email protected]> Committer: Raphael Coeffic <[email protected]> Date: Wed Dec 14 12:34:45 2011 +0100 moved payload provider to AmRtpStream. --- core/AmPlugIn.h | 8 ++++---- core/AmPrecodedFile.h | 12 +++++++----- core/AmRtpAudio.cpp | 9 ++++----- core/AmRtpAudio.h | 3 +-- core/AmRtpStream.cpp | 19 +++++++++++-------- core/AmRtpStream.h | 7 +++++-- core/AmSdp.cpp | 2 +- core/AmSdp.h | 2 +- core/AmSession.cpp | 7 +------ core/AmSession.h | 6 ------ 10 files changed, 35 insertions(+), 40 deletions(-) diff --git a/core/AmPlugIn.h b/core/AmPlugIn.h index e443f33..2d0c661 100644 --- a/core/AmPlugIn.h +++ b/core/AmPlugIn.h @@ -55,10 +55,10 @@ struct amci_inoutfmt_t; struct amci_subtype_t; /** Interface that a payload provider needs to implement */ -class AmPayloadProviderInterface { +class AmPayloadProvider { public: - AmPayloadProviderInterface() { } - virtual ~AmPayloadProviderInterface() { } + AmPayloadProvider() { } + virtual ~AmPayloadProvider() { } /** * Payload lookup function. @@ -83,7 +83,7 @@ class AmPayloadProviderInterface { /** * \brief Container for loaded Plug-ins. */ -class AmPlugIn : public AmPayloadProviderInterface +class AmPlugIn : public AmPayloadProvider { private: static AmPlugIn* _instance; diff --git a/core/AmPrecodedFile.h b/core/AmPrecodedFile.h index 0b3b293..29cba56 100644 --- a/core/AmPrecodedFile.h +++ b/core/AmPrecodedFile.h @@ -97,7 +97,7 @@ class AmPrecodedFileInstance }; class AmPrecodedFile -: public AmPayloadProviderInterface { +: public AmPayloadProvider { std::map<int,precoded_payload_t> payloads; @@ -105,17 +105,19 @@ class AmPrecodedFile AmPrecodedFile(); ~AmPrecodedFile(); + /** Open the file */ + int open(const std::string& filename); + /** need to call after open() */ void initPlugin(); - int open(const std::string& filename); + AmPrecodedFileInstance* getFileInstance(int payload_id, + const vector<SdpPayload*>& m_payloads); + /** from @AmPayloadProvider */ amci_payload_t* payload(int payload_id) const; int getDynPayload(const string& name, int rate, int encoding_param) const; - void getPayloads(vector<SdpPayload>& pl_vec) const; - - AmPrecodedFileInstance* getFileInstance(int payload_id, const vector<SdpPayload*>& m_payloads); }; #endif diff --git a/core/AmRtpAudio.cpp b/core/AmRtpAudio.cpp index 48eae7c..f352a34 100644 --- a/core/AmRtpAudio.cpp +++ b/core/AmRtpAudio.cpp @@ -151,13 +151,12 @@ void AmRtpAudio::getSdpAnswer(const SdpMedia& offer, SdpMedia& answer) AmRtpStream::getSdpAnswer(offer,answer); } -int AmRtpAudio::init(AmPayloadProviderInterface* payload_provider, - unsigned char media_i, - const AmSdp& local, - const AmSdp& remote) +int AmRtpAudio::init(unsigned char media_i, + const AmSdp& local, + const AmSdp& remote) { DBG("AmRtpAudio::init(...)\n"); - if(AmRtpStream::init(payload_provider,media_i,local,remote)){ + if(AmRtpStream::init(media_i,local,remote)){ return -1; } diff --git a/core/AmRtpAudio.h b/core/AmRtpAudio.h index a2d52e2..08499d5 100644 --- a/core/AmRtpAudio.h +++ b/core/AmRtpAudio.h @@ -119,8 +119,7 @@ public: void getSdpOffer(SdpMedia& offer); void getSdpAnswer(const SdpMedia& offer, SdpMedia& answer); - int init(AmPayloadProviderInterface* payload_provider, - unsigned char media_i, + int init(unsigned char media_i, const AmSdp& local, const AmSdp& remote); diff --git a/core/AmRtpStream.cpp b/core/AmRtpStream.cpp index 8bece6b..88c75fb 100644 --- a/core/AmRtpStream.cpp +++ b/core/AmRtpStream.cpp @@ -441,6 +441,9 @@ AmRtpStream::AmRtpStream(AmSession* _s, int _if) l_ssrc = get_random(); sequence = get_random(); gettimeofday(&last_recv_time,NULL); + + // by default the system codecs + payload_provider = AmPlugIn::instance(); } AmRtpStream::~AmRtpStream() @@ -563,21 +566,16 @@ void AmRtpStream::getSdp(SdpMedia& m) void AmRtpStream::getSdpOffer(SdpMedia& offer) { getSdp(offer); - - // TODO: transfer ownership of the payload provider also into AmRtpStream - session->getPayloadProvider()->getPayloads(offer.payloads); + payload_provider->getPayloads(offer.payloads); } void AmRtpStream::getSdpAnswer(const SdpMedia& offer, SdpMedia& answer) { getSdp(answer); - - // TODO: transfer ownership of the payload provider also into AmRtpStream - offer.calcAnswer(session->getPayloadProvider(),answer); + offer.calcAnswer(payload_provider,answer); } -int AmRtpStream::init(AmPayloadProviderInterface* payload_provider, - unsigned char media_i, +int AmRtpStream::init(unsigned char media_i, const AmSdp& local, const AmSdp& remote) { @@ -896,6 +894,11 @@ int AmRtpStream::getLocalTelephoneEventRate() return 0; } +void AmRtpStream::setPayloadProvider(AmPayloadProvider* pl_prov) +{ + payload_provider = pl_prov; +} + void AmRtpStream::sendDtmf(int event, unsigned int duration_ms) { dtmf_send_queue_mut.lock(); dtmf_send_queue.push(std::make_pair(event, duration_ms * getLocalTelephoneEventRate() diff --git a/core/AmRtpStream.h b/core/AmRtpStream.h index a006d0a..5d63241 100644 --- a/core/AmRtpStream.h +++ b/core/AmRtpStream.h @@ -192,6 +192,8 @@ protected: pair<int, unsigned int> current_send_dtmf; unsigned int current_send_dtmf_ts; int send_dtmf_end_repeat; + /** Payload provider */ + AmPayloadProvider* payload_provider; /** handle symmetric RTP - if in passive mode, update raddr from rp */ void handleSymmetricRtp(AmRtpPacket* rp); @@ -283,6 +285,8 @@ public: int getLocalTelephoneEventRate(); + void setPayloadProvider(AmPayloadProvider* pl_prov); + /** * send a DTMF as RTP payload (RFC4733) * @param event event ID (e.g. key press), see rfc @@ -310,8 +314,7 @@ public: * @warning It should be called only if the stream has been completly initialized, * @warning and only once per session. Use resume() then. */ - virtual int init(AmPayloadProviderInterface* payload_provider, - unsigned char media_i, + virtual int init(unsigned char media_i, const AmSdp& local, const AmSdp& remote); diff --git a/core/AmSdp.cpp b/core/AmSdp.cpp index 6a3859f..066e2eb 100644 --- a/core/AmSdp.cpp +++ b/core/AmSdp.cpp @@ -293,7 +293,7 @@ void AmSdp::clear() l_origin = SdpOrigin(); } -void SdpMedia::calcAnswer(const AmPayloadProviderInterface* payload_prov, +void SdpMedia::calcAnswer(const AmPayloadProvider* payload_prov, SdpMedia& answer) const { if(!recv) answer.send = false; diff --git a/core/AmSdp.h b/core/AmSdp.h index 4bbdc6e..e7b81db 100644 --- a/core/AmSdp.h +++ b/core/AmSdp.h @@ -156,7 +156,7 @@ struct SdpMedia * inserts them into the answer, compute send/recv attributes * and direction according to the offer. */ - void calcAnswer(const AmPayloadProviderInterface* payload_prov, + void calcAnswer(const AmPayloadProvider* payload_prov, SdpMedia& answer) const; }; diff --git a/core/AmSession.cpp b/core/AmSession.cpp index 0220572..a9350ef 100644 --- a/core/AmSession.cpp +++ b/core/AmSession.cpp @@ -272,11 +272,6 @@ int AmSession::getRPort() return RTPStream()->getRPort(); } -AmPayloadProviderInterface* AmSession::getPayloadProvider() { - // by default the system codecs - return AmPlugIn::instance(); -} - #ifdef SESSION_THREADPOOL void AmSession::start() { AmSessionProcessorThread* processor_thread = @@ -1056,7 +1051,7 @@ int AmSession::onSdpCompleted(const AmSdp& local_sdp, const AmSdp& remote_sdp) // should be created or updated // lockAudio(); - int ret = RTPStream()->init(getPayloadProvider(),0,local_sdp,remote_sdp); + int ret = RTPStream()->init(0,local_sdp,remote_sdp); unlockAudio(); if(ret){ diff --git a/core/AmSession.h b/core/AmSession.h index 4a6691b..2cd58b9 100644 --- a/core/AmSession.h +++ b/core/AmSession.h @@ -371,12 +371,6 @@ public: /** Gets the port number of the remote part of the session */ int getRPort(); - /** Set whether on positive reply session should be negotiated */ - //void setNegotiateOnReply(bool n) { negotiate_onreply = n; } - - /** get the payload provider for the session */ - virtual AmPayloadProviderInterface* getPayloadProvider(); - /* ---- Call control ---- */ /** refresh the session - re-INVITE or UPDATE*/ _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
