From c082eba7588742c853d433a49fca514fd1dfa404 Mon Sep 17 00:00:00 2001 From: Evan Shrubsole Date: Thu, 1 Oct 2020 17:16:22 +0200 Subject: [PATCH] When reconfiguring VP9 restore previous input pixel format Otherwise if the pixel format is not I420, the image buffer will need to be reallocated on each reconfiguration. Bug: webrtc:11974 Change-Id: Ib13f1865d7dbba4635f57dc09c7bff846e127585 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186340 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Evan Shrubsole Cr-Commit-Position: refs/heads/master@{#32281} --- modules/video_coding/codecs/vp9/vp9_impl.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/video_coding/codecs/vp9/vp9_impl.cc b/modules/video_coding/codecs/vp9/vp9_impl.cc index 59a0a13c9b..07ccab347a 100644 --- a/modules/video_coding/codecs/vp9/vp9_impl.cc +++ b/modules/video_coding/codecs/vp9/vp9_impl.cc @@ -490,6 +490,9 @@ int VP9EncoderImpl::InitEncode(const VideoCodec* inst, return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; } + absl::optional previous_img_fmt = + raw_ ? absl::make_optional(raw_->fmt) : absl::nullopt; + int ret_val = Release(); if (ret_val < 0) { return ret_val; @@ -530,7 +533,7 @@ int VP9EncoderImpl::InitEncode(const VideoCodec* inst, unsigned int bits_for_storage = 8; switch (profile_) { case VP9Profile::kProfile0: - img_fmt = VPX_IMG_FMT_I420; + img_fmt = previous_img_fmt.value_or(VPX_IMG_FMT_I420); bits_for_storage = 8; config_->g_bit_depth = VPX_BITS_8; config_->g_profile = 0;