Update talk to 50918584.
Together with Stefan's http://review.webrtc.org/1960004/.

R=mallinath@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2048004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4556 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/video_coding/main/interface/video_coding_defines.h b/webrtc/modules/video_coding/main/interface/video_coding_defines.h
index d4d1e9e..193475c 100644
--- a/webrtc/modules/video_coding/main/interface/video_coding_defines.h
+++ b/webrtc/modules/video_coding/main/interface/video_coding_defines.h
@@ -121,8 +121,8 @@
 // Callback class used for informing the user of the incoming bit rate and frame rate.
 class VCMReceiveStatisticsCallback {
  public:
-  virtual int32_t ReceiveStatistics(const uint32_t bitRate,
-                                          const uint32_t frameRate) = 0;
+  virtual int32_t OnReceiveStatisticsUpdate(const uint32_t bitRate,
+                                            const uint32_t frameRate) = 0;
 
  protected:
   virtual ~VCMReceiveStatisticsCallback() {
diff --git a/webrtc/modules/video_coding/main/source/decoding_state_unittest.cc b/webrtc/modules/video_coding/main/source/decoding_state_unittest.cc
index ccfe798..f07548f 100644
--- a/webrtc/modules/video_coding/main/source/decoding_state_unittest.cc
+++ b/webrtc/modules/video_coding/main/source/decoding_state_unittest.cc
@@ -36,7 +36,7 @@
   packet->timestamp = 1;
   packet->seqNum = 0xffff;
   packet->frameType = kVideoFrameDelta;
-  packet->codecSpecificHeader.codec = kRTPVideoVP8;
+  packet->codecSpecificHeader.codec = kRtpVideoVp8;
   packet->codecSpecificHeader.codecHeader.VP8.pictureId = 0x007F;
   FrameData frame_data;
   frame_data.rtt_ms = 0;
@@ -213,7 +213,7 @@
   VCMFrameBuffer frame;
   VCMPacket* packet = new VCMPacket();
   packet->frameType = kVideoFrameDelta;
-  packet->codecSpecificHeader.codec = kRTPVideoVP8;
+  packet->codecSpecificHeader.codec = kRtpVideoVp8;
   packet->timestamp = 0;
   packet->seqNum = 0;
   packet->codecSpecificHeader.codecHeader.VP8.tl0PicIdx = 0;
@@ -369,7 +369,7 @@
   VCMPacket packet;
   frame.Reset();
   packet.frameType = kVideoFrameKey;
-  packet.codecSpecificHeader.codec = kRTPVideoVP8;
+  packet.codecSpecificHeader.codec = kRtpVideoVp8;
   packet.timestamp = 0;
   packet.seqNum = 0;
   packet.codecSpecificHeader.codecHeader.VP8.tl0PicIdx = 0;
diff --git a/webrtc/modules/video_coding/main/source/encoded_frame.cc b/webrtc/modules/video_coding/main/source/encoded_frame.cc
index 76a9d74..b6ed7ce 100644
--- a/webrtc/modules/video_coding/main/source/encoded_frame.cc
+++ b/webrtc/modules/video_coding/main/source/encoded_frame.cc
@@ -104,7 +104,7 @@
     {
         switch (header->codec)
         {
-            case kRTPVideoVP8:
+            case kRtpVideoVp8:
             {
                 if (_codecSpecificInfo.codecType != kVideoCodecVP8)
                 {
diff --git a/webrtc/modules/video_coding/main/source/packet.cc b/webrtc/modules/video_coding/main/source/packet.cc
index 5dbb823..ad69418 100644
--- a/webrtc/modules/video_coding/main/source/packet.cc
+++ b/webrtc/modules/video_coding/main/source/packet.cc
@@ -94,7 +94,7 @@
 {
     switch(videoHeader.codec)
     {
-        case kRTPVideoVP8:
+        case kRtpVideoVp8:
             {
                 // Handle all packets within a frame as depending on the previous packet
                 // TODO(holmer): This should be changed to make fragments independent
@@ -111,7 +111,7 @@
                 codec = kVideoCodecVP8;
                 break;
             }
-        case kRTPVideoI420:
+        case kRtpVideoI420:
             {
                 codec = kVideoCodecI420;
                 break;
diff --git a/webrtc/modules/video_coding/main/source/session_info.cc b/webrtc/modules/video_coding/main/source/session_info.cc
index 797ad21..3e460bf 100644
--- a/webrtc/modules/video_coding/main/source/session_info.cc
+++ b/webrtc/modules/video_coding/main/source/session_info.cc
@@ -58,35 +58,35 @@
 
 int VCMSessionInfo::PictureId() const {
   if (packets_.empty() ||
-      packets_.front().codecSpecificHeader.codec != kRTPVideoVP8)
+      packets_.front().codecSpecificHeader.codec != kRtpVideoVp8)
     return kNoPictureId;
   return packets_.front().codecSpecificHeader.codecHeader.VP8.pictureId;
 }
 
 int VCMSessionInfo::TemporalId() const {
   if (packets_.empty() ||
-      packets_.front().codecSpecificHeader.codec != kRTPVideoVP8)
+      packets_.front().codecSpecificHeader.codec != kRtpVideoVp8)
     return kNoTemporalIdx;
   return packets_.front().codecSpecificHeader.codecHeader.VP8.temporalIdx;
 }
 
 bool VCMSessionInfo::LayerSync() const {
   if (packets_.empty() ||
-        packets_.front().codecSpecificHeader.codec != kRTPVideoVP8)
+        packets_.front().codecSpecificHeader.codec != kRtpVideoVp8)
     return false;
   return packets_.front().codecSpecificHeader.codecHeader.VP8.layerSync;
 }
 
 int VCMSessionInfo::Tl0PicId() const {
   if (packets_.empty() ||
-      packets_.front().codecSpecificHeader.codec != kRTPVideoVP8)
+      packets_.front().codecSpecificHeader.codec != kRtpVideoVp8)
     return kNoTl0PicIdx;
   return packets_.front().codecSpecificHeader.codecHeader.VP8.tl0PicIdx;
 }
 
 bool VCMSessionInfo::NonReference() const {
   if (packets_.empty() ||
-      packets_.front().codecSpecificHeader.codec != kRTPVideoVP8)
+      packets_.front().codecSpecificHeader.codec != kRtpVideoVp8)
     return false;
   return packets_.front().codecSpecificHeader.codecHeader.VP8.nonReference;
 }
diff --git a/webrtc/modules/video_coding/main/source/session_info_unittest.cc b/webrtc/modules/video_coding/main/source/session_info_unittest.cc
index 91d53b6..83e485e 100644
--- a/webrtc/modules/video_coding/main/source/session_info_unittest.cc
+++ b/webrtc/modules/video_coding/main/source/session_info_unittest.cc
@@ -69,7 +69,7 @@
     TestSessionInfo::SetUp();
     vp8_header_ = &packet_header_.type.Video.codecHeader.VP8;
     packet_header_.frameType = kVideoFrameDelta;
-    packet_header_.type.Video.codec = kRTPVideoVP8;
+    packet_header_.type.Video.codec = kRtpVideoVp8;
     vp8_header_->InitRTPVideoHeaderVP8();
     fragmentation_.VerifyAndAllocateFragmentationHeader(kMaxVP8Partitions);
   }
diff --git a/webrtc/modules/video_coding/main/source/video_coding_impl.cc b/webrtc/modules/video_coding/main/source/video_coding_impl.cc
index d7a3b15..c354a5a 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_impl.cc
+++ b/webrtc/modules/video_coding/main/source/video_coding_impl.cc
@@ -143,7 +143,8 @@
             uint32_t bitRate;
             uint32_t frameRate;
             _receiver.ReceiveStatistics(&bitRate, &frameRate);
-            _receiveStatsCallback->ReceiveStatistics(bitRate, frameRate);
+            _receiveStatsCallback->OnReceiveStatisticsUpdate(bitRate,
+                                                             frameRate);
         }
 
         // Size of render buffer.
diff --git a/webrtc/modules/video_coding/main/source/video_coding_impl_unittest.cc b/webrtc/modules/video_coding/main/source/video_coding_impl_unittest.cc
index d4fde8a..0a38582 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_impl_unittest.cc
+++ b/webrtc/modules/video_coding/main/source/video_coding_impl_unittest.cc
@@ -192,7 +192,7 @@
   header.header.payloadType = kUnusedPayloadType;
   header.header.ssrc = 1;
   header.header.headerLength = 12;
-  header.type.Video.codec = kRTPVideoVP8;
+  header.type.Video.codec = kRtpVideoVp8;
   for (int i = 0; i < 10; ++i) {
     EXPECT_CALL(packet_request_callback_, ResendPackets(_, _))
         .Times(0);
@@ -216,7 +216,7 @@
   header.header.payloadType = kUnusedPayloadType;
   header.header.ssrc = 1;
   header.header.headerLength = 12;
-  header.type.Video.codec = kRTPVideoVP8;
+  header.type.Video.codec = kRtpVideoVp8;
   // Insert one video frame to get one frame decoded.
   header.frameType = kVideoFrameKey;
   header.type.Video.isFirstPacket = true;
@@ -270,7 +270,7 @@
   header.header.payloadType = kUnusedPayloadType;
   header.header.ssrc = 1;
   header.header.headerLength = 12;
-  header.type.Video.codec = kRTPVideoVP8;
+  header.type.Video.codec = kRtpVideoVp8;
   header.type.Video.codecHeader.VP8.pictureId = -1;
   header.type.Video.codecHeader.VP8.tl0PicIdx = -1;
   for (int i = 0; i < 3; ++i) {
diff --git a/webrtc/modules/video_coding/main/source/video_coding_robustness_unittest.cc b/webrtc/modules/video_coding/main/source/video_coding_robustness_unittest.cc
index c8c1035..1b9f654 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_robustness_unittest.cc
+++ b/webrtc/modules/video_coding/main/source/video_coding_robustness_unittest.cc
@@ -67,7 +67,7 @@
     rtp_info.header.sequenceNumber = seq_no;
     rtp_info.header.markerBit = marker_bit;
     rtp_info.header.payloadType = video_codec_.plType;
-    rtp_info.type.Video.codec = kRTPVideoVP8;
+    rtp_info.type.Video.codec = kRtpVideoVp8;
     rtp_info.type.Video.codecHeader.VP8.InitRTPVideoHeaderVP8();
     rtp_info.type.Video.isFirstPacket = first;
 
diff --git a/webrtc/modules/video_coding/main/test/codec_database_test.cc b/webrtc/modules/video_coding/main/test/codec_database_test.cc
index b62995c..84ddcef 100644
--- a/webrtc/modules/video_coding/main/test/codec_database_test.cc
+++ b/webrtc/modules/video_coding/main/test/codec_database_test.cc
@@ -151,7 +151,7 @@
     // Testing with VP8.
     VideoCodingModule::Codec(kVideoCodecVP8, &sendCodec);
     _vcm->RegisterSendCodec(&sendCodec, 1, 1440);
-    _encodeCompleteCallback->SetCodecType(kRTPVideoVP8);
+    _encodeCompleteCallback->SetCodecType(kRtpVideoVp8);
     _vcm->InitializeReceiver();
     TEST (_vcm->AddVideoFrame(sourceFrame) == VCM_OK );
     _vcm->InitializeSender();
@@ -196,7 +196,7 @@
     VideoCodingModule::Codec(kVideoCodecVP8, &vp8EncSettings);
     _vcm->RegisterTransportCallback(_encodeCallback); // encode returns error if callback uninitialized
     _encodeCallback->RegisterReceiverVCM(_vcm);
-    _encodeCallback->SetCodecType(kRTPVideoVP8);
+    _encodeCallback->SetCodecType(kRtpVideoVp8);
     TEST(_vcm->RegisterExternalEncoder(encoder, vp8EncSettings.plType) == VCM_OK);
     TEST(_vcm->RegisterSendCodec(&vp8EncSettings, 4, 1440) == VCM_OK);
     TEST(_vcm->AddVideoFrame(sourceFrame) == VCM_OK);
@@ -232,7 +232,7 @@
     TEST(_vcm->RegisterReceiveCodec(&receiveCodec, 1, true) == VCM_OK); // Require key frame
     _vcm->RegisterTransportCallback(_encodeCallback); // encode returns error if callback uninitialized
     _encodeCallback->RegisterReceiverVCM(_vcm);
-    _encodeCallback->SetCodecType(kRTPVideoVP8);
+    _encodeCallback->SetCodecType(kRtpVideoVp8);
     TEST(_vcm->AddVideoFrame(sourceFrame) == VCM_OK);
     TEST(_vcm->Decode() == VCM_OK);
     TEST(_vcm->ResetDecoder() == VCM_OK);
diff --git a/webrtc/modules/video_coding/main/test/generic_codec_test.cc b/webrtc/modules/video_coding/main/test/generic_codec_test.cc
index 925f9ab..f976025 100644
--- a/webrtc/modules/video_coding/main/test/generic_codec_test.cc
+++ b/webrtc/modules/video_coding/main/test/generic_codec_test.cc
@@ -549,7 +549,7 @@
     WebRtcRTPHeader rtpInfo;
     rtpInfo.header.markerBit = true; // end of frame
     rtpInfo.type.Video.codecHeader.VP8.InitRTPVideoHeaderVP8();
-    rtpInfo.type.Video.codec = kRTPVideoVP8;
+    rtpInfo.type.Video.codec = kRtpVideoVp8;
     rtpInfo.header.payloadType = payloadType;
     rtpInfo.header.sequenceNumber = _seqNo;
     _seqNo += 2;
diff --git a/webrtc/modules/video_coding/main/test/media_opt_test.cc b/webrtc/modules/video_coding/main/test/media_opt_test.cc
index e2ccd87..0e6a10d 100644
--- a/webrtc/modules/video_coding/main/test/media_opt_test.cc
+++ b/webrtc/modules/video_coding/main/test/media_opt_test.cc
@@ -18,6 +18,7 @@
 #include <time.h>
 #include <vector>
 
+#include "webrtc/modules/rtp_rtcp/interface/rtp_receiver.h"
 #include "webrtc/modules/video_coding/main/interface/video_coding.h"
 #include "webrtc/modules/video_coding/main/test/test_macros.h"
 #include "webrtc/modules/video_coding/main/test/test_util.h"
@@ -202,7 +203,6 @@
     RtpRtcp::Configuration configuration;
     configuration.id = 1;
     configuration.audio = false;
-    configuration.incoming_data = _dataCallback;
     configuration.outgoing_transport = _outgoingTransport;
     _rtp = RtpRtcp::CreateRtpRtcp(configuration);
 
@@ -211,21 +211,33 @@
     // Registering codecs for the RTP module
 
     // Register receive and send payload
-    VideoCodec videoCodec;
-    strncpy(videoCodec.plName, "VP8", 32);
-    videoCodec.plType = VCM_VP8_PAYLOAD_TYPE;
-    _rtp->RegisterReceivePayload(videoCodec);
-    _rtp->RegisterSendPayload(videoCodec);
+    VideoCodec video_codec;
+    strncpy(video_codec.plName, "VP8", 32);
+    video_codec.plType = VCM_VP8_PAYLOAD_TYPE;
+    rtp_receiver_->RegisterReceivePayload(video_codec.plName,
+                                          video_codec.plType,
+                                          90000,
+                                          0,
+                                          video_codec.maxBitrate);
+    _rtp->RegisterSendPayload(video_codec);
 
-    strncpy(videoCodec.plName, "ULPFEC", 32);
-    videoCodec.plType = VCM_ULPFEC_PAYLOAD_TYPE;
-    _rtp->RegisterReceivePayload(videoCodec);
-    _rtp->RegisterSendPayload(videoCodec);
+    strncpy(video_codec.plName, "ULPFEC", 32);
+    video_codec.plType = VCM_ULPFEC_PAYLOAD_TYPE;
+    rtp_receiver_->RegisterReceivePayload(video_codec.plName,
+                                          video_codec.plType,
+                                          90000,
+                                          0,
+                                          video_codec.maxBitrate);
+    _rtp->RegisterSendPayload(video_codec);
 
-    strncpy(videoCodec.plName, "RED", 32);
-    videoCodec.plType = VCM_RED_PAYLOAD_TYPE;
-    _rtp->RegisterReceivePayload(videoCodec);
-    _rtp->RegisterSendPayload(videoCodec);
+    strncpy(video_codec.plName, "RED", 32);
+    video_codec.plType = VCM_RED_PAYLOAD_TYPE;
+    rtp_receiver_->RegisterReceivePayload(video_codec.plName,
+                                          video_codec.plType,
+                                          90000,
+                                          0,
+                                          video_codec.maxBitrate);
+    _rtp->RegisterSendPayload(video_codec);
 
     if (_nackFecEnabled == 1)
         _rtp->SetGenericFECStatus(_nackFecEnabled, VCM_RED_PAYLOAD_TYPE,
diff --git a/webrtc/modules/video_coding/main/test/media_opt_test.h b/webrtc/modules/video_coding/main/test/media_opt_test.h
index 9e9e92f..5a95276 100644
--- a/webrtc/modules/video_coding/main/test/media_opt_test.h
+++ b/webrtc/modules/video_coding/main/test/media_opt_test.h
@@ -53,6 +53,7 @@
 private:
 
     webrtc::VideoCodingModule*       _vcm;
+    webrtc::RtpReceiver*             rtp_receiver_;
     webrtc::RtpRtcp*                 _rtp;
     webrtc::RTPSendCompleteCallback* _outgoingTransport;
     RtpDataCallback*                 _dataCallback;
diff --git a/webrtc/modules/video_coding/main/test/mt_rx_tx_test.cc b/webrtc/modules/video_coding/main/test/mt_rx_tx_test.cc
index fd5a4f0..40ea24d 100644
--- a/webrtc/modules/video_coding/main/test/mt_rx_tx_test.cc
+++ b/webrtc/modules/video_coding/main/test/mt_rx_tx_test.cc
@@ -16,6 +16,8 @@
 
 #include <string.h>
 
+#include "webrtc/modules/rtp_rtcp/interface/rtp_payload_registry.h"
+#include "webrtc/modules/rtp_rtcp/interface/rtp_receiver.h"
 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
 #include "webrtc/modules/video_coding/main/interface/video_coding.h"
 #include "webrtc/modules/video_coding/main/test/media_opt_test.h"
@@ -152,29 +154,46 @@
     RtpRtcp::Configuration configuration;
     configuration.id = 1;
     configuration.audio = false;
-    configuration.incoming_data = &dataCallback;
     configuration.outgoing_transport = outgoingTransport;
     RtpRtcp* rtp = RtpRtcp::CreateRtpRtcp(configuration);
+    scoped_ptr<RTPPayloadRegistry> registry(new RTPPayloadRegistry(
+        -1, RTPPayloadStrategy::CreateStrategy(false)));
+    scoped_ptr<RtpReceiver> rtp_receiver(
+        RtpReceiver::CreateVideoReceiver(-1, Clock::GetRealTimeClock(),
+                                         &dataCallback, NULL, registry.get()));
 
     // registering codecs for the RTP module
-    VideoCodec videoCodec;
-    strncpy(videoCodec.plName, "ULPFEC", 32);
-    videoCodec.plType = VCM_ULPFEC_PAYLOAD_TYPE;
-    TEST(rtp->RegisterReceivePayload(videoCodec) == 0);
+    VideoCodec video_codec;
+    strncpy(video_codec.plName, "ULPFEC", 32);
+    video_codec.plType = VCM_ULPFEC_PAYLOAD_TYPE;
+    TEST(rtp_receiver->RegisterReceivePayload(video_codec.plName,
+                                              video_codec.plType,
+                                              90000,
+                                              0,
+                                              video_codec.maxBitrate) == 0);
 
-    strncpy(videoCodec.plName, "RED", 32);
-    videoCodec.plType = VCM_RED_PAYLOAD_TYPE;
-    TEST(rtp->RegisterReceivePayload(videoCodec) == 0);
+    strncpy(video_codec.plName, "RED", 32);
+    video_codec.plType = VCM_RED_PAYLOAD_TYPE;
+    TEST(rtp_receiver->RegisterReceivePayload(video_codec.plName,
+                                              video_codec.plType,
+                                              90000,
+                                              0,
+                                              video_codec.maxBitrate) == 0);
 
-    strncpy(videoCodec.plName, args.codecName.c_str(), 32);
-    videoCodec.plType = VCM_VP8_PAYLOAD_TYPE;
-    videoCodec.maxBitrate = 10000;
-    videoCodec.codecType = args.codecType;
-    TEST(rtp->RegisterReceivePayload(videoCodec) == 0);
-    TEST(rtp->RegisterSendPayload(videoCodec) == 0);
+    strncpy(video_codec.plName, args.codecName.c_str(), 32);
+    video_codec.plType = VCM_VP8_PAYLOAD_TYPE;
+    video_codec.maxBitrate = 10000;
+    video_codec.codecType = args.codecType;
+    TEST(rtp_receiver->RegisterReceivePayload(video_codec.plName,
+                                              video_codec.plType,
+                                              90000,
+                                              0,
+                                              video_codec.maxBitrate) == 0);
+    TEST(rtp->RegisterSendPayload(video_codec) == 0);
 
     // inform RTP Module of error resilience features
-    TEST(rtp->SetGenericFECStatus(fecEnabled, VCM_RED_PAYLOAD_TYPE, VCM_ULPFEC_PAYLOAD_TYPE) == 0);
+    TEST(rtp->SetGenericFECStatus(fecEnabled, VCM_RED_PAYLOAD_TYPE,
+                                  VCM_ULPFEC_PAYLOAD_TYPE) == 0);
 
     //VCM
     if (vcm->InitializeReceiver() < 0)
@@ -238,7 +257,8 @@
     FecProtectionParams delta_params = protectionCallback.DeltaFecParameters();
     FecProtectionParams key_params = protectionCallback.KeyFecParameters();
     rtp->SetFecParameters(&delta_params, &key_params);
-    rtp->SetNACKStatus(nackEnabled ? kNackRtcp : kNackOff, kMaxPacketAgeToNack);
+    rtp_receiver->SetNACKStatus(nackEnabled ? kNackRtcp : kNackOff,
+        kMaxPacketAgeToNack);
 
     vcm->SetChannelParameters(static_cast<uint32_t>(1000 * bitRate),
                               (uint8_t) lossRate, rttMS);
diff --git a/webrtc/modules/video_coding/main/test/mt_test_common.cc b/webrtc/modules/video_coding/main/test/mt_test_common.cc
index 3b45089..0ec19af 100644
--- a/webrtc/modules/video_coding/main/test/mt_test_common.cc
+++ b/webrtc/modules/video_coding/main/test/mt_test_common.cc
@@ -13,6 +13,8 @@
 #include <math.h>
 
 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
+#include "webrtc/modules/rtp_rtcp/interface/rtp_payload_registry.h"
+#include "webrtc/modules/rtp_rtcp/interface/rtp_receiver.h"
 #include "webrtc/modules/utility/interface/rtp_dump.h"
 #include "webrtc/system_wrappers/interface/clock.h"
 
@@ -95,7 +97,14 @@
           delete packet;
           return -1;
         }
-        if (_rtp->IncomingRtpPacket(packet->data, packet->length, header) < 0)
+        PayloadUnion payload_specific;
+        if (!rtp_payload_registry_->GetPayloadSpecifics(
+            header.payloadType, &payload_specific)) {
+          return -1;
+        }
+        if (!rtp_receiver_->IncomingRtpPacket(&header, packet->data,
+                                              packet->length, payload_specific,
+                                              true))
         {
             delete packet;
             return -1;
diff --git a/webrtc/modules/video_coding/main/test/normal_test.cc b/webrtc/modules/video_coding/main/test/normal_test.cc
index 04efa45..22d5fb2 100644
--- a/webrtc/modules/video_coding/main/test/normal_test.cc
+++ b/webrtc/modules/video_coding/main/test/normal_test.cc
@@ -95,7 +95,7 @@
   switch (_test.VideoType())
   {
   case kVideoCodecVP8:
-    rtpInfo.type.Video.codec = kRTPVideoVP8;
+    rtpInfo.type.Video.codec = kRtpVideoVp8;
     rtpInfo.type.Video.codecHeader.VP8.InitRTPVideoHeaderVP8();
     rtpInfo.type.Video.codecHeader.VP8.nonReference =
         videoHdr->codecHeader.VP8.nonReference;
@@ -103,7 +103,7 @@
         videoHdr->codecHeader.VP8.pictureId;
     break;
   case kVideoCodecI420:
-    rtpInfo.type.Video.codec = kRTPVideoI420;
+    rtpInfo.type.Video.codec = kRtpVideoI420;
     break;
   default:
     assert(false);
diff --git a/webrtc/modules/video_coding/main/test/receiver_tests.h b/webrtc/modules/video_coding/main/test/receiver_tests.h
index ce289b2..ca276e9 100644
--- a/webrtc/modules/video_coding/main/test/receiver_tests.h
+++ b/webrtc/modules/video_coding/main/test/receiver_tests.h
@@ -22,7 +22,7 @@
 #include <stdio.h>
 #include <string>
 
-class RtpDataCallback : public webrtc::RtpData {
+class RtpDataCallback : public webrtc::NullRtpData {
  public:
   RtpDataCallback(webrtc::VideoCodingModule* vcm) : vcm_(vcm) {}
   virtual ~RtpDataCallback() {}
diff --git a/webrtc/modules/video_coding/main/test/rtp_player.cc b/webrtc/modules/video_coding/main/test/rtp_player.cc
index 94957e9..c3fc7cc 100644
--- a/webrtc/modules/video_coding/main/test/rtp_player.cc
+++ b/webrtc/modules/video_coding/main/test/rtp_player.cc
@@ -15,6 +15,8 @@
 #include <map>
 
 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
+#include "webrtc/modules/rtp_rtcp/interface/rtp_payload_registry.h"
+#include "webrtc/modules/rtp_rtcp/interface/rtp_receiver.h"
 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
 #include "webrtc/modules/video_coding/main/source/internal_defines.h"
 #include "webrtc/modules/video_coding/main/test/pcap_file_reader.h"
@@ -217,8 +219,9 @@
     RtpRtcp::Configuration configuration;
     configuration.id = 1;
     configuration.audio = false;
-    configuration.incoming_data = handler->payload_sink_.get();
-    handler->rtp_module_.reset(RtpRtcp::CreateRtpRtcp(configuration));
+    handler->rtp_module_.reset(RtpReceiver::CreateVideoReceiver(
+        configuration.id, configuration.clock, handler->payload_sink_.get(),
+        NULL, handler->rtp_payload_registry_.get()));
     if (handler->rtp_module_.get() == NULL) {
       return -1;
     }
@@ -227,9 +230,6 @@
                                             kMaxPacketAgeToNack) < 0) {
       return -1;
     }
-    handler->rtp_module_->SetRTCPStatus(kRtcpNonCompound);
-    handler->rtp_module_->SetREMBStatus(true);
-    handler->rtp_module_->SetSSRCFilter(true, ssrc);
     handler->rtp_header_parser_->RegisterRtpHeaderExtension(
         kRtpExtensionTransmissionTimeOffset,
         kDefaultTransmissionTimeOffsetExtensionId);
@@ -241,7 +241,11 @@
       strncpy(codec.plName, it->name().c_str(), sizeof(codec.plName)-1);
       codec.plType = it->payload_type();
       codec.codecType = it->codec_type();
-      if (handler->rtp_module_->RegisterReceivePayload(codec) < 0) {
+      if (handler->rtp_module_->RegisterReceivePayload(codec.plName,
+                                                       codec.plType,
+                                                       90000,
+                                                       0,
+                                                       codec.maxBitrate) < 0) {
         return -1;
       }
     }
@@ -250,20 +254,18 @@
     return 0;
   }
 
-  void Process() {
-    for (HandlerMapIt it = handlers_.begin(); it != handlers_.end(); ++it) {
-      it->second->rtp_module_->Process();
-    }
-  }
-
   void IncomingPacket(const uint8_t* data, uint32_t length) {
     for (HandlerMapIt it = handlers_.begin(); it != handlers_.end(); ++it) {
-      if (it->second->rtp_header_parser_->IsRtcp(data, length)) {
-        it->second->rtp_module_->IncomingRtcpPacket(data, length);
-      } else {
+      if (!it->second->rtp_header_parser_->IsRtcp(data, length)) {
         RTPHeader header;
         it->second->rtp_header_parser_->Parse(data, length, &header);
-        it->second->rtp_module_->IncomingRtpPacket(data, length, header);
+        PayloadUnion payload_specific;
+        it->second->rtp_payload_registry_->GetPayloadSpecifics(
+            header.payloadType, &payload_specific);
+        bool in_order =
+            it->second->rtp_module_->InOrderPacket(header.sequenceNumber);
+        it->second->rtp_module_->IncomingRtpPacket(&header, data, length,
+                                                   payload_specific, in_order);
       }
     }
   }
@@ -274,6 +276,8 @@
     Handler(uint32_t ssrc, const PayloadTypes& payload_types,
             LostPackets* lost_packets)
         : rtp_header_parser_(RtpHeaderParser::Create()),
+          rtp_payload_registry_(new RTPPayloadRegistry(
+              0, RTPPayloadStrategy::CreateStrategy(false))),
           rtp_module_(),
           payload_sink_(),
           ssrc_(ssrc),
@@ -297,7 +301,8 @@
     }
 
     scoped_ptr<RtpHeaderParser> rtp_header_parser_;
-    scoped_ptr<RtpRtcp> rtp_module_;
+    scoped_ptr<RTPPayloadRegistry> rtp_payload_registry_;
+    scoped_ptr<RtpReceiver> rtp_module_;
     scoped_ptr<PayloadSinkInterface> payload_sink_;
 
    private:
@@ -367,8 +372,6 @@
 
     // Send any packets from packet source.
     if (!end_of_file_ && (TimeUntilNextPacket() == 0 || first_packet_)) {
-      ssrc_handlers_.Process();
-
       if (first_packet_) {
         next_packet_length_ = sizeof(next_packet_);
         if (packet_source_->NextPacket(next_packet_, &next_packet_length_,
diff --git a/webrtc/modules/video_coding/main/test/test_callbacks.cc b/webrtc/modules/video_coding/main/test/test_callbacks.cc
index 4bb1f34..e9939d6 100644
--- a/webrtc/modules/video_coding/main/test/test_callbacks.cc
+++ b/webrtc/modules/video_coding/main/test/test_callbacks.cc
@@ -14,6 +14,8 @@
 
 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
+#include "webrtc/modules/rtp_rtcp/interface/rtp_payload_registry.h"
+#include "webrtc/modules/rtp_rtcp/interface/rtp_receiver.h"
 #include "webrtc/modules/utility/interface/rtp_dump.h"
 #include "webrtc/modules/video_coding/main/test/test_macros.h"
 #include "webrtc/system_wrappers/interface/clock.h"
@@ -34,7 +36,7 @@
     _encodeComplete(false),
     _width(0),
     _height(0),
-    _codecType(kRTPVideoNoVideo)
+    _codecType(kRtpVideoNone)
 {
     //
 }
@@ -73,14 +75,14 @@
     rtpInfo.type.Video.width = (uint16_t)_width;
     switch (_codecType)
     {
-    case webrtc::kRTPVideoVP8:
+    case webrtc::kRtpVideoVp8:
         rtpInfo.type.Video.codecHeader.VP8.InitRTPVideoHeaderVP8();
         rtpInfo.type.Video.codecHeader.VP8.nonReference =
             videoHdr->codecHeader.VP8.nonReference;
         rtpInfo.type.Video.codecHeader.VP8.pictureId =
             videoHdr->codecHeader.VP8.pictureId;
         break;
-    case webrtc::kRTPVideoI420:
+    case webrtc::kRtpVideoI420:
         break;
     default:
         assert(false);
@@ -209,6 +211,8 @@
                                                  const char* filename):
     _clock(clock),
     _sendCount(0),
+    rtp_payload_registry_(NULL),
+    rtp_receiver_(NULL),
     _rtp(NULL),
     _lossPct(0),
     _burstLength(0),
@@ -299,7 +303,14 @@
           delete packet;
           return -1;
         }
-        if (_rtp->IncomingRtpPacket(packet->data, packet->length, header) < 0)
+        PayloadUnion payload_specific;
+        if (!rtp_payload_registry_->GetPayloadSpecifics(
+            header.payloadType, &payload_specific)) {
+          return -1;
+        }
+        if (!rtp_receiver_->IncomingRtpPacket(&header, packet->data,
+                                              packet->length, payload_specific,
+                                              true))
         {
             delete packet;
             return -1;
diff --git a/webrtc/modules/video_coding/main/test/test_callbacks.h b/webrtc/modules/video_coding/main/test/test_callbacks.h
index 9fab776..e6543f0 100644
--- a/webrtc/modules/video_coding/main/test/test_callbacks.h
+++ b/webrtc/modules/video_coding/main/test/test_callbacks.h
@@ -30,6 +30,7 @@
 
 namespace webrtc
 {
+class RTPPayloadRegistry;
 class RtpDump;
 
 // Send Side - Packetization callback - send an encoded frame to the VCMReceiver
@@ -60,7 +61,7 @@
     // Return encode complete (true/false)
     bool EncodeComplete();
     // Inform callback of codec used
-    void SetCodecType(RTPVideoCodecTypes codecType)
+    void SetCodecType(RtpVideoCodecTypes codecType)
     {_codecType = codecType;}
     // Inform callback of frame dimensions
     void SetFrameDimensions(int32_t width, int32_t height)
@@ -83,7 +84,7 @@
     bool               _encodeComplete;
     int32_t      _width;
     int32_t      _height;
-    RTPVideoCodecTypes _codecType;
+    RtpVideoCodecTypes _codecType;
 
 }; // end of VCMEncodeCompleteCallback
 
@@ -114,7 +115,7 @@
     // Return encode complete (true/false)
     bool EncodeComplete();
     // Inform callback of codec used
-    void SetCodecType(RTPVideoCodecTypes codecType)
+    void SetCodecType(RtpVideoCodecTypes codecType)
     {_codecType = codecType;}
 
     // Inform callback of frame dimensions
@@ -131,7 +132,7 @@
     RtpRtcp*           _RTPModule;
     int16_t      _width;
     int16_t      _height;
-    RTPVideoCodecTypes _codecType;
+    RtpVideoCodecTypes _codecType;
 }; // end of VCMEncodeCompleteCallback
 
 // Decode Complete callback
@@ -189,6 +190,8 @@
 
     Clock*                  _clock;
     uint32_t          _sendCount;
+    RTPPayloadRegistry* rtp_payload_registry_;
+    RtpReceiver* rtp_receiver_;
     RtpRtcp*                _rtp;
     double                  _lossPct;
     double                  _burstLength;
diff --git a/webrtc/modules/video_coding/main/test/test_util.cc b/webrtc/modules/video_coding/main/test/test_util.cc
index f1b68dc..6f694ab 100644
--- a/webrtc/modules/video_coding/main/test/test_util.cc
+++ b/webrtc/modules/video_coding/main/test/test_util.cc
@@ -147,12 +147,12 @@
   return 0;
 }
 
-webrtc::RTPVideoCodecTypes ConvertCodecType(const char* plname) {
+webrtc::RtpVideoCodecTypes ConvertCodecType(const char* plname) {
   if (strncmp(plname,"VP8" , 3) == 0) {
-    return webrtc::kRTPVideoVP8;
+    return webrtc::kRtpVideoVp8;
   } else if (strncmp(plname,"I420" , 5) == 0) {
-    return webrtc::kRTPVideoI420;
+    return webrtc::kRtpVideoI420;
   } else {
-    return webrtc::kRTPVideoNoVideo; // Default value
+    return webrtc::kRtpVideoNone;  // Default value
   }
 }
diff --git a/webrtc/modules/video_coding/main/test/test_util.h b/webrtc/modules/video_coding/main/test/test_util.h
index ce11e6c..36ca219 100644
--- a/webrtc/modules/video_coding/main/test/test_util.h
+++ b/webrtc/modules/video_coding/main/test/test_util.h
@@ -102,6 +102,6 @@
 };
 
 // Codec type conversion
-webrtc::RTPVideoCodecTypes ConvertCodecType(const char* plname);
+webrtc::RtpVideoCodecTypes ConvertCodecType(const char* plname);
 
 #endif
diff --git a/webrtc/modules/video_coding/main/test/vcm_payload_sink_factory.cc b/webrtc/modules/video_coding/main/test/vcm_payload_sink_factory.cc
index 23f0f9f..ef8866c 100644
--- a/webrtc/modules/video_coding/main/test/vcm_payload_sink_factory.cc
+++ b/webrtc/modules/video_coding/main/test/vcm_payload_sink_factory.cc
@@ -68,6 +68,12 @@
     return vcm_->IncomingPacket(payload_data, payload_size, *rtp_header);
   }
 
+  virtual bool OnRecoveredPacket(const uint8_t* packet,
+                                 int packet_length) {
+    // We currently don't handle FEC.
+    return true;
+  }
+
   // VCMPacketRequestCallback
   virtual int32_t ResendPackets(const uint16_t* sequence_numbers,
                                 uint16_t length) {