| Index: webrtc/modules/video_coding/frame_object.cc
|
| diff --git a/webrtc/modules/video_coding/frame_object.cc b/webrtc/modules/video_coding/frame_object.cc
|
| index acfb25d28d3594e4a0d2047091f20c2238ff8a3a..88205277af1c5fa7c0e2a3ec9e06788a96aff263 100644
|
| --- a/webrtc/modules/video_coding/frame_object.cc
|
| +++ b/webrtc/modules/video_coding/frame_object.cc
|
| @@ -35,6 +35,10 @@ RtpFrameObject::RtpFrameObject(PacketBuffer* packet_buffer,
|
| times_nacked_(times_nacked) {
|
| VCMPacket* packet = packet_buffer_->GetPacket(first_seq_num);
|
| if (packet) {
|
| + // RtpFrameObject members
|
| + frame_type_ = packet->frameType;
|
| + codec_type_ = packet->codec;
|
| +
|
| // TODO(philipel): Remove when encoded image is replaced by FrameObject.
|
| // VCMEncodedFrame members
|
| CopyCodecSpecific(&packet->video_header);
|
| @@ -42,16 +46,23 @@ RtpFrameObject::RtpFrameObject(PacketBuffer* packet_buffer,
|
| _payloadType = packet->payloadType;
|
| _timeStamp = packet->timestamp;
|
| ntp_time_ms_ = packet->ntp_time_ms_;
|
| - _buffer = new uint8_t[frame_size]();
|
| - _size = frame_size;
|
| +
|
| + // Since FFmpeg use an optimized bitstream reader that reads in chunks of
|
| + // 32/64 bits we have to add at least that much padding to the buffer
|
| + // to make sure the decoder doesn't read out of bounds.
|
| + // NOTE! EncodedImage::_size is the size of the buffer (think capacity of
|
| + // an std::vector) and EncodedImage::_length is the actual size of
|
| + // the bitstream (think size of an std::vector).
|
| + if (codec_type_ == kVideoCodecH264)
|
| + _size = frame_size + EncodedImage::kBufferPaddingBytesH264;
|
| + else
|
| + _size = frame_size;
|
| +
|
| + _buffer = new uint8_t[_size];
|
| _length = frame_size;
|
| _frameType = packet->frameType;
|
| GetBitstream(_buffer);
|
|
|
| - // RtpFrameObject members
|
| - frame_type_ = packet->frameType;
|
| - codec_type_ = packet->codec;
|
| -
|
| // FrameObject members
|
| timestamp = packet->timestamp;
|
| }
|
|
|