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:
@ -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;
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user