Refactor the internal API to the rtp/rtcp module.
Combination of previous CLs in revisions 2211, 2212, 2214, 2215, 2216.
Review URL: https://webrtc-codereview.appspot.com/570008
git-svn-id: http://webrtc.googlecode.com/svn/trunk@2231 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/modules/interface/module.h b/src/modules/interface/module.h
index 37e5027..55f8491 100644
--- a/src/modules/interface/module.h
+++ b/src/modules/interface/module.h
@@ -19,9 +19,6 @@
class Module {
public:
- // Change the unique identifier of this object.
- virtual int32_t ChangeUniqueId(const int32_t id) = 0;
-
// Returns the number of milliseconds until the module want a worker
// thread to call Process.
virtual int32_t TimeUntilNextProcess() = 0;
diff --git a/src/modules/rtp_rtcp/interface/rtp_rtcp.h b/src/modules/rtp_rtcp/interface/rtp_rtcp.h
index eb6c8e3..c1f9a4a 100644
--- a/src/modules/rtp_rtcp/interface/rtp_rtcp.h
+++ b/src/modules/rtp_rtcp/interface/rtp_rtcp.h
@@ -13,122 +13,75 @@
#include <vector>
-#include "module.h"
-#include "rtp_rtcp_defines.h"
+#include "modules/interface/module.h"
+#include "modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
namespace webrtc {
// forward declaration
class Transport;
-class RtpRtcp : public Module
-{
-public:
- /*
- * create a RTP/RTCP module object using the system clock
- *
- * id - unique identifier of this RTP/RTCP module object
- * audio - true for a audio version of the RTP/RTCP module object false will create a video version
+class RtpRtcp : public Module {
+ public:
+ struct Configuration {
+ Configuration()
+ : id(-1),
+ audio(false),
+ clock(NULL),
+ default_module(NULL),
+ incoming_data(NULL),
+ incoming_messages(NULL),
+ outgoing_transport(NULL),
+ rtcp_feedback(NULL),
+ intra_frame_callback(NULL),
+ bandwidth_callback(NULL),
+ audio_messages(NULL),
+ bitrate_observer(NULL) {
+ }
+ /* id - Unique identifier of this RTP/RTCP module object
+ * audio - True for a audio version of the RTP/RTCP module
+ * object false will create a video version
+ * clock - The clock to use to read time. If NULL object
+ * will be using the system clock.
+ * incoming_data - Callback object that will receive the incoming
+ * data
+ * incoming_messages - Callback object that will receive the incoming
+ * RTP messages.
+ * outgoing_transport - Transport object that will be called when packets
+ * are ready to be sent out on the network
+ * rtcp_feedback - Callback object that will receive the incoming
+ * RTP messages.
+ * intra_frame_callback - Called when the receiver request a intra frame.
+ * bandwidth_callback - Called when we receive a changed estimate from
+ * the receiver of out stream.
+ * audio_messages - Telehone events.
+ * bitrate_observer - Called when the estimate of the incoming RTP
+ * stream changes.
*/
- static RtpRtcp* CreateRtpRtcp(const WebRtc_Word32 id,
- const bool audio);
+ int32_t id;
+ bool audio;
+ RtpRtcpClock* clock;
+ RtpRtcp* default_module;
+ RtpData* incoming_data;
+ RtpFeedback* incoming_messages;
+ Transport* outgoing_transport;
+ RtcpFeedback* rtcp_feedback;
+ RtcpIntraFrameObserver* intra_frame_callback;
+ RtcpBandwidthObserver* bandwidth_callback;
+ RtpAudioFeedback* audio_messages;
+ RtpRemoteBitrateObserver* bitrate_observer;
+ };
+ /*
+ * Create a RTP/RTCP module object using the system clock.
+ *
+ * configuration - Configuration of the RTP/RTCP module.
+ */
+ static RtpRtcp* CreateRtpRtcp(const RtpRtcp::Configuration& configuration);
- /*
- * create a RTP/RTCP module object
- *
- * id - unique identifier of this RTP/RTCP module object
- * audio - true for a audio version of the RTP/RTCP module object
- * false will create a video version
- * clock - the clock to use to read time; must not be NULL
- */
- static RtpRtcp* CreateRtpRtcp(const WebRtc_Word32 id,
- const bool audio,
- RtpRtcpClock* clock);
-
- /*
- * destroy a RTP/RTCP module object
- *
- * module - object to destroy
- */
- static void DestroyRtpRtcp(RtpRtcp* module);
-
- /*
- * Change the unique identifier of this object
- *
- * id - new unique identifier of this RTP/RTCP module object
- */
- virtual WebRtc_Word32 ChangeUniqueId(const WebRtc_Word32 id) = 0;
-
- /*
- * De-muxing functionality for conferencing
- *
- * register a module that will act as a default module for this module
- * used for feedback messages back to the encoder when one encoded stream
- * is sent to multiple destinations
- *
- * module - default module
- */
- virtual WebRtc_Word32 RegisterDefaultModule(RtpRtcp* module) = 0;
-
- /*
- * unregister the default module
- * will stop the demuxing feedback
- */
- virtual WebRtc_Word32 DeRegisterDefaultModule() = 0;
-
- /*
- * returns true if a default module is registered, false otherwise
- */
- virtual bool DefaultModuleRegistered() = 0;
-
- /*
- * returns number of registered child modules
- */
- virtual WebRtc_UWord32 NumberChildModules() = 0;
-
- /*
- * Lip-sync between voice-video
- *
- * module - audio module
- *
- * Note: only allowed on a video module
- */
- virtual WebRtc_Word32 RegisterSyncModule(RtpRtcp* module) = 0;
-
- /*
- * Turn off lip-sync between voice-video
- */
- virtual WebRtc_Word32 DeRegisterSyncModule() = 0;
-
- /**************************************************************************
- *
- * Receiver functions
- *
- ***************************************************************************/
-
- /*
- * Initialize receive side
- *
- * return -1 on failure else 0
- */
- virtual WebRtc_Word32 InitReceiver() = 0;
-
- /*
- * Used by the module to deliver the incoming data to the codec module
- *
- * incomingDataCallback - callback object that will receive the incoming data
- *
- * return -1 on failure else 0
- */
- virtual WebRtc_Word32 RegisterIncomingDataCallback(RtpData* incomingDataCallback) = 0;
-
- /*
- * Used by the module to deliver messages to the codec module/appliation
- *
- * incomingMessagesCallback - callback object that will receive the incoming messages
- *
- * return -1 on failure else 0
- */
- virtual WebRtc_Word32 RegisterIncomingRTPCallback(RtpFeedback* incomingMessagesCallback) = 0;
+ /**************************************************************************
+ *
+ * Receiver functions
+ *
+ ***************************************************************************/
/*
* configure a RTP packet timeout value
@@ -138,30 +91,35 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetPacketTimeout(const WebRtc_UWord32 RTPtimeoutMS,
- const WebRtc_UWord32 RTCPtimeoutMS) = 0;
+ virtual WebRtc_Word32 SetPacketTimeout(
+ const WebRtc_UWord32 RTPtimeoutMS,
+ const WebRtc_UWord32 RTCPtimeoutMS) = 0;
/*
* Set periodic dead or alive notification
*
* enable - turn periodic dead or alive notification on/off
- * sampleTimeSeconds - sample interval in seconds for dead or alive notifications
+ * sampleTimeSeconds - sample interval in seconds for dead or alive
+ * notifications
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetPeriodicDeadOrAliveStatus(const bool enable,
- const WebRtc_UWord8 sampleTimeSeconds) = 0;
+ virtual WebRtc_Word32 SetPeriodicDeadOrAliveStatus(
+ const bool enable,
+ const WebRtc_UWord8 sampleTimeSeconds) = 0;
/*
* Get periodic dead or alive notification status
*
* enable - periodic dead or alive notification on/off
- * sampleTimeSeconds - sample interval in seconds for dead or alive notifications
+ * sampleTimeSeconds - sample interval in seconds for dead or alive
+ * notifications
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 PeriodicDeadOrAliveStatus(bool &enable,
- WebRtc_UWord8 &sampleTimeSeconds) = 0;
+ virtual WebRtc_Word32 PeriodicDeadOrAliveStatus(
+ bool& enable,
+ WebRtc_UWord8& sampleTimeSeconds) = 0;
/*
* set voice codec name and payload type
@@ -231,7 +189,8 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 EstimatedRemoteTimeStamp(WebRtc_UWord32& timestamp) const = 0;
+ virtual WebRtc_Word32 EstimatedRemoteTimeStamp(
+ WebRtc_UWord32& timestamp) const = 0;
/*
* Get incoming SSRC
@@ -245,7 +204,8 @@
*
* return -1 on failure else the number of valid entries in the list
*/
- virtual WebRtc_Word32 RemoteCSRCs( WebRtc_UWord32 arrOfCSRC[kRtpCsrcSize]) const = 0;
+ virtual WebRtc_Word32 RemoteCSRCs(
+ WebRtc_UWord32 arrOfCSRC[kRtpCsrcSize]) const = 0;
/*
* get the currently configured SSRC filter
@@ -289,20 +249,6 @@
virtual WebRtc_Word32 IncomingPacket(const WebRtc_UWord8* incomingPacket,
const WebRtc_UWord16 packetLength) = 0;
-
- /*
- * Option when not using the RegisterSyncModule function
- *
- * Inform the module about the received audion NTP
- *
- * return -1 on failure else 0
- */
- virtual WebRtc_Word32 IncomingAudioNTP(
- const WebRtc_UWord32 audioReceivedNTPsecs,
- const WebRtc_UWord32 audioReceivedNTPfrac,
- const WebRtc_UWord32 audioRTCPArrivalTimeSecs,
- const WebRtc_UWord32 audioRTCPArrivalTimeFrac) = 0;
-
/**************************************************************************
*
* Sender
@@ -310,22 +256,6 @@
***************************************************************************/
/*
- * Initialize send side
- *
- * return -1 on failure else 0
- */
- virtual WebRtc_Word32 InitSender() = 0;
-
- /*
- * Used by the module to send RTP and RTCP packet to the network module
- *
- * outgoingTransport - transport object that will be called when packets are ready to be sent out on the network
- *
- * return -1 on failure else 0
- */
- virtual WebRtc_Word32 RegisterSendTransport(Transport* outgoingTransport) = 0;
-
- /*
* set MTU
*
* size - Max transfer unit in bytes, default is 1500
@@ -340,18 +270,21 @@
*
* TCP - true for TCP false UDP
* IPv6 - true for IP version 6 false for version 4
- * authenticationOverhead - number of bytes to leave for an authentication header
+ * authenticationOverhead - number of bytes to leave for an
+ * authentication header
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetTransportOverhead(const bool TCP,
- const bool IPV6,
- const WebRtc_UWord8 authenticationOverhead = 0) = 0;
+ virtual WebRtc_Word32 SetTransportOverhead(
+ const bool TCP,
+ const bool IPV6,
+ const WebRtc_UWord8 authenticationOverhead = 0) = 0;
/*
* Get max payload length
*
- * A combination of the configuration MaxTransferUnit and TransportOverhead.
+ * A combination of the configuration MaxTransferUnit and
+ * TransportOverhead.
* Does not account FEC/ULP/RED overhead if FEC is enabled.
* Does not account for RTP headers
*/
@@ -360,7 +293,8 @@
/*
* Get max data payload length
*
- * A combination of the configuration MaxTransferUnit, headers and TransportOverhead.
+ * A combination of the configuration MaxTransferUnit, headers and
+ * TransportOverhead.
* Takes into account FEC/ULP/RED overhead if FEC is enabled.
* Takes into account RTP headers
*/
@@ -490,7 +424,6 @@
const bool setSSRC,
const WebRtc_UWord32 SSRC) = 0;
-
/*
* Get status of sending RTX (RFC 4588) on a specific SSRC.
*/
@@ -540,14 +473,16 @@
WebRtc_UWord32* available_bandwidth) const = 0;
/*
- * Used by the codec module to deliver a video or audio frame for packetization
+ * Used by the codec module to deliver a video or audio frame for
+ * packetization.
*
* frameType - type of frame to send
* payloadType - payload type of frame to send
* timestamp - timestamp of frame to send
* payloadData - payload buffer of frame to send
* payloadSize - size of payload buffer to send
- * fragmentation - fragmentation offset data for fragmented frames such as layers or RED
+ * fragmentation - fragmentation offset data for fragmented frames such
+ * as layers or RED
*
* return -1 on failure else 0
*/
@@ -567,16 +502,6 @@
***************************************************************************/
/*
- * Register a callback objects that will receive callbacks for video
- * related events such as an incoming key frame request and events that
- * could indicate bandwidth overuse.
- */
- virtual void RegisterRtcpObservers(
- RtcpIntraFrameObserver* intraFrameCallback,
- RtcpBandwidthObserver* bandwidthCallback,
- RtcpFeedback* callback) = 0;
-
- /*
* Get RTCP status
*/
virtual RTCPMethod RTCP() const = 0;
@@ -664,18 +589,21 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SendRTCP(WebRtc_UWord32 rtcpPacketType = kRtcpReport) = 0;
+ virtual WebRtc_Word32 SendRTCP(
+ WebRtc_UWord32 rtcpPacketType = kRtcpReport) = 0;
/*
* Good state of RTP receiver inform sender
*/
- virtual WebRtc_Word32 SendRTCPReferencePictureSelection(const WebRtc_UWord64 pictureID) = 0;
+ virtual WebRtc_Word32 SendRTCPReferencePictureSelection(
+ const WebRtc_UWord64 pictureID) = 0;
/*
* Send a RTCP Slice Loss Indication (SLI)
* 6 least significant bits of pictureID
*/
- virtual WebRtc_Word32 SendRTCPSliceLossIndication(const WebRtc_UWord8 pictureID) = 0;
+ virtual WebRtc_Word32 SendRTCPSliceLossIndication(
+ const WebRtc_UWord8 pictureID) = 0;
/*
* Reset RTP statistics
@@ -689,11 +617,12 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 StatisticsRTP(WebRtc_UWord8 *fraction_lost, // scale 0 to 255
- WebRtc_UWord32 *cum_lost, // number of lost packets
- WebRtc_UWord32 *ext_max, // highest sequence number received
- WebRtc_UWord32 *jitter,
- WebRtc_UWord32 *max_jitter = NULL) const = 0;
+ virtual WebRtc_Word32 StatisticsRTP(
+ WebRtc_UWord8* fraction_lost, // scale 0 to 255
+ WebRtc_UWord32* cum_lost, // number of lost packets
+ WebRtc_UWord32* ext_max, // highest sequence number received
+ WebRtc_UWord32* jitter,
+ WebRtc_UWord32* max_jitter = NULL) const = 0;
/*
* Reset RTP data counters for the receiving side
@@ -714,10 +643,11 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 DataCountersRTP(WebRtc_UWord32 *bytesSent,
- WebRtc_UWord32 *packetsSent,
- WebRtc_UWord32 *bytesReceived,
- WebRtc_UWord32 *packetsReceived) const = 0;
+ virtual WebRtc_Word32 DataCountersRTP(
+ WebRtc_UWord32* bytesSent,
+ WebRtc_UWord32* packetsSent,
+ WebRtc_UWord32* bytesReceived,
+ WebRtc_UWord32* packetsReceived) const = 0;
/*
* Get received RTCP sender info
*
@@ -753,16 +683,18 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetRTCPApplicationSpecificData(const WebRtc_UWord8 subType,
- const WebRtc_UWord32 name,
- const WebRtc_UWord8* data,
- const WebRtc_UWord16 length) = 0;
+ virtual WebRtc_Word32 SetRTCPApplicationSpecificData(
+ const WebRtc_UWord8 subType,
+ const WebRtc_UWord32 name,
+ const WebRtc_UWord8* data,
+ const WebRtc_UWord16 length) = 0;
/*
* (XR) VOIP metric
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetRTCPVoIPMetrics(const RTCPVoIPMetric* VoIPMetric) = 0;
+ virtual WebRtc_Word32 SetRTCPVoIPMetrics(
+ const RTCPVoIPMetric* VoIPMetric) = 0;
/*
* (REMB) Receiver Estimated Max Bitrate
@@ -775,11 +707,6 @@
const WebRtc_UWord8 numberOfSSRC,
const WebRtc_UWord32* SSRC) = 0;
- // Registers an observer to call when the estimate of the incoming channel
- // changes.
- virtual bool SetRemoteBitrateObserver(
- RtpRemoteBitrateObserver* observer) = 0;
-
/*
* (IJ) Extended jitter report.
*/
@@ -839,11 +766,14 @@
const WebRtc_UWord16 size) = 0;
/*
- * Store the sent packets, needed to answer to a Negative acknowledgement requests
+ * Store the sent packets, needed to answer to a Negative acknowledgement
+ * requests
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetStorePacketsStatus(const bool enable, const WebRtc_UWord16 numberToStore = 200) = 0;
+ virtual WebRtc_Word32 SetStorePacketsStatus(
+ const bool enable,
+ const WebRtc_UWord16 numberToStore = 200) = 0;
/**************************************************************************
*
@@ -852,27 +782,23 @@
***************************************************************************/
/*
- * RegisterAudioCallback
+ * set audio packet size, used to determine when it's time to send a DTMF
+ * packet in silence (CNG)
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 RegisterAudioCallback(RtpAudioFeedback* messagesCallback) = 0;
-
- /*
- * set audio packet size, used to determine when it's time to send a DTMF packet in silence (CNG)
- *
- * return -1 on failure else 0
- */
- virtual WebRtc_Word32 SetAudioPacketSize(const WebRtc_UWord16 packetSizeSamples) = 0;
+ virtual WebRtc_Word32 SetAudioPacketSize(
+ const WebRtc_UWord16 packetSizeSamples) = 0;
/*
* Outband TelephoneEvent(DTMF) detection
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetTelephoneEventStatus(const bool enable,
- const bool forwardToDecoder,
- const bool detectEndOfTone = false) = 0;
+ virtual WebRtc_Word32 SetTelephoneEventStatus(
+ const bool enable,
+ const bool forwardToDecoder,
+ const bool detectEndOfTone = false) = 0;
/*
* Is outband TelephoneEvent(DTMF) turned on/off?
@@ -888,55 +814,61 @@
/*
* SendTelephoneEventActive
*
- * return true if we currently send a telephone event and 100 ms after an event is sent
- * used to prevent teh telephone event tone to be recorded by the microphone and send inband
- * just after the tone has ended
+ * return true if we currently send a telephone event and 100 ms after an
+ * event is sent used to prevent the telephone event tone to be recorded
+ * by the microphone and send inband just after the tone has ended.
*/
- virtual bool SendTelephoneEventActive(WebRtc_Word8& telephoneEvent) const = 0;
+ virtual bool SendTelephoneEventActive(
+ WebRtc_Word8& telephoneEvent) const = 0;
/*
* Send a TelephoneEvent tone using RFC 2833 (4733)
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SendTelephoneEventOutband(const WebRtc_UWord8 key,
- const WebRtc_UWord16 time_ms,
- const WebRtc_UWord8 level) = 0;
+ virtual WebRtc_Word32 SendTelephoneEventOutband(
+ const WebRtc_UWord8 key,
+ const WebRtc_UWord16 time_ms,
+ const WebRtc_UWord8 level) = 0;
/*
* Set payload type for Redundant Audio Data RFC 2198
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetSendREDPayloadType(const WebRtc_Word8 payloadType) = 0;
+ virtual WebRtc_Word32 SetSendREDPayloadType(
+ const WebRtc_Word8 payloadType) = 0;
/*
* Get payload type for Redundant Audio Data RFC 2198
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SendREDPayloadType(WebRtc_Word8& payloadType) const = 0;
+ virtual WebRtc_Word32 SendREDPayloadType(
+ WebRtc_Word8& payloadType) const = 0;
/*
* Set status and ID for header-extension-for-audio-level-indication.
- * See https://datatracker.ietf.org/doc/draft-lennox-avt-rtp-audio-level-exthdr/
- * for more details.
+ * See http://tools.ietf.org/html/rfc6464 for more details.
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetRTPAudioLevelIndicationStatus(const bool enable,
- const WebRtc_UWord8 ID) = 0;
+ virtual WebRtc_Word32 SetRTPAudioLevelIndicationStatus(
+ const bool enable,
+ const WebRtc_UWord8 ID) = 0;
/*
* Get status and ID for header-extension-for-audio-level-indication.
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 GetRTPAudioLevelIndicationStatus(bool& enable,
- WebRtc_UWord8& ID) const = 0;
+ virtual WebRtc_Word32 GetRTPAudioLevelIndicationStatus(
+ bool& enable,
+ WebRtc_UWord8& ID) const = 0;
/*
- * Store the audio level in dBov for header-extension-for-audio-level-indication.
+ * Store the audio level in dBov for header-extension-for-audio-level-
+ * indication.
* This API shall be called before transmision of an RTP packet to ensure
* that the |level| part of the extended RTP header is updated.
*
@@ -967,9 +899,10 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetGenericFECStatus(const bool enable,
- const WebRtc_UWord8 payloadTypeRED,
- const WebRtc_UWord8 payloadTypeFEC) = 0;
+ virtual WebRtc_Word32 SetGenericFECStatus(
+ const bool enable,
+ const WebRtc_UWord8 payloadTypeRED,
+ const WebRtc_UWord8 payloadTypeFEC) = 0;
/*
* Get generic FEC setting
@@ -977,8 +910,8 @@
* return -1 on failure else 0
*/
virtual WebRtc_Word32 GenericFECStatus(bool& enable,
- WebRtc_UWord8& payloadTypeRED,
- WebRtc_UWord8& payloadTypeFEC) = 0;
+ WebRtc_UWord8& payloadTypeRED,
+ WebRtc_UWord8& payloadTypeFEC) = 0;
virtual WebRtc_Word32 SetFecParameters(
@@ -990,7 +923,8 @@
*
* return -1 on failure else 0
*/
- virtual WebRtc_Word32 SetKeyFrameRequestMethod(const KeyFrameRequestMethod method) = 0;
+ virtual WebRtc_Word32 SetKeyFrameRequestMethod(
+ const KeyFrameRequestMethod method) = 0;
/*
* send a request for a keyframe
diff --git a/src/modules/rtp_rtcp/interface/rtp_rtcp_defines.h b/src/modules/rtp_rtcp/interface/rtp_rtcp_defines.h
index 3b6b4a8..110b08c 100644
--- a/src/modules/rtp_rtcp/interface/rtp_rtcp_defines.h
+++ b/src/modules/rtp_rtcp/interface/rtp_rtcp_defines.h
@@ -139,10 +139,6 @@
class RtcpFeedback
{
public:
- // if audioVideoOffset > 0 video is behind audio
- virtual void OnLipSyncUpdate(const WebRtc_Word32 /*id*/,
- const WebRtc_Word32 /*audioVideoOffset*/) {};
-
virtual void OnApplicationDataReceived(const WebRtc_Word32 /*id*/,
const WebRtc_UWord8 /*subType*/,
const WebRtc_UWord32 /*name*/,
diff --git a/src/modules/rtp_rtcp/source/Bitrate.h b/src/modules/rtp_rtcp/source/Bitrate.h
index ab5637b..3859aaa 100644
--- a/src/modules/rtp_rtcp/source/Bitrate.h
+++ b/src/modules/rtp_rtcp/source/Bitrate.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -25,9 +25,6 @@
public:
Bitrate(RtpRtcpClock* clock);
- // initialize members
- void Init();
-
// calculate rates
void Process();
diff --git a/src/modules/rtp_rtcp/source/bitrate.cc b/src/modules/rtp_rtcp/source/bitrate.cc
index be0c7dd..0fbb7ad 100644
--- a/src/modules/rtp_rtcp/source/bitrate.cc
+++ b/src/modules/rtp_rtcp/source/bitrate.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -29,21 +29,6 @@
}
void
-Bitrate::Init()
-{
- _packetRate = 0;
- _bitrate = 0;
- _timeLastRateUpdate = 0;
- _bytesCount = 0;
- _packetCount = 0;
- _bitrateNextIdx = 0;
-
- memset(_packetRateArray, 0, sizeof(_packetRateArray));
- memset(_bitrateDiffMS, 0, sizeof(_bitrateDiffMS));
- memset(_bitrateArray, 0, sizeof(_bitrateArray));
-}
-
-void
Bitrate::Update(const WebRtc_Word32 bytes)
{
_bytesCount += bytes;
diff --git a/src/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc b/src/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc
index 9fdd6ca..d937f35 100644
--- a/src/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc
+++ b/src/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc
@@ -70,7 +70,11 @@
void RtcpFormatRembTest::SetUp() {
system_clock_ = ModuleRTPUtility::GetSystemClock();
- dummy_rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(0, false, system_clock_);
+ RtpRtcp::Configuration configuration;
+ configuration.id = 0;
+ configuration.audio = false;
+ configuration.clock = system_clock_;
+ dummy_rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration);
rtcp_sender_ = new RTCPSender(0, false, system_clock_, dummy_rtp_rtcp_impl_);
rtcp_receiver_ = new RTCPReceiver(0, system_clock_, dummy_rtp_rtcp_impl_);
test_transport_ = new TestTransport(rtcp_receiver_);
diff --git a/src/modules/rtp_rtcp/source/rtcp_receiver.cc b/src/modules/rtp_rtcp/source/rtcp_receiver.cc
index 2fc7c83..d9365e9 100644
--- a/src/modules/rtp_rtcp/source/rtcp_receiver.cc
+++ b/src/modules/rtp_rtcp/source/rtcp_receiver.cc
@@ -165,9 +165,6 @@
GetReportBlockInformation(remoteSSRC);
if (reportBlock == NULL) {
- WEBRTC_TRACE(kTraceError, kTraceRtpRtcp, _id,
- "\tfailed to GetReportBlockInformation(%u)",
- remoteSSRC);
return -1;
}
if (RTT) {
@@ -202,16 +199,6 @@
return 0;
}
-void
-RTCPReceiver::UpdateLipSync(const WebRtc_Word32 audioVideoOffset) const
-{
- CriticalSectionScoped lock(_criticalSectionFeedbacks);
- if(_cbRtcpFeedback)
- {
- _cbRtcpFeedback->OnLipSyncUpdate(_id,audioVideoOffset);
- }
-};
-
WebRtc_Word32
RTCPReceiver::NTP(WebRtc_UWord32 *ReceivedNTPsecs,
WebRtc_UWord32 *ReceivedNTPfrac,
@@ -1247,9 +1234,6 @@
// Might trigger a OnReceivedBandwidthEstimateUpdate.
UpdateTMMBR();
}
- if (rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpSr) {
- _rtpRtcp.OnReceivedNTP();
- }
if (rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpSrReq) {
_rtpRtcp.OnRequestSendReport();
}
diff --git a/src/modules/rtp_rtcp/source/rtcp_receiver.h b/src/modules/rtp_rtcp/source/rtcp_receiver.h
index 294e67d..df2d18b4 100644
--- a/src/modules/rtp_rtcp/source/rtcp_receiver.h
+++ b/src/modules/rtp_rtcp/source/rtcp_receiver.h
@@ -76,8 +76,6 @@
WebRtc_Word32 ResetRTT(const WebRtc_UWord32 remoteSSRC);
- void UpdateLipSync(const WebRtc_Word32 audioVideoOffset) const;
-
WebRtc_Word32 SenderInfoReceived(RTCPSenderInfo* senderInfo) const;
// get statistics
diff --git a/src/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/src/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
index 5bfdb73..9598a43 100644
--- a/src/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
+++ b/src/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
@@ -151,10 +151,12 @@
class TestTransport : public Transport,
public RtpData {
public:
- explicit TestTransport(RTCPReceiver* rtcp_receiver) :
- rtcp_receiver_(rtcp_receiver) {
+ explicit TestTransport()
+ : rtcp_receiver_(NULL) {
}
-
+ void SetRTCPReceiver(RTCPReceiver* rtcp_receiver) {
+ rtcp_receiver_ = rtcp_receiver;
+ }
virtual int SendPacket(int /*ch*/, const void* /*data*/, int /*len*/) {
ADD_FAILURE(); // FAIL() gives a compile error.
return -1;
@@ -180,10 +182,15 @@
RtcpReceiverTest() {
// system_clock_ = ModuleRTPUtility::GetSystemClock();
system_clock_ = new FakeSystemClock();
- rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(0, false, system_clock_);
+ test_transport_ = new TestTransport();
+ RtpRtcp::Configuration configuration;
+ configuration.id = 0;
+ configuration.audio = false;
+ configuration.clock = system_clock_;
+ configuration.outgoing_transport = test_transport_;
+ rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration);
rtcp_receiver_ = new RTCPReceiver(0, system_clock_, rtp_rtcp_impl_);
- test_transport_ = new TestTransport(rtcp_receiver_);
- EXPECT_EQ(0, rtp_rtcp_impl_->RegisterIncomingDataCallback(test_transport_));
+ test_transport_->SetRTCPReceiver(rtcp_receiver_);
}
~RtcpReceiverTest() {
delete rtcp_receiver_;
diff --git a/src/modules/rtp_rtcp/source/rtcp_sender_unittest.cc b/src/modules/rtp_rtcp/source/rtcp_sender_unittest.cc
index 2d86682..17fbafc 100644
--- a/src/modules/rtp_rtcp/source/rtcp_sender_unittest.cc
+++ b/src/modules/rtp_rtcp/source/rtcp_sender_unittest.cc
@@ -59,10 +59,12 @@
class TestTransport : public Transport,
public RtpData {
public:
- TestTransport(RTCPReceiver* rtcp_receiver) :
- rtcp_receiver_(rtcp_receiver) {
+ TestTransport()
+ : rtcp_receiver_(NULL) {
}
-
+ void SetRTCPReceiver(RTCPReceiver* rtcp_receiver) {
+ rtcp_receiver_ = rtcp_receiver;
+ }
virtual int SendPacket(int /*ch*/, const void* /*data*/, int /*len*/) {
return -1;
}
@@ -83,8 +85,9 @@
virtual int OnReceivedPayloadData(const WebRtc_UWord8* payloadData,
const WebRtc_UWord16 payloadSize,
- const WebRtcRTPHeader* rtpHeader)
- {return 0;}
+ const WebRtcRTPHeader* rtpHeader) {
+ return 0;
+ }
RTCPReceiver* rtcp_receiver_;
RTCPHelp::RTCPPacketInformation rtcp_packet_info_;
};
@@ -93,14 +96,22 @@
protected:
RtcpSenderTest() {
system_clock_ = ModuleRTPUtility::GetSystemClock();
- rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(0, false, system_clock_);
+ test_transport_ = new TestTransport();
+
+ RtpRtcp::Configuration configuration;
+ configuration.id = 0;
+ configuration.audio = false;
+ configuration.clock = system_clock_;
+ configuration.incoming_data = test_transport_;
+ configuration.outgoing_transport = test_transport_;
+
+ rtp_rtcp_impl_ = new ModuleRtpRtcpImpl(configuration);
rtcp_sender_ = new RTCPSender(0, false, system_clock_, rtp_rtcp_impl_);
rtcp_receiver_ = new RTCPReceiver(0, system_clock_, rtp_rtcp_impl_);
- test_transport_ = new TestTransport(rtcp_receiver_);
+ test_transport_->SetRTCPReceiver(rtcp_receiver_);
// Initialize
EXPECT_EQ(0, rtcp_sender_->Init());
EXPECT_EQ(0, rtcp_sender_->RegisterSendTransport(test_transport_));
- EXPECT_EQ(0, rtp_rtcp_impl_->RegisterIncomingDataCallback(test_transport_));
}
~RtcpSenderTest() {
delete rtcp_sender_;
diff --git a/src/modules/rtp_rtcp/source/rtp_receiver.cc b/src/modules/rtp_rtcp/source/rtp_receiver.cc
index ef5e721..40eb6b0 100644
--- a/src/modules/rtp_rtcp/source/rtp_receiver.cc
+++ b/src/modules/rtp_rtcp/source/rtp_receiver.cc
@@ -123,75 +123,6 @@
WEBRTC_TRACE(kTraceMemory, kTraceRtpRtcp, _id, "%s deleted", __FUNCTION__);
}
-void RTPReceiver::Init() {
- CriticalSectionScoped lock(_criticalSectionRTPReceiver);
-
- _lastReceiveTime = 0;
- _lastReceivedPayloadLength = 0;
- _packetTimeOutMS = 0;
- _lastReceivedPayloadType = -1;
- _lastReceivedMediaPayloadType = -1;
- _redPayloadType = -1;
-
- memset(&_lastReceivedAudioSpecific, 0, sizeof(_lastReceivedAudioSpecific));
- _lastReceivedAudioSpecific.channels = 1;
-
- _lastReceivedVideoSpecific.videoCodecType = kRtpNoVideo;
- _lastReceivedVideoSpecific.maxRate = 0;
- _SSRC = 0;
- _numCSRCs = 0;
- _numEnergy = 0;
- _jitterQ4 = 0;
- _jitterMaxQ4 = 0;
- _cumulativeLoss = 0;
- _jitterQ4TransmissionTimeOffset = 0;
- _useSSRCFilter = false;
- _SSRCFilter = 0;
-
- _localTimeLastReceivedTimestamp = 0;
- _lastReceivedTimestamp = 0;
- _lastReceivedSequenceNumber = 0;
- _lastReceivedTransmissionTimeOffset = 0;
-
- _receivedSeqFirst = 0;
- _receivedSeqMax = 0;
- _receivedSeqWraps = 0;
-
- _receivedPacketOH = 12; // RTP header
- _receivedByteCount = 0;
- _receivedOldPacketCount = 0;
- _receivedInorderPacketCount = 0;
-
- _lastReportInorderPackets = 0;
- _lastReportOldPackets = 0;
- _lastReportSeqMax = 0;
- _lastReportFractionLost = 0;
- _lastReportCumulativeLost = 0;
- _lastReportExtendedHighSeqNum = 0;
- _lastReportJitter = 0;
- _lastReportJitterTransmissionTimeOffset = 0;
-
- _rtpHeaderExtensionMap.Erase();
-
- while (!_payloadTypeMap.empty()) {
- std::map<WebRtc_Word8, Payload*>::iterator it = _payloadTypeMap.begin();
- delete it->second;
- _payloadTypeMap.erase(it);
- }
-
- Bitrate::Init();
- RTPReceiverAudio::Init();
- RTPReceiverVideo::Init();
-}
-
-void
-RTPReceiver::ChangeUniqueId(const WebRtc_Word32 id)
-{
- _id = id;
- RTPReceiverAudio::ChangeUniqueId(id);
- RTPReceiverVideo::ChangeUniqueId(id);
-}
-
RtpVideoCodecTypes
RTPReceiver::VideoCodecType() const
{
diff --git a/src/modules/rtp_rtcp/source/rtp_receiver.h b/src/modules/rtp_rtcp/source/rtp_receiver.h
index f283676..d6ecfaa 100644
--- a/src/modules/rtp_rtcp/source/rtp_receiver.h
+++ b/src/modules/rtp_rtcp/source/rtp_receiver.h
@@ -39,10 +39,6 @@
virtual ~RTPReceiver();
- virtual void ChangeUniqueId(const WebRtc_Word32 id);
-
- void Init();
-
RtpVideoCodecTypes VideoCodecType() const;
WebRtc_UWord32 MaxConfiguredBitrate() const;
diff --git a/src/modules/rtp_rtcp/source/rtp_receiver_audio.cc b/src/modules/rtp_rtcp/source/rtp_receiver_audio.cc
index 1b870e2..a57da75 100644
--- a/src/modules/rtp_rtcp/source/rtp_receiver_audio.cc
+++ b/src/modules/rtp_rtcp/source/rtp_receiver_audio.cc
@@ -40,30 +40,6 @@
delete _criticalSectionFeedback;
}
-WebRtc_Word32 RTPReceiverAudio::Init() {
- _lastReceivedFrequency = 8000;
- _telephoneEvent = false;
- _telephoneEventForwardToDecoder = false;
- _telephoneEventDetectEndOfTone = false;
- _telephoneEventPayloadType = -1;
-
- _telephoneEventReported.clear();
-
- _cngNBPayloadType = -1;
- _cngWBPayloadType = -1;
- _cngSWBPayloadType = -1;
- _cngPayloadType = -1;
- _G722PayloadType = -1;
- _lastReceivedG722 = false;
- return 0;
-}
-
-void
-RTPReceiverAudio::ChangeUniqueId(const WebRtc_Word32 id)
-{
- _id = id;
-}
-
WebRtc_Word32
RTPReceiverAudio::RegisterIncomingAudioCallback(RtpAudioFeedback* incomingMessagesCallback)
{
diff --git a/src/modules/rtp_rtcp/source/rtp_receiver_audio.h b/src/modules/rtp_rtcp/source/rtp_receiver_audio.h
index 89cd062..0b0ba30 100644
--- a/src/modules/rtp_rtcp/source/rtp_receiver_audio.h
+++ b/src/modules/rtp_rtcp/source/rtp_receiver_audio.h
@@ -27,10 +27,6 @@
RTPReceiverAudio(const WebRtc_Word32 id);
virtual ~RTPReceiverAudio();
- virtual void ChangeUniqueId(const WebRtc_Word32 id);
-
- WebRtc_Word32 Init();
-
WebRtc_Word32 RegisterIncomingAudioCallback(RtpAudioFeedback* incomingMessagesCallback);
ModuleRTPUtility::Payload* RegisterReceiveAudioPayload(
diff --git a/src/modules/rtp_rtcp/source/rtp_receiver_video.cc b/src/modules/rtp_rtcp/source/rtp_receiver_video.cc
index c5f99bd..94d49e0 100644
--- a/src/modules/rtp_rtcp/source/rtp_receiver_video.cc
+++ b/src/modules/rtp_rtcp/source/rtp_receiver_video.cc
@@ -58,16 +58,6 @@
delete _receiveFEC;
}
-void RTPReceiverVideo::Init() {
- _currentFecFrameDecoded = false;
- _packetOverHead = 28;
- ResetOverUseDetector();
-}
-
-void RTPReceiverVideo::ChangeUniqueId(const WebRtc_Word32 id) {
- _id = id;
-}
-
ModuleRTPUtility::Payload* RTPReceiverVideo::RegisterReceiveVideoPayload(
const char payloadName[RTP_PAYLOAD_NAME_SIZE],
const WebRtc_Word8 payloadType,
diff --git a/src/modules/rtp_rtcp/source/rtp_receiver_video.h b/src/modules/rtp_rtcp/source/rtp_receiver_video.h
index f2e223e..ce32293 100644
--- a/src/modules/rtp_rtcp/source/rtp_receiver_video.h
+++ b/src/modules/rtp_rtcp/source/rtp_receiver_video.h
@@ -32,10 +32,6 @@
virtual ~RTPReceiverVideo();
- virtual void ChangeUniqueId(const WebRtc_Word32 id);
-
- void Init();
-
ModuleRTPUtility::Payload* RegisterReceiveVideoPayload(
const char payloadName[RTP_PAYLOAD_NAME_SIZE],
const WebRtc_Word8 payloadType,
diff --git a/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 8906e20..e2ab811 100644
--- a/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/src/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -36,222 +36,103 @@
const WebRtc_UWord16 kDefaultRtt = 200;
-RtpRtcp* RtpRtcp::CreateRtpRtcp(const WebRtc_Word32 id,
- bool audio) {
- if(audio) {
- WEBRTC_TRACE(kTraceModuleCall, kTraceRtpRtcp, id, "CreateRtpRtcp(audio)");
+RtpRtcp* RtpRtcp::CreateRtpRtcp(const RtpRtcp::Configuration& configuration) {
+ if (configuration.clock) {
+ return new ModuleRtpRtcpImpl(configuration);
} else {
- WEBRTC_TRACE(kTraceModuleCall, kTraceRtpRtcp, id, "CreateRtpRtcp(video)");
- }
- // ModuleRTPUtility::GetSystemClock() creates a new instance of a system
- // clock implementation. The OwnsClock() function informs the module that
- // it is responsible for deleting the instance.
- ModuleRtpRtcpImpl* rtp_rtcp_instance = new ModuleRtpRtcpImpl(id,
- audio, ModuleRTPUtility::GetSystemClock());
- rtp_rtcp_instance->OwnsClock();
- return rtp_rtcp_instance;
-}
-
-RtpRtcp* RtpRtcp::CreateRtpRtcp(const WebRtc_Word32 id,
- const bool audio,
- RtpRtcpClock* clock) {
- if (audio) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- id,
- "CreateRtpRtcp(audio)");
- } else {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- id,
- "CreateRtpRtcp(video)");
- }
- return new ModuleRtpRtcpImpl(id, audio, clock);
-}
-
-void RtpRtcp::DestroyRtpRtcp(RtpRtcp* module) {
- if (module) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- static_cast<ModuleRtpRtcpImpl*>(module)->Id(),
- "DestroyRtpRtcp()");
- delete static_cast<ModuleRtpRtcpImpl*>(module);
+ RtpRtcp::Configuration configuration_copy;
+ memcpy(&configuration_copy, &configuration,
+ sizeof(RtpRtcp::Configuration));
+ configuration_copy.clock = ModuleRTPUtility::GetSystemClock();
+ ModuleRtpRtcpImpl* rtp_rtcp_instance =
+ new ModuleRtpRtcpImpl(configuration_copy);
+ rtp_rtcp_instance->OwnsClock();
+ return rtp_rtcp_instance;
}
}
-ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const WebRtc_Word32 id,
- const bool audio,
- RtpRtcpClock* clock):
- _rtpSender(id, audio, clock),
- _rtpReceiver(id, audio, clock, this),
- _rtcpSender(id, audio, clock, this),
- _rtcpReceiver(id, clock, this),
- _owns_clock(false),
- _clock(*clock),
- _id(id),
- _audio(audio),
- _collisionDetected(false),
- _lastProcessTime(clock->GetTimeInMS()),
- _lastBitrateProcessTime(clock->GetTimeInMS()),
- _lastPacketTimeoutProcessTime(clock->GetTimeInMS()),
- _packetOverHead(28), // IPV4 UDP
- _criticalSectionModulePtrs(CriticalSectionWrapper::CreateCriticalSection()),
- _criticalSectionModulePtrsFeedback(
- CriticalSectionWrapper::CreateCriticalSection()),
- _defaultModule(NULL),
- _audioModule(NULL),
- _videoModule(NULL),
- _deadOrAliveActive(false),
- _deadOrAliveTimeoutMS(0),
- _deadOrAliveLastTimer(0),
- _receivedNTPsecsAudio(0),
- _receivedNTPfracAudio(0),
- _RTCPArrivalTimeSecsAudio(0),
- _RTCPArrivalTimeFracAudio(0),
- _nackMethod(kNackOff),
- _nackLastTimeSent(0),
- _nackLastSeqNumberSent(0),
- _simulcast(false),
- _keyFrameReqMethod(kKeyFrameReqFirRtp)
+ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const Configuration& configuration)
+ : _rtpSender(configuration.id, configuration.audio, configuration.clock),
+ _rtpReceiver(configuration.id, configuration.audio, configuration.clock,
+ this),
+ _rtcpSender(configuration.id, configuration.audio, configuration.clock,
+ this),
+ _rtcpReceiver(configuration.id, configuration.clock, this),
+ _owns_clock(false),
+ _clock(*configuration.clock),
+ _id(configuration.id),
+ _audio(configuration.audio),
+ _collisionDetected(false),
+ _lastProcessTime(configuration.clock->GetTimeInMS()),
+ _lastBitrateProcessTime(configuration.clock->GetTimeInMS()),
+ _lastPacketTimeoutProcessTime(configuration.clock->GetTimeInMS()),
+ _packetOverHead(28), // IPV4 UDP
+ _criticalSectionModulePtrs(
+ CriticalSectionWrapper::CreateCriticalSection()),
+ _criticalSectionModulePtrsFeedback(
+ CriticalSectionWrapper::CreateCriticalSection()),
+ _defaultModule(
+ static_cast<ModuleRtpRtcpImpl*>(configuration.default_module)),
+ _deadOrAliveActive(false),
+ _deadOrAliveTimeoutMS(0),
+ _deadOrAliveLastTimer(0),
+ _nackMethod(kNackOff),
+ _nackLastTimeSent(0),
+ _nackLastSeqNumberSent(0),
+ _simulcast(false),
+ _keyFrameReqMethod(kKeyFrameReqFirRtp)
#ifdef MATLAB
- , _plot1(NULL)
+ , _plot1(NULL)
#endif
{
_sendVideoCodec.codecType = kVideoCodecUnknown;
+
+ if (_defaultModule) {
+ _defaultModule->RegisterChildModule(this);
+ }
+ // TODO(pwestin) move to constructors of each rtp/rtcp sender/receiver object.
+ _rtpReceiver.RegisterIncomingDataCallback(configuration.incoming_data);
+ _rtpReceiver.RegisterIncomingRTPCallback(configuration.incoming_messages);
+ _rtcpReceiver.RegisterRtcpObservers(configuration.intra_frame_callback,
+ configuration.bandwidth_callback,
+ configuration.rtcp_feedback);
+ _rtpSender.RegisterAudioCallback(configuration.audio_messages);
+ _rtpReceiver.RegisterIncomingAudioCallback(configuration.audio_messages);
+
+ _rtpSender.RegisterSendTransport(configuration.outgoing_transport);
+ _rtcpSender.RegisterSendTransport(configuration.outgoing_transport);
+
+ _rtcpSender.SetRemoteBitrateObserver(configuration.bitrate_observer);
+
// make sure that RTCP objects are aware of our SSRC
WebRtc_UWord32 SSRC = _rtpSender.SSRC();
_rtcpSender.SetSSRC(SSRC);
- WEBRTC_TRACE(kTraceMemory, kTraceRtpRtcp, id, "%s created", __FUNCTION__);
+ WEBRTC_TRACE(kTraceMemory, kTraceRtpRtcp, _id, "%s created", __FUNCTION__);
}
ModuleRtpRtcpImpl::~ModuleRtpRtcpImpl() {
WEBRTC_TRACE(kTraceMemory, kTraceRtpRtcp, _id, "%s deleted", __FUNCTION__);
- // make sure to unregister this module from other modules
+ // All child modules MUST be deleted before deleting the default.
+ assert(_childModules.empty());
- const bool defaultInstance(_childModules.empty() ? false : true);
-
- if (defaultInstance) {
- // deregister for the default module
- // will go in to the child modules and remove it self
- std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
- while (it != _childModules.end()) {
- RtpRtcp* module = *it;
- _childModules.erase(it);
- if (module) {
- module->DeRegisterDefaultModule();
- }
- it = _childModules.begin();
- }
- } else {
- // deregister for the child modules
- // will go in to the default and remove it self
- DeRegisterDefaultModule();
+ // Deregister for the child modules
+ // will go in to the default and remove it self
+ if (_defaultModule) {
+ _defaultModule->DeRegisterChildModule(this);
}
-
- if (_audio) {
- DeRegisterVideoModule();
- } else {
- DeRegisterSyncModule();
- }
-
#ifdef MATLAB
if (_plot1) {
eng.DeletePlot(_plot1);
_plot1 = NULL;
}
#endif
-
- delete _criticalSectionModulePtrs;
- delete _criticalSectionModulePtrsFeedback;
if (_owns_clock) {
delete &_clock;
}
}
-WebRtc_Word32 ModuleRtpRtcpImpl::ChangeUniqueId(const WebRtc_Word32 id) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "ChangeUniqueId(new id:%d)", id);
-
- _id = id;
-
- _rtpReceiver.ChangeUniqueId(id);
- _rtcpReceiver.ChangeUniqueId(id);
- _rtpSender.ChangeUniqueId(id);
- _rtcpSender.ChangeUniqueId(id);
- return 0;
-}
-
-// default encoder that we need to multiplex out
-WebRtc_Word32 ModuleRtpRtcpImpl::RegisterDefaultModule(RtpRtcp* module) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "RegisterDefaultModule(module:0x%x)", module);
-
- if (module == NULL) {
- return -1;
- }
- if (module == this) {
- WEBRTC_TRACE(kTraceError,
- kTraceRtpRtcp,
- _id,
- "RegisterDefaultModule can't register self as default");
- return -1;
- }
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
-
- if (_defaultModule) {
- _defaultModule->DeRegisterChildModule(this);
- }
- _defaultModule = (ModuleRtpRtcpImpl*)module;
- _defaultModule->RegisterChildModule(this);
- return 0;
-}
-
-WebRtc_Word32 ModuleRtpRtcpImpl::DeRegisterDefaultModule() {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "DeRegisterDefaultModule()");
-
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
- if (_defaultModule) {
- _defaultModule->DeRegisterChildModule(this);
- _defaultModule = NULL;
- }
- return 0;
-}
-
-bool ModuleRtpRtcpImpl::DefaultModuleRegistered() {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "DefaultModuleRegistered()");
-
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
- if (_defaultModule) {
- return true;
- }
- return false;
-}
-
-WebRtc_UWord32 ModuleRtpRtcpImpl::NumberChildModules() {
- WEBRTC_TRACE(kTraceModuleCall, kTraceRtpRtcp, _id, "NumberChildModules");
-
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
- CriticalSectionScoped doubleLock(_criticalSectionModulePtrsFeedback);
- // we use two locks for protecting _childModules one
- // (_criticalSectionModulePtrsFeedback) for incoming messages
- // (BitrateSent and UpdateTMMBR) and _criticalSectionModulePtrs for
- // all outgoing messages sending packets etc
-
- return _childModules.size();
-}
-
void ModuleRtpRtcpImpl::RegisterChildModule(RtpRtcp* module) {
WEBRTC_TRACE(kTraceModuleCall,
kTraceRtpRtcp,
@@ -259,9 +140,9 @@
"RegisterChildModule(module:0x%x)",
module);
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
- CriticalSectionScoped doubleLock(_criticalSectionModulePtrsFeedback);
+ CriticalSectionScoped doubleLock(_criticalSectionModulePtrsFeedback.get());
// we use two locks for protecting _childModules one
// (_criticalSectionModulePtrsFeedback) for incoming
// messages (BitrateSent) and _criticalSectionModulePtrs
@@ -275,9 +156,9 @@
_id,
"DeRegisterChildModule(module:0x%x)", removeModule);
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
- CriticalSectionScoped doubleLock(_criticalSectionModulePtrsFeedback);
+ CriticalSectionScoped doubleLock(_criticalSectionModulePtrsFeedback.get());
std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
while (it != _childModules.end()) {
@@ -290,76 +171,6 @@
}
}
-// Lip-sync between voice-video engine,
-WebRtc_Word32 ModuleRtpRtcpImpl::RegisterSyncModule(RtpRtcp* audioModule) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "RegisterSyncModule(module:0x%x)",
- audioModule);
-
- if (audioModule == NULL) {
- return -1;
- }
- if (_audio) {
- return -1;
- }
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
- _audioModule = (ModuleRtpRtcpImpl*)audioModule;
- return _audioModule->RegisterVideoModule(this);
-}
-
-WebRtc_Word32 ModuleRtpRtcpImpl::DeRegisterSyncModule() {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "DeRegisterSyncModule()");
-
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
- if (_audioModule) {
- ModuleRtpRtcpImpl* audioModule = _audioModule;
- _audioModule = NULL;
- _receivedNTPsecsAudio = 0;
- _receivedNTPfracAudio = 0;
- _RTCPArrivalTimeSecsAudio = 0;
- _RTCPArrivalTimeFracAudio = 0;
- audioModule->DeRegisterVideoModule();
- }
- return 0;
-}
-
-WebRtc_Word32 ModuleRtpRtcpImpl::RegisterVideoModule(RtpRtcp* videoModule) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "RegisterVideoModule(module:0x%x)",
- videoModule);
-
- if (videoModule == NULL) {
- return -1;
- }
- if (!_audio) {
- return -1;
- }
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
- _videoModule = (ModuleRtpRtcpImpl*)videoModule;
- return 0;
-}
-
-void ModuleRtpRtcpImpl::DeRegisterVideoModule() {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "DeRegisterVideoModule()");
-
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
- if (_videoModule) {
- ModuleRtpRtcpImpl* videoModule = _videoModule;
- _videoModule = NULL;
- videoModule->DeRegisterSyncModule();
- }
-}
-
// returns the number of milliseconds until the module want a worker thread
// to call Process
WebRtc_Word32 ModuleRtpRtcpImpl::TimeUntilNextProcess() {
@@ -436,20 +247,6 @@
* Receiver
*/
-WebRtc_Word32 ModuleRtpRtcpImpl::InitReceiver() {
- WEBRTC_TRACE(kTraceModuleCall, kTraceRtpRtcp, _id, "InitReceiver()");
-
- _packetOverHead = 28; // default is IPV4 UDP
- _receivedNTPsecsAudio = 0;
- _receivedNTPfracAudio = 0;
- _RTCPArrivalTimeSecsAudio = 0;
- _RTCPArrivalTimeFracAudio = 0;
-
- _rtpReceiver.Init();
- _rtpReceiver.SetPacketOverHead(_packetOverHead);
- return 0;
-}
-
void ModuleRtpRtcpImpl::ProcessDeadOrAliveTimer() {
if (_deadOrAliveActive) {
const WebRtc_UWord32 now = _clock.GetTimeInMS();
@@ -687,7 +484,6 @@
_id,
"IncomingPacket(packetLength:%u)",
incomingPacketLength);
-
// minimum RTP is 12 bytes
// minimum RTCP is 8 bytes (RTCP BYE)
if (incomingPacketLength < 8 || incomingPacket == NULL) {
@@ -754,85 +550,10 @@
}
}
-WebRtc_Word32 ModuleRtpRtcpImpl::IncomingAudioNTP(
- const WebRtc_UWord32 audioReceivedNTPsecs,
- const WebRtc_UWord32 audioReceivedNTPfrac,
- const WebRtc_UWord32 audioRTCPArrivalTimeSecs,
- const WebRtc_UWord32 audioRTCPArrivalTimeFrac) {
- _receivedNTPsecsAudio = audioReceivedNTPsecs;
- _receivedNTPfracAudio = audioReceivedNTPfrac;
- _RTCPArrivalTimeSecsAudio = audioRTCPArrivalTimeSecs;
- _RTCPArrivalTimeFracAudio = audioRTCPArrivalTimeFrac;
- return 0;
-}
-
-WebRtc_Word32 ModuleRtpRtcpImpl::RegisterIncomingDataCallback(
- RtpData* incomingDataCallback) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "RegisterIncomingDataCallback(incomingDataCallback:0x%x)",
- incomingDataCallback);
-
- return _rtpReceiver.RegisterIncomingDataCallback(incomingDataCallback);
-}
-
-WebRtc_Word32 ModuleRtpRtcpImpl::RegisterIncomingRTPCallback(
- RtpFeedback* incomingMessagesCallback) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "RegisterIncomingRTPCallback(incomingMessagesCallback:0x%x)",
- incomingMessagesCallback);
-
- return _rtpReceiver.RegisterIncomingRTPCallback(incomingMessagesCallback);
-}
-
-void ModuleRtpRtcpImpl::RegisterRtcpObservers(
- RtcpIntraFrameObserver* intra_frame_callback,
- RtcpBandwidthObserver* bandwidth_callback,
- RtcpFeedback* feedback_callback) {
- _rtcpReceiver.RegisterRtcpObservers(intra_frame_callback, bandwidth_callback,
- feedback_callback);
-}
-
-WebRtc_Word32 ModuleRtpRtcpImpl::RegisterAudioCallback(
- RtpAudioFeedback* messagesCallback) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "RegisterAudioCallback(messagesCallback:0x%x)",
- messagesCallback);
-
- if (_rtpSender.RegisterAudioCallback(messagesCallback) == 0) {
- return _rtpReceiver.RegisterIncomingAudioCallback(messagesCallback);
- }
- return -1;
-}
-
/**
* Sender
*/
-WebRtc_Word32 ModuleRtpRtcpImpl::InitSender() {
- WEBRTC_TRACE(kTraceModuleCall, kTraceRtpRtcp, _id, "InitSender()");
-
- _collisionDetected = false;
-
- // if we are already receiving inform our sender to avoid collision
- if (_rtpSender.Init(_rtpReceiver.SSRC()) != 0) {
- return -1;
- }
- WebRtc_Word32 retVal = _rtcpSender.Init();
-
- // make sure that RTCP objects are aware of our SSRC
- // (it could have changed due to collision)
- WebRtc_UWord32 SSRC = _rtpSender.SSRC();
- _rtcpReceiver.SetSSRC(SSRC);
- _rtcpSender.SetSSRC(SSRC);
- return retVal;
-}
-
WebRtc_Word32 ModuleRtpRtcpImpl::RegisterSendPayload(
const CodecInst& voiceCodec) {
WEBRTC_TRACE(kTraceModuleCall,
@@ -962,7 +683,7 @@
if (defaultInstance) {
// for default we need to update all child modules too
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
while (it != _childModules.end()) {
@@ -1060,7 +781,7 @@
return _rtpSender.SendingMedia();
}
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::const_iterator it = _childModules.begin();
while (it != _childModules.end()) {
RTPSender& rtpSender = (*it)->_rtpSender;
@@ -1072,19 +793,6 @@
return false;
}
-WebRtc_Word32 ModuleRtpRtcpImpl::RegisterSendTransport(
- Transport* outgoingTransport) {
- WEBRTC_TRACE(kTraceModuleCall,
- kTraceRtpRtcp,
- _id,
- "RegisterSendTransport(0x%x)", outgoingTransport);
-
- if (_rtpSender.RegisterSendTransport(outgoingTransport) == 0) {
- return _rtcpSender.RegisterSendTransport(outgoingTransport);
- }
- return -1;
-}
-
WebRtc_Word32 ModuleRtpRtcpImpl::SendOutgoingData(
FrameType frameType,
WebRtc_Word8 payloadType,
@@ -1121,7 +829,7 @@
return -1;
}
int idx = 0;
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
for (; idx < rtpVideoHdr->simulcastIdx; idx++) {
it++;
@@ -1144,7 +852,7 @@
NULL,
&(rtpVideoHdr->codecHeader));
} else {
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
// TODO(pwestin) remove codecInfo from SendOutgoingData
VideoCodecInformation* codecInfo = NULL;
@@ -1198,7 +906,7 @@
const bool defaultInstance(_childModules.empty() ? false : true);
if (defaultInstance) {
// for default we need to update all child modules too
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::const_iterator it =
_childModules.begin();
while (it != _childModules.end()) {
@@ -1563,11 +1271,6 @@
return _rtcpSender.SetREMBData(bitrate, numberOfSSRC, SSRC);
}
-bool ModuleRtpRtcpImpl::SetRemoteBitrateObserver(
- RtpRemoteBitrateObserver* observer) {
- return _rtcpSender.SetRemoteBitrateObserver(observer);
-}
-
/*
* (IJ) Extended jitter report.
*/
@@ -1655,7 +1358,7 @@
const bool defaultInstance(_childModules.empty() ? false : true);
if (defaultInstance) {
// for default we need to check all child modules too
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::const_iterator it =
_childModules.begin();
while (it != _childModules.end()) {
@@ -1918,7 +1621,7 @@
const bool haveChildModules(_childModules.empty() ? false : true);
if (haveChildModules) {
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
if (_simulcast) {
uint32_t bitrate_remainder = bitrate;
std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
@@ -1994,7 +1697,7 @@
const bool defaultInstance(_childModules.empty() ? false : true);
if (defaultInstance) {
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
while (it != _childModules.end()) {
@@ -2041,7 +1744,7 @@
const bool defaultInstance(_childModules.empty() ? false : true);
if (defaultInstance) {
// for default we need to check all child modules too
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
while (it != _childModules.end()) {
RtpRtcp* module = *it;
@@ -2075,7 +1778,7 @@
const bool defaultInstance(_childModules.empty() ? false : true);
if (defaultInstance) {
// for default we need to update all child modules too
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
+ CriticalSectionScoped lock(_criticalSectionModulePtrs.get());
std::list<ModuleRtpRtcpImpl*>::iterator it = _childModules.begin();
while (it != _childModules.end()) {
@@ -2128,7 +1831,7 @@
if (defaultInstance) {
// for default we need to update the send bitrate
- CriticalSectionScoped lock(_criticalSectionModulePtrsFeedback);
+ CriticalSectionScoped lock(_criticalSectionModulePtrsFeedback.get());
if (totalRate != NULL)
*totalRate = 0;
@@ -2183,66 +1886,6 @@
return 0;
}
-// for lip sync
-void ModuleRtpRtcpImpl::OnReceivedNTP() {
- // don't do anything if we are the audio module
- // video module is responsible for sync
- if (!_audio) {
- WebRtc_Word32 diff = 0;
- WebRtc_UWord32 receivedNTPsecs = 0;
- WebRtc_UWord32 receivedNTPfrac = 0;
- WebRtc_UWord32 RTCPArrivalTimeSecs = 0;
- WebRtc_UWord32 RTCPArrivalTimeFrac = 0;
-
- if (0 == _rtcpReceiver.NTP(&receivedNTPsecs,
- &receivedNTPfrac,
- &RTCPArrivalTimeSecs,
- &RTCPArrivalTimeFrac)) {
- CriticalSectionScoped lock(_criticalSectionModulePtrs);
-
- if (_audioModule) {
- if (0 != _audioModule->RemoteNTP(&_receivedNTPsecsAudio,
- &_receivedNTPfracAudio,
- &_RTCPArrivalTimeSecsAudio,
- &_RTCPArrivalTimeFracAudio)) {
- // failed ot get audio NTP
- return;
- }
- }
- if (_receivedNTPfracAudio != 0) {
- // ReceivedNTPxxx is NTP at sender side when sent.
- // RTCPArrivalTimexxx is NTP at receiver side when received.
- // can't use ConvertNTPTimeToMS since calculation can be
- // negative
-
- WebRtc_Word32 NTPdiff = (WebRtc_Word32)
- ((_receivedNTPsecsAudio - receivedNTPsecs) *
- 1000); // ms
- NTPdiff += (WebRtc_Word32)
- (_receivedNTPfracAudio / FracMS - receivedNTPfrac / FracMS);
-
- WebRtc_Word32 RTCPdiff =
- static_cast<WebRtc_Word32> ((_RTCPArrivalTimeSecsAudio -
- RTCPArrivalTimeSecs) * 1000);
- RTCPdiff += (WebRtc_Word32)
- (_RTCPArrivalTimeFracAudio / FracMS -
- RTCPArrivalTimeFrac / FracMS);
-
- diff = NTPdiff - RTCPdiff;
- // if diff is + video is behind
- if (diff < -1000 || diff > 1000) {
- // unresonable ignore value.
- diff = 0;
- return;
- }
- }
- }
- // export via callback
- // after release of critsect
- _rtcpReceiver.UpdateLipSync(diff);
- }
-}
-
RateControlRegion ModuleRtpRtcpImpl::OnOverUseStateUpdate(
const RateControlInput& rateControlInput) {
diff --git a/src/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/src/modules/rtp_rtcp/source/rtp_rtcp_impl.h
index f71c9d2..8724d78 100644
--- a/src/modules/rtp_rtcp/source/rtp_rtcp_impl.h
+++ b/src/modules/rtp_rtcp/source/rtp_rtcp_impl.h
@@ -13,11 +13,12 @@
#include <list>
-#include "rtcp_receiver.h"
-#include "rtcp_sender.h"
-#include "rtp_receiver.h"
-#include "rtp_rtcp.h"
-#include "rtp_sender.h"
+#include "modules/rtp_rtcp/interface/rtp_rtcp.h"
+#include "modules/rtp_rtcp/source/rtcp_receiver.h"
+#include "modules/rtp_rtcp/source/rtcp_sender.h"
+#include "modules/rtp_rtcp/source/rtp_receiver.h"
+#include "modules/rtp_rtcp/source/rtp_sender.h"
+#include "system_wrappers/interface/scoped_ptr.h"
#ifdef MATLAB
class MatlabPlot;
@@ -25,34 +26,12 @@
namespace webrtc {
-class ModuleRtpRtcpImpl : public RtpRtcp
-{
-public:
- ModuleRtpRtcpImpl(const WebRtc_Word32 id,
- const bool audio,
- RtpRtcpClock* clock);
+class ModuleRtpRtcpImpl : public RtpRtcp {
+ public:
+ explicit ModuleRtpRtcpImpl(const RtpRtcp::Configuration& configuration);
virtual ~ModuleRtpRtcpImpl();
- // get Module ID
- WebRtc_Word32 Id() {return _id;}
-
- virtual WebRtc_Word32 ChangeUniqueId(const WebRtc_Word32 id);
-
- // De-muxing functionality for
- virtual WebRtc_Word32 RegisterDefaultModule(RtpRtcp* module);
- virtual WebRtc_Word32 DeRegisterDefaultModule();
- virtual bool DefaultModuleRegistered();
-
- virtual WebRtc_UWord32 NumberChildModules();
-
- // Lip-sync between voice-video
- virtual WebRtc_Word32 RegisterSyncModule(RtpRtcp* module);
- virtual WebRtc_Word32 DeRegisterSyncModule();
-
- virtual WebRtc_Word32 RegisterVideoModule(RtpRtcp* videoModule);
- virtual void DeRegisterVideoModule();
-
// returns the number of milliseconds until the module want a worker thread to call Process
virtual WebRtc_Word32 TimeUntilNextProcess();
@@ -62,8 +41,6 @@
/**
* Receiver
*/
- virtual WebRtc_Word32 InitReceiver();
-
// configure a timeout value
virtual WebRtc_Word32 SetPacketTimeout(const WebRtc_UWord32 RTPtimeoutMS,
const WebRtc_UWord32 RTCPtimeoutMS);
@@ -125,31 +102,9 @@
virtual WebRtc_Word32 IncomingPacket( const WebRtc_UWord8* incomingPacket,
const WebRtc_UWord16 packetLength);
- virtual WebRtc_Word32 IncomingAudioNTP(const WebRtc_UWord32 audioReceivedNTPsecs,
- const WebRtc_UWord32 audioReceivedNTPfrac,
- const WebRtc_UWord32 audioRTCPArrivalTimeSecs,
- const WebRtc_UWord32 audioRTCPArrivalTimeFrac);
-
- // Used by the module to deliver the incoming data to the codec module
- virtual WebRtc_Word32 RegisterIncomingDataCallback(
- RtpData* incomingDataCallback);
-
- // Used by the module to deliver messages to the codec module/appliation
- virtual WebRtc_Word32 RegisterIncomingRTPCallback(
- RtpFeedback* incomingMessagesCallback);
-
- virtual void RegisterRtcpObservers(
- RtcpIntraFrameObserver* intraFrameCallback,
- RtcpBandwidthObserver* bandwidthCallback,
- RtcpFeedback* callback);
-
- virtual WebRtc_Word32 RegisterAudioCallback(RtpAudioFeedback* messagesCallback);
-
/**
* Sender
*/
- virtual WebRtc_Word32 InitSender();
-
virtual WebRtc_Word32 RegisterSendPayload(const CodecInst& voiceCodec);
virtual WebRtc_Word32 RegisterSendPayload(const VideoCodec& videoCodec);
@@ -216,9 +171,6 @@
virtual bool SendingMedia() const;
- // Used by the module to send RTP and RTCP packet to the network module
- virtual WebRtc_Word32 RegisterSendTransport(Transport* outgoingTransport);
-
// Used by the codec module to deliver a video or audio frame for packetization
virtual WebRtc_Word32 SendOutgoingData(
const FrameType frameType,
@@ -325,7 +277,6 @@
const WebRtc_UWord8 numberOfSSRC,
const WebRtc_UWord32* SSRC);
- virtual bool SetRemoteBitrateObserver(RtpRemoteBitrateObserver* observer);
/*
* (IJ) Extended jitter report.
*/
@@ -482,8 +433,6 @@
// good state of RTP receiver inform sender
virtual WebRtc_Word32 SendRTCPReferencePictureSelection(const WebRtc_UWord64 pictureID);
- void OnReceivedNTP() ;
-
void OnReceivedTMMBR();
// bad state of RTP receiver request a keyframe
@@ -539,23 +488,15 @@
WebRtc_UWord32 _lastPacketTimeoutProcessTime;
WebRtc_UWord16 _packetOverHead;
- CriticalSectionWrapper* _criticalSectionModulePtrs;
- CriticalSectionWrapper* _criticalSectionModulePtrsFeedback;
+ scoped_ptr<CriticalSectionWrapper> _criticalSectionModulePtrs;
+ scoped_ptr<CriticalSectionWrapper> _criticalSectionModulePtrsFeedback;
ModuleRtpRtcpImpl* _defaultModule;
- ModuleRtpRtcpImpl* _audioModule;
- ModuleRtpRtcpImpl* _videoModule;
std::list<ModuleRtpRtcpImpl*> _childModules;
// Dead or alive
bool _deadOrAliveActive;
WebRtc_UWord32 _deadOrAliveTimeoutMS;
WebRtc_UWord32 _deadOrAliveLastTimer;
-
- WebRtc_UWord32 _receivedNTPsecsAudio;
- WebRtc_UWord32 _receivedNTPfracAudio;
- WebRtc_UWord32 _RTCPArrivalTimeSecsAudio;
- WebRtc_UWord32 _RTCPArrivalTimeFracAudio;
-
// send side
NACKMethod _nackMethod;
WebRtc_UWord32 _nackLastTimeSent;
diff --git a/src/modules/rtp_rtcp/source/rtp_sender.cc b/src/modules/rtp_rtcp/source/rtp_sender.cc
index e877692b..945171c 100644
--- a/src/modules/rtp_rtcp/source/rtp_sender.cc
+++ b/src/modules/rtp_rtcp/source/rtp_sender.cc
@@ -117,7 +117,7 @@
WEBRTC_TRACE(kTraceMemory, kTraceRtpRtcp, _id, "%s deleted", __FUNCTION__);
}
-
+/*
WebRtc_Word32
RTPSender::Init(const WebRtc_UWord32 remoteSSRC)
{
@@ -173,19 +173,7 @@
}
return(0);
}
-
-void
-RTPSender::ChangeUniqueId(const WebRtc_Word32 id)
-{
- _id = id;
- if(_audioConfigured)
- {
- _audio->ChangeUniqueId(id);
- } else
- {
- _video->ChangeUniqueId(id);
- }
-}
+*/
void RTPSender::SetTargetSendBitrate(const WebRtc_UWord32 bits) {
_targetSendBitrate = static_cast<uint16_t>(bits / 1000);
diff --git a/src/modules/rtp_rtcp/source/rtp_sender.h b/src/modules/rtp_rtcp/source/rtp_sender.h
index 3906e8c..37eec48 100644
--- a/src/modules/rtp_rtcp/source/rtp_sender.h
+++ b/src/modules/rtp_rtcp/source/rtp_sender.h
@@ -68,9 +68,6 @@
RTPSender(const WebRtc_Word32 id, const bool audio, RtpRtcpClock* clock);
virtual ~RTPSender();
- WebRtc_Word32 Init(const WebRtc_UWord32 remoteSSRC);
- void ChangeUniqueId(const WebRtc_Word32 id);
-
void ProcessBitrate();
void ProcessSendToNetwork();
diff --git a/src/modules/rtp_rtcp/source/rtp_sender_audio.cc b/src/modules/rtp_rtcp/source/rtp_sender_audio.cc
index ee3c414..361aea5 100644
--- a/src/modules/rtp_rtcp/source/rtp_sender_audio.cc
+++ b/src/modules/rtp_rtcp/source/rtp_sender_audio.cc
@@ -51,30 +51,6 @@
}
WebRtc_Word32
-RTPSenderAudio::Init()
-{
- CriticalSectionScoped cs(_sendAudioCritsect);
-
- _dtmfPayloadType = -1;
- _inbandVADactive = false;
- _cngNBPayloadType = -1;
- _cngWBPayloadType = -1;
- _cngSWBPayloadType = -1;
- _lastPayloadType = -1;
- _REDPayloadType = -1;
- _dtmfTimeLastSent = 0;
- _dtmfTimestampLastSent = 0;
- ResetDTMF();
- return 0;
-}
-
-void
-RTPSenderAudio::ChangeUniqueId(const WebRtc_Word32 id)
-{
- _id = id;
-}
-
-WebRtc_Word32
RTPSenderAudio::RegisterAudioCallback(RtpAudioFeedback* messagesCallback)
{
CriticalSectionScoped cs(_audioFeedbackCritsect);
diff --git a/src/modules/rtp_rtcp/source/rtp_sender_audio.h b/src/modules/rtp_rtcp/source/rtp_sender_audio.h
index 5fda2ef..1ea2fab 100644
--- a/src/modules/rtp_rtcp/source/rtp_sender_audio.h
+++ b/src/modules/rtp_rtcp/source/rtp_sender_audio.h
@@ -28,10 +28,6 @@
RTPSenderInterface* rtpSender);
virtual ~RTPSenderAudio();
- void ChangeUniqueId(const WebRtc_Word32 id);
-
- WebRtc_Word32 Init();
-
WebRtc_Word32 RegisterAudioPayload(
const char payloadName[RTP_PAYLOAD_NAME_SIZE],
const WebRtc_Word8 payloadType,
diff --git a/src/modules/rtp_rtcp/source/rtp_sender_video.cc b/src/modules/rtp_rtcp/source/rtp_sender_video.cc
index 8f44973..f1e3c74 100644
--- a/src/modules/rtp_rtcp/source/rtp_sender_video.cc
+++ b/src/modules/rtp_rtcp/source/rtp_sender_video.cc
@@ -67,29 +67,6 @@
delete _sendVideoCritsect;
}
-WebRtc_Word32
-RTPSenderVideo::Init()
-{
- CriticalSectionScoped cs(_sendVideoCritsect);
-
- _retransmissionSettings = kRetransmitBaseLayer;
- _fecEnabled = false;
- _payloadTypeRED = -1;
- _payloadTypeFEC = -1;
- _numberFirstPartition = 0;
- memset(&delta_fec_params_, 0, sizeof(delta_fec_params_));
- memset(&key_fec_params_, 0, sizeof(key_fec_params_));
- delta_fec_params_.max_fec_frames = key_fec_params_.max_fec_frames = 1;
- _fecOverheadRate.Init();
- return 0;
-}
-
-void
-RTPSenderVideo::ChangeUniqueId(const WebRtc_Word32 id)
-{
- _id = id;
-}
-
void
RTPSenderVideo::SetVideoCodecType(RtpVideoCodecTypes videoType)
{
diff --git a/src/modules/rtp_rtcp/source/rtp_sender_video.h b/src/modules/rtp_rtcp/source/rtp_sender_video.h
index 18f39ca..5c3f70c 100644
--- a/src/modules/rtp_rtcp/source/rtp_sender_video.h
+++ b/src/modules/rtp_rtcp/source/rtp_sender_video.h
@@ -37,10 +37,6 @@
RTPSenderInterface* rtpSender);
virtual ~RTPSenderVideo();
- WebRtc_Word32 Init();
-
- virtual void ChangeUniqueId(const WebRtc_Word32 id);
-
virtual RtpVideoCodecTypes VideoCodecType() const;
WebRtc_UWord16 FECPacketOverhead() const;
diff --git a/src/modules/rtp_rtcp/test/testAPI/test_api.cc b/src/modules/rtp_rtcp/test/testAPI/test_api.cc
index 7c1a309..dd12c45 100644
--- a/src/modules/rtp_rtcp/test/testAPI/test_api.cc
+++ b/src/modules/rtp_rtcp/test/testAPI/test_api.cc
@@ -33,13 +33,15 @@
~RtpRtcpAPITest() {}
virtual void SetUp() {
- module = RtpRtcp::CreateRtpRtcp(test_id, true, &fake_clock);
- EXPECT_EQ(0, module->InitReceiver());
- EXPECT_EQ(0, module->InitSender());
+ RtpRtcp::Configuration configuration;
+ configuration.id = test_id;
+ configuration.audio = true;
+ configuration.clock = &fake_clock;
+ module = RtpRtcp::CreateRtpRtcp(configuration);
}
virtual void TearDown() {
- RtpRtcp::DestroyRtpRtcp(module);
+ delete module;
}
int test_id;
diff --git a/src/modules/rtp_rtcp/test/testAPI/test_api.h b/src/modules/rtp_rtcp/test/testAPI/test_api.h
index c4ff916..ed9d75a 100644
--- a/src/modules/rtp_rtcp/test/testAPI/test_api.h
+++ b/src/modules/rtp_rtcp/test/testAPI/test_api.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -40,10 +40,13 @@
// with optional packet loss.
class LoopBackTransport : public webrtc::Transport {
public:
- LoopBackTransport(RtpRtcp* rtpRtcpModule)
+ LoopBackTransport()
: _count(0),
_packetLoss(0),
- _rtpRtcpModule(rtpRtcpModule) {
+ _rtpRtcpModule(NULL) {
+ }
+ void SetSendModule(RtpRtcp* rtpRtcpModule) {
+ _rtpRtcpModule = rtpRtcpModule;
}
void DropEveryNthPacket(int n) {
_packetLoss = n;
diff --git a/src/modules/rtp_rtcp/test/testAPI/test_api_audio.cc b/src/modules/rtp_rtcp/test/testAPI/test_api_audio.cc
index e92f8b6..25b91a0 100644
--- a/src/modules/rtp_rtcp/test/testAPI/test_api_audio.cc
+++ b/src/modules/rtp_rtcp/test/testAPI/test_api_audio.cc
@@ -24,8 +24,6 @@
class VerifyingAudioReceiver : public RtpData {
public:
- VerifyingAudioReceiver(RtpRtcp* rtpRtcpModule) {}
-
virtual WebRtc_Word32 OnReceivedPayloadData(
const WebRtc_UWord8* payloadData,
const WebRtc_UWord16 payloadSize,
@@ -132,30 +130,41 @@
~RtpRtcpAudioTest() {}
virtual void SetUp() {
- module1 = RtpRtcp::CreateRtpRtcp(test_id, true, &fake_clock);
- module2 = RtpRtcp::CreateRtpRtcp(test_id+1, true, &fake_clock);
-
- EXPECT_EQ(0, module1->InitReceiver());
- EXPECT_EQ(0, module1->InitSender());
- EXPECT_EQ(0, module2->InitReceiver());
- EXPECT_EQ(0, module2->InitSender());
- data_receiver1 = new VerifyingAudioReceiver(module1);
- EXPECT_EQ(0, module1->RegisterIncomingDataCallback(data_receiver1));
- data_receiver2 = new VerifyingAudioReceiver(module2);
- EXPECT_EQ(0, module2->RegisterIncomingDataCallback(data_receiver2));
- transport1 = new LoopBackTransport(module2);
- EXPECT_EQ(0, module1->RegisterSendTransport(transport1));
- transport2 = new LoopBackTransport(module1);
- EXPECT_EQ(0, module2->RegisterSendTransport(transport2));
+ audioFeedback = new AudioFeedback();
+ data_receiver1 = new VerifyingAudioReceiver();
+ data_receiver2 = new VerifyingAudioReceiver();
rtp_callback = new RTPCallback();
- EXPECT_EQ(0, module2->RegisterIncomingRTPCallback(rtp_callback));
+ transport1 = new LoopBackTransport();
+ transport2 = new LoopBackTransport();
+
+ RtpRtcp::Configuration configuration;
+ configuration.id = test_id;
+ configuration.audio = true;
+ configuration.clock = &fake_clock;
+ configuration.incoming_data = data_receiver1;
+ configuration.outgoing_transport = transport1;
+ configuration.audio_messages = audioFeedback;
+
+ module1 = RtpRtcp::CreateRtpRtcp(configuration);
+
+ configuration.id = test_id + 1;
+ configuration.incoming_data = data_receiver2;
+ configuration.incoming_messages = rtp_callback;
+ configuration.outgoing_transport = transport2;
+ configuration.audio_messages = audioFeedback;
+
+ module2 = RtpRtcp::CreateRtpRtcp(configuration);
+
+ transport1->SetSendModule(module2);
+ transport2->SetSendModule(module1);
}
virtual void TearDown() {
- RtpRtcp::DestroyRtpRtcp(module1);
- RtpRtcp::DestroyRtpRtcp(module2);
+ delete module1;
+ delete module2;
delete transport1;
delete transport2;
+ delete audioFeedback;
delete data_receiver1;
delete data_receiver2;
delete rtp_callback;
@@ -168,6 +177,7 @@
VerifyingAudioReceiver* data_receiver2;
LoopBackTransport* transport1;
LoopBackTransport* transport2;
+ AudioFeedback* audioFeedback;
RTPCallback* rtp_callback;
WebRtc_UWord32 test_ssrc;
WebRtc_UWord32 test_timestamp;
@@ -283,9 +293,6 @@
EXPECT_EQ(0, module1->SetStartTimestamp(test_timestamp));
EXPECT_EQ(0, module1->SetSendingStatus(true));
- AudioFeedback* audioFeedback = new AudioFeedback();
- EXPECT_EQ(0, module2->RegisterAudioCallback(audioFeedback));
-
// Prepare for DTMF.
voiceCodec.pltype = 97;
voiceCodec.plfreq = 8000;
diff --git a/src/modules/rtp_rtcp/test/testAPI/test_api_nack.cc b/src/modules/rtp_rtcp/test/testAPI/test_api_nack.cc
index ec4d2bb..ad4dd6a 100644
--- a/src/modules/rtp_rtcp/test/testAPI/test_api_nack.cc
+++ b/src/modules/rtp_rtcp/test/testAPI/test_api_nack.cc
@@ -50,12 +50,15 @@
class NackLoopBackTransport : public webrtc::Transport {
public:
- NackLoopBackTransport(RtpRtcp* rtp_rtcp_module, uint32_t rtx_ssrc)
+ NackLoopBackTransport(uint32_t rtx_ssrc)
: count_(0),
packet_loss_(0),
rtx_ssrc_(rtx_ssrc),
count_rtx_ssrc_(0),
- module_(rtp_rtcp_module) {
+ module_(NULL) {
+ }
+ void SetSendModule(RtpRtcp* rtpRtcpModule) {
+ module_ = rtpRtcpModule;
}
void DropEveryNthPacket(int n) {
packet_loss_ = n;
@@ -95,9 +98,17 @@
~RtpRtcpNackTest() {}
virtual void SetUp() {
- video_module_ = RtpRtcp::CreateRtpRtcp(kTestId, false, &fake_clock);
- EXPECT_EQ(0, video_module_->InitReceiver());
- EXPECT_EQ(0, video_module_->InitSender());
+ transport_ = new NackLoopBackTransport(kTestSsrc + 1);
+ nack_receiver_ = new VerifyingNackReceiver();
+
+ RtpRtcp::Configuration configuration;
+ configuration.id = kTestId;
+ configuration.audio = false;
+ configuration.clock = &fake_clock;
+ configuration.incoming_data = nack_receiver_;
+ configuration.outgoing_transport = transport_;
+ video_module_ = RtpRtcp::CreateRtpRtcp(configuration);
+
EXPECT_EQ(0, video_module_->SetRTCPStatus(kRtcpCompound));
EXPECT_EQ(0, video_module_->SetSSRC(kTestSsrc));
EXPECT_EQ(0, video_module_->SetNACKStatus(kNackRtcp));
@@ -106,11 +117,7 @@
EXPECT_EQ(0, video_module_->SetSequenceNumber(kTestSequenceNumber));
EXPECT_EQ(0, video_module_->SetStartTimestamp(111111));
- transport_ = new NackLoopBackTransport(video_module_, kTestSsrc + 1);
- EXPECT_EQ(0, video_module_->RegisterSendTransport(transport_));
-
- nack_receiver_ = new VerifyingNackReceiver();
- EXPECT_EQ(0, video_module_->RegisterIncomingDataCallback(nack_receiver_));
+ transport_->SetSendModule(video_module_);
VideoCodec video_codec;
memset(&video_codec, 0, sizeof(video_codec));
@@ -128,7 +135,7 @@
}
virtual void TearDown() {
- RtpRtcp::DestroyRtpRtcp(video_module_);
+ delete video_module_;
delete transport_;
delete nack_receiver_;
}
diff --git a/src/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc b/src/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
index 9773620..bdf3c6b 100644
--- a/src/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
+++ b/src/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
@@ -24,7 +24,7 @@
class RtcpCallback : public RtcpFeedback, public RtcpIntraFrameObserver {
public:
- RtcpCallback(RtpRtcp* module) {
+ void SetModule(RtpRtcp* module) {
_rtpRtcpModule = module;
};
virtual void OnRTCPPacketTimeout(const WebRtc_Word32 id) {
@@ -85,32 +85,32 @@
~RtpRtcpRtcpTest() {}
virtual void SetUp() {
- module1 = RtpRtcp::CreateRtpRtcp(test_id, true, &fake_clock);
- module2 = RtpRtcp::CreateRtpRtcp(test_id+1, true, &fake_clock);
-
- EXPECT_EQ(0, module1->InitReceiver());
- EXPECT_EQ(0, module1->InitSender());
- EXPECT_EQ(0, module2->InitReceiver());
- EXPECT_EQ(0, module2->InitSender());
receiver = new RtpReceiver();
- EXPECT_EQ(0, module2->RegisterIncomingDataCallback(receiver));
- transport1 = new LoopBackTransport(module2);
- EXPECT_EQ(0, module1->RegisterSendTransport(transport1));
- transport2 = new LoopBackTransport(module1);
- EXPECT_EQ(0, module2->RegisterSendTransport(transport2));
- }
+ transport1 = new LoopBackTransport();
+ transport2 = new LoopBackTransport();
+ myRTCPFeedback1 = new RtcpCallback();
+ myRTCPFeedback2 = new RtcpCallback();
- virtual void TearDown() {
- RtpRtcp::DestroyRtpRtcp(module1);
- RtpRtcp::DestroyRtpRtcp(module2);
- delete transport1;
- delete transport2;
- delete receiver;
- }
+ RtpRtcp::Configuration configuration;
+ configuration.id = test_id;
+ configuration.audio = false;
+ configuration.clock = &fake_clock;
+ configuration.outgoing_transport = transport1;
+ configuration.rtcp_feedback = myRTCPFeedback1;
+ configuration.intra_frame_callback = myRTCPFeedback1;
- void SetUpCallFromModule1(RtcpCallback* feedback1, RtcpCallback* feedback2 ) {
- module1->RegisterRtcpObservers(feedback1, NULL, feedback1);
- module2->RegisterRtcpObservers(feedback2, NULL, feedback2);
+ module1 = RtpRtcp::CreateRtpRtcp(configuration);
+
+ configuration.id = test_id + 1;
+ configuration.outgoing_transport = transport2;
+ configuration.rtcp_feedback = myRTCPFeedback2;
+ configuration.intra_frame_callback = myRTCPFeedback2;
+ module2 = RtpRtcp::CreateRtpRtcp(configuration);
+
+ transport1->SetSendModule(module2);
+ transport2->SetSendModule(module1);
+ myRTCPFeedback1->SetModule(module1);
+ myRTCPFeedback2->SetModule(module2);
EXPECT_EQ(0, module1->SetRTCPStatus(kRtcpCompound));
EXPECT_EQ(0, module2->SetRTCPStatus(kRtcpCompound));
@@ -143,12 +143,23 @@
0, test, 8));
}
+ virtual void TearDown() {
+ delete module1;
+ delete module2;
+ delete transport1;
+ delete transport2;
+ delete receiver;
+ }
+
int test_id;
RtpRtcp* module1;
RtpRtcp* module2;
RtpReceiver* receiver;
LoopBackTransport* transport1;
LoopBackTransport* transport2;
+ RtcpCallback* myRTCPFeedback1;
+ RtcpCallback* myRTCPFeedback2;
+
WebRtc_UWord32 test_ssrc;
WebRtc_UWord32 test_timestamp;
WebRtc_UWord16 test_sequence_number;
@@ -157,20 +168,11 @@
};
TEST_F(RtpRtcpRtcpTest, RTCP_PLI_RPSI) {
- RtcpCallback* myRTCPFeedback1 = new RtcpCallback(module1);
- RtcpCallback* myRTCPFeedback2 = new RtcpCallback(module2);
-
- SetUpCallFromModule1(myRTCPFeedback1, myRTCPFeedback2);
-
EXPECT_EQ(0, module1->SendRTCPReferencePictureSelection(kTestPictureId));
EXPECT_EQ(0, module1->SendRTCPSliceLossIndication(156));
}
TEST_F(RtpRtcpRtcpTest, RTCP_CNAME) {
- RtcpCallback* myRTCPFeedback1 = new RtcpCallback(module1);
- RtcpCallback* myRTCPFeedback2 = new RtcpCallback(module2);
-
- SetUpCallFromModule1(myRTCPFeedback1, myRTCPFeedback2);
WebRtc_UWord32 testOfCSRC[webrtc::kRtpCsrcSize];
EXPECT_EQ(2, module2->RemoteCSRCs(testOfCSRC));
EXPECT_EQ(test_CSRC[0], testOfCSRC[0]);
@@ -210,10 +212,6 @@
}
TEST_F(RtpRtcpRtcpTest, RTCP) {
- RtcpCallback* myRTCPFeedback1 = new RtcpCallback(module1);
- RtcpCallback* myRTCPFeedback2 = new RtcpCallback(module2);
-
- SetUpCallFromModule1(myRTCPFeedback1, myRTCPFeedback2);
RTCPReportBlock reportBlock;
reportBlock.cumulativeLost = 1;
reportBlock.delaySinceLastSR = 2;
@@ -316,10 +314,6 @@
TEST_F(RtpRtcpRtcpTest, RemoteRTCPStatRemote) {
std::vector<RTCPReportBlock> report_blocks;
- RtcpCallback feedback1(module1);
- RtcpCallback feedback2(module2);
-
- SetUpCallFromModule1(&feedback1, &feedback2);
EXPECT_EQ(0, module1->RemoteRTCPStat(&report_blocks));
EXPECT_EQ(0u, report_blocks.size());
diff --git a/src/modules/rtp_rtcp/test/testAPI/test_api_video.cc b/src/modules/rtp_rtcp/test/testAPI/test_api_video.cc
index 7a06ef7..c5b134a 100644
--- a/src/modules/rtp_rtcp/test/testAPI/test_api_video.cc
+++ b/src/modules/rtp_rtcp/test/testAPI/test_api_video.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -31,20 +31,24 @@
~RtpRtcpVideoTest() {}
virtual void SetUp() {
- video_module = RtpRtcp::CreateRtpRtcp(test_id, false, &fake_clock);
- EXPECT_EQ(0, video_module->InitReceiver());
- EXPECT_EQ(0, video_module->InitSender());
+ transport = new LoopBackTransport();
+ receiver = new RtpReceiver();
+ RtpRtcp::Configuration configuration;
+ configuration.id = test_id;
+ configuration.audio = false;
+ configuration.clock = &fake_clock;
+ configuration.incoming_data = receiver;
+ configuration.outgoing_transport = transport;
+
+ video_module = RtpRtcp::CreateRtpRtcp(configuration);
+
EXPECT_EQ(0, video_module->SetRTCPStatus(kRtcpCompound));
EXPECT_EQ(0, video_module->SetSSRC(test_ssrc));
EXPECT_EQ(0, video_module->SetNACKStatus(kNackRtcp));
EXPECT_EQ(0, video_module->SetStorePacketsStatus(true));
EXPECT_EQ(0, video_module->SetSendingStatus(true));
- transport = new LoopBackTransport(video_module);
- EXPECT_EQ(0, video_module->RegisterSendTransport(transport));
-
- receiver = new RtpReceiver();
- EXPECT_EQ(0, video_module->RegisterIncomingDataCallback(receiver));
+ transport->SetSendModule(video_module);
VideoCodec video_codec;
memset(&video_codec, 0, sizeof(video_codec));
@@ -62,7 +66,7 @@
}
virtual void TearDown() {
- RtpRtcp::DestroyRtpRtcp(video_module);
+ delete video_module;
delete transport;
delete receiver;
}
diff --git a/src/modules/video_coding/main/test/generic_codec_test.cc b/src/modules/video_coding/main/test/generic_codec_test.cc
index 56b3c86..8d12325 100644
--- a/src/modules/video_coding/main/test/generic_codec_test.cc
+++ b/src/modules/video_coding/main/test/generic_codec_test.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -398,10 +398,14 @@
/********************************/
/* Encoder Packet Size Test */
/********************************/
- RtpRtcp& rtpModule = *RtpRtcp::CreateRtpRtcp(1, false);
- TEST(rtpModule.InitSender() == 0);
RTPSendCallback_SizeTest sendCallback;
- rtpModule.RegisterSendTransport(&sendCallback);
+
+ RtpRtcp::Configuration configuration;
+ configuration.id = 1;
+ configuration.audio = false;
+ configuration.outgoing_transport = &sendCallback;
+
+ RtpRtcp& rtpModule = *RtpRtcp::CreateRtpRtcp(configuration);
VCMRTPEncodeCompleteCallback encCompleteCallback(&rtpModule);
_vcm->InitializeSender();
@@ -485,7 +489,7 @@
IncrementDebugClock(_frameRate);
} // first frame encoded
- RtpRtcp::DestroyRtpRtcp(&rtpModule);
+ delete &rtpModule;
Print();
delete tmpBuffer;
delete _decodeCallback;
diff --git a/src/modules/video_coding/main/test/media_opt_test.cc b/src/modules/video_coding/main/test/media_opt_test.cc
index f7679197..b20fce8 100644
--- a/src/modules/video_coding/main/test/media_opt_test.cc
+++ b/src/modules/video_coding/main/test/media_opt_test.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -19,8 +19,6 @@
#include <vector>
#include "../source/event.h"
-#include "receiver_tests.h" // receive side callbacks
-#include "test_callbacks.h"
#include "test_macros.h"
#include "test_util.h" // send side callback
#include "testsupport/metrics/video_metrics.h"
@@ -67,35 +65,34 @@
}
-MediaOptTest::MediaOptTest(VideoCodingModule* vcm, TickTimeBase* clock):
-_vcm(vcm),
-_clock(clock),
-_width(0),
-_height(0),
-_lengthSourceFrame(0),
-_timeStamp(0),
-_frameRate(30.0f),
-_nackEnabled(false),
-_fecEnabled(false),
-_rttMS(0),
-_bitRate(300.0f),
-_lossRate(0.0f),
-_renderDelayMs(0),
-_frameCnt(0),
-_sumEncBytes(0),
-_numFramesDropped(0),
-_numberOfCores(4)
-{
- _rtp = RtpRtcp::CreateRtpRtcp(1, false);
+MediaOptTest::MediaOptTest(VideoCodingModule* vcm, TickTimeBase* clock)
+ : _vcm(vcm),
+ _rtp(NULL),
+ _outgoingTransport(NULL),
+ _dataCallback(NULL),
+ _clock(clock),
+ _width(0),
+ _height(0),
+ _lengthSourceFrame(0),
+ _timeStamp(0),
+ _frameRate(30.0f),
+ _nackEnabled(false),
+ _fecEnabled(false),
+ _rttMS(0),
+ _bitRate(300.0f),
+ _lossRate(0.0f),
+ _renderDelayMs(0),
+ _frameCnt(0),
+ _sumEncBytes(0),
+ _numFramesDropped(0),
+ _numberOfCores(4) {
}
-MediaOptTest::~MediaOptTest()
-{
- RtpRtcp::DestroyRtpRtcp(_rtp);
+MediaOptTest::~MediaOptTest() {
+ delete _rtp;
}
-void
-MediaOptTest::Setup(int testType, CmdArgs& args)
-{
+
+void MediaOptTest::Setup(int testType, CmdArgs& args) {
/*TEST USER SETTINGS*/
// test parameters
_inname = args.inputFile;
@@ -168,7 +165,6 @@
_lengthSourceFrame = 3*_width*_height/2;
_log.open((test::OutputPath() + "VCM_MediaOptLog.txt").c_str(),
std::fstream::out | std::fstream::app);
- return;
}
void
@@ -193,15 +189,6 @@
printf("Cannot read file %s.\n", _actualSourcename.c_str());
exit(1);
}
-
- if (_rtp->InitReceiver() < 0)
- {
- exit(1);
- }
- if (_rtp->InitSender() < 0)
- {
- exit(1);
- }
if (_vcm->InitializeReceiver() < 0)
{
exit(1);
@@ -210,6 +197,17 @@
{
exit(1);
}
+ _outgoingTransport = new RTPSendCompleteCallback(_clock);
+ _dataCallback = new RtpDataCallback(_vcm);
+
+ RtpRtcp::Configuration configuration;
+ configuration.id = 1;
+ configuration.audio = false;
+ configuration.incoming_data = _dataCallback;
+ configuration.outgoing_transport = _outgoingTransport;
+ _rtp = RtpRtcp::CreateRtpRtcp(configuration);
+
+ _outgoingTransport->SetRtpModule(_rtp);
// Registering codecs for the RTP module
@@ -262,8 +260,6 @@
_vcm->SetRenderDelay(_renderDelayMs);
_vcm->SetMinimumPlayoutDelay(minPlayoutDelayMs);
-
- return;
}
// The following test shall be conducted under release tests
@@ -272,33 +268,23 @@
WebRtc_Word32
MediaOptTest::Perform()
{
- //Setup();
- EventWrapper* waitEvent = EventWrapper::Create();
+ VCMDecodeCompleteCallback receiveCallback(_decodedFile);
- // callback settings
VCMRTPEncodeCompleteCallback* encodeCompleteCallback = new VCMRTPEncodeCompleteCallback(_rtp);
_vcm->RegisterTransportCallback(encodeCompleteCallback);
encodeCompleteCallback->SetCodecType(ConvertCodecType(_codecName.c_str()));
encodeCompleteCallback->SetFrameDimensions(_width, _height);
- // frame ready to be sent to network
- RTPSendCompleteCallback* outgoingTransport =
- new RTPSendCompleteCallback(_rtp, _clock);
- _rtp->RegisterSendTransport(outgoingTransport);
- //FrameReceiveCallback
- VCMDecodeCompleteCallback receiveCallback(_decodedFile);
- RtpDataCallback dataCallback(_vcm);
- _rtp->RegisterIncomingDataCallback(&dataCallback);
+ // callback settings
VideoProtectionCallback protectionCallback;
protectionCallback.RegisterRtpModule(_rtp);
_vcm->RegisterProtectionCallback(&protectionCallback);
// set error resilience / test parameters:
- outgoingTransport->SetLossPct(_lossRate);
- if (_nackFecEnabled == 1)
+ _outgoingTransport->SetLossPct(_lossRate);
+ if (_nackFecEnabled == 1) {
_vcm->SetVideoProtection(kProtectionNackFEC, _nackFecEnabled);
- else
- {
+ } else {
_vcm->SetVideoProtection(kProtectionNack, _nackEnabled);
_vcm->SetVideoProtection(kProtectionFEC, _fecEnabled);
}
@@ -349,13 +335,10 @@
}
_sumEncBytes += encBytes;
- //waitEvent->Wait(33);
}
//END TEST
- delete waitEvent;
delete encodeCompleteCallback;
- delete outgoingTransport;
delete tmpBuffer;
return 0;
@@ -441,17 +424,10 @@
printf("**FOR RUN: **%d %d %d %d \n",_nackEnabled,_fecEnabled,int(lossPctVec[j]),int(_bitRate));
*/
- if (_rtp != NULL)
- {
- RtpRtcp::DestroyRtpRtcp(_rtp);
- }
- _rtp = RtpRtcp::CreateRtpRtcp(1, false);
GeneralSetup();
Perform();
Print(1);
TearDown();
- RtpRtcp::DestroyRtpRtcp(_rtp);
- _rtp = NULL;
printf("\n");
//printf("**DONE WITH RUN: **%d %d %f %d \n",_nackEnabled,_fecEnabled,lossPctVec[j],int(_bitRate));
@@ -549,12 +525,15 @@
TEST(psnr.average > 10); // low becuase of possible frame dropping (need to verify that OK for all packet loss values/ rates)
}
-void
-MediaOptTest::TearDown()
-{
- _log.close();
- fclose(_sourceFile);
- fclose(_decodedFile);
- fclose(_actualSourceFile);
- return;
+void MediaOptTest::TearDown() {
+ delete _rtp;
+ _rtp = NULL;
+ delete _outgoingTransport;
+ _outgoingTransport = NULL;
+ delete _dataCallback;
+ _dataCallback = NULL;
+ _log.close();
+ fclose(_sourceFile);
+ fclose(_decodedFile);
+ fclose(_actualSourceFile);
}
diff --git a/src/modules/video_coding/main/test/media_opt_test.h b/src/modules/video_coding/main/test/media_opt_test.h
index 7d4e226..5f210e6 100644
--- a/src/modules/video_coding/main/test/media_opt_test.h
+++ b/src/modules/video_coding/main/test/media_opt_test.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -15,7 +15,9 @@
#include <string>
+#include "receiver_tests.h" // receive side callbacks
#include "rtp_rtcp.h"
+#include "test_callbacks.h"
#include "test_util.h"
#include "video_coding.h"
#include "video_source.h"
@@ -52,6 +54,9 @@
webrtc::VideoCodingModule* _vcm;
webrtc::RtpRtcp* _rtp;
+ webrtc::RTPSendCompleteCallback* _outgoingTransport;
+ RtpDataCallback* _dataCallback;
+
webrtc::TickTimeBase* _clock;
std::string _inname;
std::string _outname;
diff --git a/src/modules/video_coding/main/test/mt_rx_tx_test.cc b/src/modules/video_coding/main/test/mt_rx_tx_test.cc
index dc20b32..3eac939 100644
--- a/src/modules/video_coding/main/test/mt_rx_tx_test.cc
+++ b/src/modules/video_coding/main/test/mt_rx_tx_test.cc
@@ -138,17 +138,20 @@
printf("Cannot read file %s.\n", outname.c_str());
return -1;
}
+ TickTimeBase clock;
+ VideoCodingModule* vcm = VideoCodingModule::Create(1, &clock);
+ RtpDataCallback dataCallback(vcm);
- //RTP
- RtpRtcp* rtp = RtpRtcp::CreateRtpRtcp(1, false);
- if (rtp->InitReceiver() < 0)
- {
- return -1;
- }
- if (rtp->InitSender() < 0)
- {
- return -1;
- }
+ RTPSendCompleteCallback* outgoingTransport =
+ new RTPSendCompleteCallback(&clock, "dump.rtp");
+
+ RtpRtcp::Configuration configuration;
+ configuration.id = 1;
+ configuration.audio = false;
+ configuration.incoming_data = &dataCallback;
+ configuration.outgoing_transport = outgoingTransport;
+ RtpRtcp* rtp = RtpRtcp::CreateRtpRtcp(configuration);
+
// registering codecs for the RTP module
VideoCodec videoCodec;
strncpy(videoCodec.plName, "ULPFEC", 32);
@@ -170,8 +173,6 @@
TEST(rtp->SetGenericFECStatus(fecEnabled, VCM_RED_PAYLOAD_TYPE, VCM_ULPFEC_PAYLOAD_TYPE) == 0);
//VCM
- TickTimeBase clock;
- VideoCodingModule* vcm = VideoCodingModule::Create(1, &clock);
if (vcm->InitializeReceiver() < 0)
{
return -1;
@@ -216,13 +217,8 @@
encodeCompleteCallback->SetCodecType(ConvertCodecType(args.codecName.c_str()));
encodeCompleteCallback->SetFrameDimensions(width, height);
// frame ready to be sent to network
- RTPSendCompleteCallback* outgoingTransport =
- new RTPSendCompleteCallback(rtp, &clock, "dump.rtp");
- rtp->RegisterSendTransport(outgoingTransport);
- // FrameReceiveCallback
+
VCMDecodeCompleteCallback receiveCallback(decodedFile);
- RtpDataCallback dataCallback(vcm);
- rtp->RegisterIncomingDataCallback(&dataCallback);
vcm->RegisterReceiveCallback(&receiveCallback);
VideoProtectionCallback protectionCallback;
@@ -351,7 +347,7 @@
delete encodeCompleteCallback;
delete outgoingTransport;
VideoCodingModule::Destroy(vcm);
- RtpRtcp::DestroyRtpRtcp(rtp);
+ delete rtp;
rtp = NULL;
vcm = NULL;
Trace::ReturnTrace();
diff --git a/src/modules/video_coding/main/test/mt_test_common.cc b/src/modules/video_coding/main/test/mt_test_common.cc
index e3ebd97..ece0d9c 100644
--- a/src/modules/video_coding/main/test/mt_test_common.cc
+++ b/src/modules/video_coding/main/test/mt_test_common.cc
@@ -17,12 +17,8 @@
namespace webrtc {
-TransportCallback::TransportCallback(webrtc::RtpRtcp* rtp,
- TickTimeBase* clock,
- const char* filename):
-RTPSendCompleteCallback(rtp, clock, filename)
-{
- //
+TransportCallback::TransportCallback(TickTimeBase* clock, const char* filename)
+ : RTPSendCompleteCallback(clock, filename) {
}
TransportCallback::~TransportCallback()
diff --git a/src/modules/video_coding/main/test/mt_test_common.h b/src/modules/video_coding/main/test/mt_test_common.h
index 438f0be..c17d269 100644
--- a/src/modules/video_coding/main/test/mt_test_common.h
+++ b/src/modules/video_coding/main/test/mt_test_common.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -47,8 +47,7 @@
{
public:
// constructor input: (receive side) rtp module to send encoded data to
- TransportCallback(webrtc::RtpRtcp* rtp, TickTimeBase* clock,
- const char* filename = NULL);
+ TransportCallback(TickTimeBase* clock, const char* filename = NULL);
virtual ~TransportCallback();
// Add packets to list
// Incorporate network conditions - delay and packet loss
diff --git a/src/modules/video_coding/main/test/receiver_tests.h b/src/modules/video_coding/main/test/receiver_tests.h
index 33d9f5f..cb45ca1 100644
--- a/src/modules/video_coding/main/test/receiver_tests.h
+++ b/src/modules/video_coding/main/test/receiver_tests.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
diff --git a/src/modules/video_coding/main/test/rtp_player.cc b/src/modules/video_coding/main/test/rtp_player.cc
index 5361e31..9eacf34 100644
--- a/src/modules/video_coding/main/test/rtp_player.cc
+++ b/src/modules/video_coding/main/test/rtp_player.cc
@@ -140,7 +140,7 @@
TickTimeBase* clock)
:
_clock(clock),
-_rtpModule(*RtpRtcp::CreateRtpRtcp(1, false)),
+_rtpModule(NULL),
_nextRtpTime(0),
_dataCallback(callback),
_firstPacket(true),
@@ -165,7 +165,7 @@
RTPPlayer::~RTPPlayer()
{
- RtpRtcp::DestroyRtpRtcp(&_rtpModule);
+ delete _rtpModule;
if (_rtpFile != NULL)
{
fclose(_rtpFile);
@@ -179,28 +179,26 @@
WebRtc_Word32 RTPPlayer::Initialize(const PayloadTypeList* payloadList)
{
+ RtpRtcp::Configuration configuration;
+ configuration.id = 1;
+ configuration.audio = false;
+ configuration.incoming_data = _dataCallback;
+ _rtpModule = RtpRtcp::CreateRtpRtcp(configuration);
+
std::srand(321);
for (int i=0; i < RAND_VEC_LENGTH; i++)
{
_randVec[i] = rand();
}
_randVecPos = 0;
- WebRtc_Word32 ret = _rtpModule.SetNACKStatus(kNackOff);
+ WebRtc_Word32 ret = _rtpModule->SetNACKStatus(kNackOff);
if (ret < 0)
{
return -1;
}
- ret = _rtpModule.InitReceiver();
- if (ret < 0)
- {
- return -1;
- }
+ _rtpModule->SetRTCPStatus(kRtcpNonCompound);
+ _rtpModule->SetTMMBRStatus(true);
- _rtpModule.InitSender();
- _rtpModule.SetRTCPStatus(kRtcpNonCompound);
- _rtpModule.SetTMMBRStatus(true);
-
- ret = _rtpModule.RegisterIncomingDataCallback(_dataCallback);
if (ret < 0)
{
return -1;
@@ -214,7 +212,7 @@
VideoCodec videoCodec;
strncpy(videoCodec.plName, payloadType->name.c_str(), 32);
videoCodec.plType = payloadType->payloadType;
- if (_rtpModule.RegisterReceivePayload(videoCodec) < 0)
+ if (_rtpModule->RegisterReceivePayload(videoCodec) < 0)
{
return -1;
}
@@ -305,7 +303,7 @@
// Send any packets from rtp file
if (!_endOfFile && (TimeUntilNextPacket() == 0 || _firstPacket))
{
- _rtpModule.Process();
+ _rtpModule->Process();
if (_firstPacket)
{
_firstPacketRtpTime = static_cast<WebRtc_Word64>(_nextRtpTime);
@@ -362,7 +360,7 @@
}
else if (rtpLen > 0)
{
- WebRtc_Word32 ret = _rtpModule.IncomingPacket(rtpData, rtpLen);
+ WebRtc_Word32 ret = _rtpModule->IncomingPacket(rtpData, rtpLen);
if (ret < 0)
{
return -1;
diff --git a/src/modules/video_coding/main/test/rtp_player.h b/src/modules/video_coding/main/test/rtp_player.h
index eac6ba8..9920d0c 100644
--- a/src/modules/video_coding/main/test/rtp_player.h
+++ b/src/modules/video_coding/main/test/rtp_player.h
@@ -95,7 +95,7 @@
WebRtc_Word32 ReadHeader();
webrtc::TickTimeBase* _clock;
FILE* _rtpFile;
- webrtc::RtpRtcp& _rtpModule;
+ webrtc::RtpRtcp* _rtpModule;
WebRtc_UWord32 _nextRtpTime;
webrtc::RtpData* _dataCallback;
bool _firstPacket;
diff --git a/src/modules/video_coding/main/test/test_callbacks.cc b/src/modules/video_coding/main/test/test_callbacks.cc
index da28073..348cbcc 100644
--- a/src/modules/video_coding/main/test/test_callbacks.cc
+++ b/src/modules/video_coding/main/test/test_callbacks.cc
@@ -195,12 +195,11 @@
return _decodedBytes;
}
-RTPSendCompleteCallback::RTPSendCompleteCallback(RtpRtcp* rtp,
- TickTimeBase* clock,
+RTPSendCompleteCallback::RTPSendCompleteCallback(TickTimeBase* clock,
const char* filename):
_clock(clock),
_sendCount(0),
- _rtp(rtp),
+ _rtp(NULL),
_lossPct(0),
_burstLength(0),
_networkDelayMs(0),
@@ -282,6 +281,7 @@
}
_rtpPackets.pop_front();
+ assert(_rtp); // We must have a configured RTP module for this test.
// Send to receive side
if (_rtp->IncomingPacket((const WebRtc_UWord8*)packet->data,
packet->length) < 0)
diff --git a/src/modules/video_coding/main/test/test_callbacks.h b/src/modules/video_coding/main/test/test_callbacks.h
index 2c25931..9f179e2 100644
--- a/src/modules/video_coding/main/test/test_callbacks.h
+++ b/src/modules/video_coding/main/test/test_callbacks.h
@@ -155,9 +155,11 @@
{
public:
// Constructor input: (receive side) rtp module to send encoded data to
- RTPSendCompleteCallback(RtpRtcp* rtp, TickTimeBase* clock,
+ RTPSendCompleteCallback(TickTimeBase* clock,
const char* filename = NULL);
virtual ~RTPSendCompleteCallback();
+
+ void SetRtpModule(RtpRtcp* rtp_module) { _rtp = rtp_module; }
// Send Packet to receive side RTP module
virtual int SendPacket(int channel, const void *data, int len);
// Send RTCP Packet to receive side RTP module