Fixes issue 210. Removes diff between two different arrays.

Also fixes the FrameBuffer copy constructor.

BUG=210
TEST=

Review URL: http://webrtc-codereview.appspot.com/347002

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1364 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/modules/video_coding/main/source/frame_buffer.cc b/src/modules/video_coding/main/source/frame_buffer.cc
index 5fcf1a4..dfded86 100644
--- a/src/modules/video_coding/main/source/frame_buffer.cc
+++ b/src/modules/video_coding/main/source/frame_buffer.cc
@@ -42,6 +42,7 @@
 _latestPacketTimeMs(rhs._latestPacketTimeMs)
 {
     _sessionInfo = rhs._sessionInfo;
+    _sessionInfo.UpdateDataPointers(rhs._buffer, _buffer);
 }
 
 webrtc::FrameType
@@ -165,7 +166,7 @@
         {
             return kSizeError;
         }
-        _sessionInfo.UpdateDataPointers(_buffer - prevBuffer);
+        _sessionInfo.UpdateDataPointers(prevBuffer, _buffer);
     }
 
     CopyCodecSpecific(&packet.codecSpecificHeader);
@@ -361,7 +362,7 @@
     {
         return VCM_MEMORY;
     }
-    _sessionInfo.UpdateDataPointers(_buffer - prevBuffer);
+    _sessionInfo.UpdateDataPointers(prevBuffer, _buffer);
     memcpy(_buffer, frameFromStorage.payloadData, frameFromStorage.payloadSize);
     _length = frameFromStorage.payloadSize;
     return VCM_OK;
diff --git a/src/modules/video_coding/main/source/session_info.cc b/src/modules/video_coding/main/source/session_info.cc
index 66b1dc2..4a5d169 100644
--- a/src/modules/video_coding/main/source/session_info.cc
+++ b/src/modules/video_coding/main/source/session_info.cc
@@ -26,10 +26,13 @@
       packets_not_decodable_(0) {
 }
 
-void VCMSessionInfo::UpdateDataPointers(ptrdiff_t address_delta) {
+void VCMSessionInfo::UpdateDataPointers(const uint8_t* old_base_ptr,
+                                        const uint8_t* new_base_ptr) {
   for (PacketIterator it = packets_.begin(); it != packets_.end(); ++it)
-    if ((*it).dataPtr != NULL)
-      (*it).dataPtr = (*it).dataPtr + address_delta;
+    if ((*it).dataPtr != NULL) {
+      assert(old_base_ptr != NULL && new_base_ptr != NULL);
+      (*it).dataPtr = new_base_ptr + ((*it).dataPtr - old_base_ptr);
+    }
 }
 
 int VCMSessionInfo::LowSequenceNumber() const {
diff --git a/src/modules/video_coding/main/source/session_info.h b/src/modules/video_coding/main/source/session_info.h
index 0dc842f..fd4ae88 100644
--- a/src/modules/video_coding/main/source/session_info.h
+++ b/src/modules/video_coding/main/source/session_info.h
@@ -11,7 +11,6 @@
 #ifndef WEBRTC_MODULES_VIDEO_CODING_SESSION_INFO_H_
 #define WEBRTC_MODULES_VIDEO_CODING_SESSION_INFO_H_
 
-#include <cstddef>
 #include <list>
 
 #include "modules/interface/module_common_types.h"
@@ -24,7 +23,8 @@
  public:
   VCMSessionInfo();
 
-  void UpdateDataPointers(ptrdiff_t address_delta);
+  void UpdateDataPointers(const uint8_t* old_base_ptr,
+                          const uint8_t* new_base_ptr);
   // NACK - Building the NACK lists.
   // Build hard NACK list: Zero out all entries in list up to and including
   // _lowSeqNum.