Fixes a newly introduced bug in the jitter buffer where buffer reallocation

causes corrupt pointers.
Review URL: http://webrtc-codereview.appspot.com/186003

git-svn-id: http://webrtc.googlecode.com/svn/trunk@688 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
stefan@webrtc.org
2011-10-04 06:58:39 +00:00
parent 93d216c23f
commit 4b6f747373
2 changed files with 5 additions and 2 deletions

View File

@ -358,10 +358,12 @@ VCMFrameBuffer::ExtractFromStorage(const EncodedVideoData& frameFromStorage)
_completeFrame = frameFromStorage.completeFrame; _completeFrame = frameFromStorage.completeFrame;
_renderTimeMs = frameFromStorage.renderTimeMs; _renderTimeMs = frameFromStorage.renderTimeMs;
_codec = frameFromStorage.codec; _codec = frameFromStorage.codec;
const WebRtc_UWord8 *prevBuffer = _buffer;
if (VerifyAndAllocate(frameFromStorage.payloadSize) < 0) if (VerifyAndAllocate(frameFromStorage.payloadSize) < 0)
{ {
return VCM_MEMORY; return VCM_MEMORY;
} }
_sessionInfo.UpdateDataPointers(_buffer, prevBuffer);
memcpy(_buffer, frameFromStorage.payloadData, frameFromStorage.payloadSize); memcpy(_buffer, frameFromStorage.payloadData, frameFromStorage.payloadSize);
_length = frameFromStorage.payloadSize; _length = frameFromStorage.payloadSize;
return VCM_OK; return VCM_OK;

View File

@ -41,8 +41,9 @@ void
VCMSessionInfo::UpdateDataPointers(const WebRtc_UWord8* frame_buffer, VCMSessionInfo::UpdateDataPointers(const WebRtc_UWord8* frame_buffer,
const WebRtc_UWord8* prev_buffer_address) { const WebRtc_UWord8* prev_buffer_address) {
for (int i = 0; i <= _highestPacketIndex; ++i) for (int i = 0; i <= _highestPacketIndex; ++i)
_packets[i].dataPtr = frame_buffer + (_packets[i].dataPtr - if (_packets[i].dataPtr != NULL)
prev_buffer_address); _packets[i].dataPtr = frame_buffer + (_packets[i].dataPtr -
prev_buffer_address);
} }
WebRtc_Word32 WebRtc_Word32