Reallocate encoded buffer size if needed. Initially set to the input image size.
Issue may occur for very small input images (e.g. 4x4) when encoded image length > input image size. BUG=chromium:578193 Review URL: https://codereview.webrtc.org/1603643006 Cr-Commit-Position: refs/heads/master@{#11329}
This commit is contained in:
@ -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);
|
||||
|
||||
@ -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<VideoReceiveStream::Config>* 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.
|
||||
|
||||
Reference in New Issue
Block a user