diff --git a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc index aa96588bc3..6dbc23956e 100644 --- a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc +++ b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc @@ -659,6 +659,12 @@ int VP9EncoderImpl::GetEncodedLayerFrame(const vpx_codec_cx_pkt* pkt) { int part_idx = 0; CodecSpecificInfo codec_specific; + if (pkt->data.frame.sz > encoded_image_._size) { + delete[] encoded_image_._buffer; + encoded_image_._size = pkt->data.frame.sz; + encoded_image_._buffer = new uint8_t[encoded_image_._size]; + } + assert(pkt->kind == VPX_CODEC_CX_FRAME_PKT); memcpy(&encoded_image_._buffer[encoded_image_._length], pkt->data.frame.buf, pkt->data.frame.sz); diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc index 4cf92748a8..f0f1ca4d2c 100644 --- a/webrtc/video/video_send_stream_tests.cc +++ b/webrtc/video/video_send_stream_tests.cc @@ -2208,6 +2208,33 @@ void VideoSendStreamTest::TestVp9NonFlexMode(uint8_t num_temporal_layers, RunBaseTest(&test); } +TEST_F(VideoSendStreamTest, Vp9NonFlexModeSmallResolution) { + static const size_t kNumFramesToSend = 50; + static const int kWidth = 4; + static const int kHeight = 4; + class NonFlexibleModeResolution : public Vp9HeaderObserver { + void ModifyVideoConfigsHook( + VideoSendStream::Config* send_config, + std::vector* receive_configs, + VideoEncoderConfig* encoder_config) override { + vp9_settings_.flexibleMode = false; + vp9_settings_.numberOfTemporalLayers = 1; + vp9_settings_.numberOfSpatialLayers = 1; + + EXPECT_EQ(1u, encoder_config->streams.size()); + encoder_config->streams[0].width = kWidth; + encoder_config->streams[0].height = kHeight; + } + + void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { + if (frames_sent_ > kNumFramesToSend) + observation_complete_.Set(); + } + } test; + + RunBaseTest(&test); +} + #if !defined(MEMORY_SANITIZER) // Fails under MemorySanitizer: // See https://code.google.com/p/webrtc/issues/detail?id=5402.