diff --git a/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc b/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc index f23affee41..9d57dc0996 100644 --- a/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc +++ b/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc @@ -63,6 +63,10 @@ TEST_F(TestVp8Impl, TestSwitchingToOneOddStream) { TestVp8Simulcast::TestSwitchingToOneOddStream(); } +TEST_F(TestVp8Impl, TestSwitchingToOneSmallStream) { + TestVp8Simulcast::TestSwitchingToOneSmallStream(); +} + TEST_F(TestVp8Impl, TestRPSIEncoder) { TestVp8Simulcast::TestRPSIEncoder(); } diff --git a/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h b/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h index dac8b8d700..4e1e686169 100644 --- a/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h +++ b/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h @@ -610,6 +610,8 @@ class TestVp8Simulcast : public ::testing::Test { void TestSwitchingToOneOddStream() { SwitchingToOneStream(1023, 769); } + void TestSwitchingToOneSmallStream() { SwitchingToOneStream(4, 4); } + void TestRPSIEncoder() { Vp8TestEncodedImageCallback encoder_callback; encoder_->RegisterEncodeCompleteCallback(&encoder_callback); diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc index e2cf2b0541..5e972ff9ac 100644 --- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc +++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc @@ -979,6 +979,14 @@ int VP8EncoderImpl::GetEncodedPartitions(const VideoFrame& input_image, switch (pkt->kind) { case VPX_CODEC_CX_FRAME_PKT: { uint32_t length = encoded_images_[encoder_idx]._length; + if (pkt->data.frame.sz + length > + encoded_images_[encoder_idx]._size) { + uint8_t* buffer = new uint8_t[pkt->data.frame.sz + length]; + memcpy(buffer, encoded_images_[encoder_idx]._buffer, length); + delete[] encoded_images_[encoder_idx]._buffer; + encoded_images_[encoder_idx]._buffer = buffer; + encoded_images_[encoder_idx]._size = pkt->data.frame.sz + length; + } memcpy(&encoded_images_[encoder_idx]._buffer[length], pkt->data.frame.buf, pkt->data.frame.sz); frag_info.fragmentationOffset[part_idx] = length;