diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/libwebrtc/moz-patch-stack/0018.patch | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/moz-patch-stack/0018.patch')
-rw-r--r-- | third_party/libwebrtc/moz-patch-stack/0018.patch | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/third_party/libwebrtc/moz-patch-stack/0018.patch b/third_party/libwebrtc/moz-patch-stack/0018.patch new file mode 100644 index 0000000000..c097e221ad --- /dev/null +++ b/third_party/libwebrtc/moz-patch-stack/0018.patch @@ -0,0 +1,81 @@ +From: Dan Minor <dminor@mozilla.com> +Date: Thu, 21 Mar 2019 15:48:00 +0000 +Subject: Bug 1535584 - Restore UpdateCodecFrameSize to vp9_impl.cc; r=bwc + +Differential Revision: https://phabricator.services.mozilla.com/D23713 +Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/0898f9cfe09273e1d86c38abdd576cdf273009f0 +--- + .../codecs/vp9/libvpx_vp9_encoder.cc | 50 +++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc +index 35b13058a2..5877373b76 100644 +--- a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc ++++ b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc +@@ -1159,6 +1159,14 @@ int LibvpxVp9Encoder::Encode(const VideoFrame& input_image, + config_changed_ = false; + } + ++ if (input_image.width() != codec_.width || ++ input_image.height() != codec_.height) { ++ int ret = UpdateCodecFrameSize(input_image); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ + RTC_DCHECK_EQ(input_image.width(), raw_->d_w); + RTC_DCHECK_EQ(input_image.height(), raw_->d_h); + +@@ -1286,6 +1294,48 @@ int LibvpxVp9Encoder::Encode(const VideoFrame& input_image, + return WEBRTC_VIDEO_CODEC_OK; + } + ++int LibvpxVp9Encoder::UpdateCodecFrameSize( ++ const VideoFrame& input_image) { ++ RTC_LOG(LS_INFO) << "Reconfiging VP from " << ++ codec_.width << "x" << codec_.height << " to " << ++ input_image.width() << "x" << input_image.height(); ++ // Preserve latest bitrate/framerate setting ++ // TODO: Mozilla - see below, we need to save more state here. ++ //uint32_t old_bitrate_kbit = config_->rc_target_bitrate; ++ //uint32_t old_framerate = codec_.maxFramerate; ++ ++ codec_.width = input_image.width(); ++ codec_.height = input_image.height(); ++ ++ vpx_img_free(raw_); ++ raw_ = vpx_img_wrap(NULL, VPX_IMG_FMT_I420, codec_.width, codec_.height, ++ 1, NULL); ++ // Update encoder context for new frame size. ++ config_->g_w = codec_.width; ++ config_->g_h = codec_.height; ++ ++ // Determine number of threads based on the image size and #cores. ++ config_->g_threads = NumberOfThreads(codec_.width, codec_.height, ++ num_cores_); ++ ++ // NOTE: We would like to do this the same way vp8 does it ++ // (with vpx_codec_enc_config_set()), but that causes asserts ++ // in AQ 3 (cyclic); and in AQ 0 it works, but on a resize to smaller ++ // than 1/2 x 1/2 original it asserts in convolve(). Given these ++ // bugs in trying to do it the "right" way, we basically re-do ++ // the initialization. ++ vpx_codec_destroy(encoder_); // clean up old state ++ int result = InitAndSetControlSettings(&codec_); ++ if (result == WEBRTC_VIDEO_CODEC_OK) { ++ // TODO: Mozilla rates have become much more complicated, we need to store ++ // more state or find another way of doing this. ++ //return SetRates(old_bitrate_kbit, old_framerate); ++ RTC_CHECK(false); ++ return WEBRTC_VIDEO_CODEC_UNINITIALIZED; ++ } ++ return result; ++} ++ + bool LibvpxVp9Encoder::PopulateCodecSpecific(CodecSpecificInfo* codec_specific, + absl::optional<int>* spatial_idx, + absl::optional<int>* temporal_idx, +-- +2.34.1 + |