summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/moz-patch-stack/0011.patch
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/moz-patch-stack/0011.patch')
-rw-r--r--third_party/libwebrtc/moz-patch-stack/0011.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/third_party/libwebrtc/moz-patch-stack/0011.patch b/third_party/libwebrtc/moz-patch-stack/0011.patch
new file mode 100644
index 0000000000..00bd62c9ad
--- /dev/null
+++ b/third_party/libwebrtc/moz-patch-stack/0011.patch
@@ -0,0 +1,42 @@
+From: Dan Minor <dminor@mozilla.com>
+Date: Wed, 19 Sep 2018 15:06:00 -0400
+Subject: Bug 1376873 - Fix up rotation in video_capture_impl.cc; r=pehrsons
+
+This fixes a bug in the upstream code introduced when they removed the
+ConvertToI420 helper method from webrtc_libyuv.cc. The buffer size is
+passed into libyuv::ConvertI420 incorrectly when rotation is applied, which
+causes bad rendering and instabilities.
+
+Differential Revision: https://phabricator.services.mozilla.com/D7478
+Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/c56cb66f86518dfb046c642ebeb07cf51c23a3cb
+---
+ modules/video_capture/video_capture_impl.cc | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/modules/video_capture/video_capture_impl.cc b/modules/video_capture/video_capture_impl.cc
+index 66fd0a0ebe..7071776d0a 100644
+--- a/modules/video_capture/video_capture_impl.cc
++++ b/modules/video_capture/video_capture_impl.cc
+@@ -218,12 +218,21 @@ int32_t VideoCaptureImpl::IncomingFrame(uint8_t* videoFrame,
+ }
+ }
+
++ int dst_width = buffer->width();
++ int dst_height = buffer->height();
++
++ // LibYuv expects pre-rotation_mode values for dst.
++ // Stride values should correspond to the destination values.
++ if (rotation_mode == libyuv::kRotate90 || rotation_mode == libyuv::kRotate270) {
++ std::swap(dst_width, dst_height);
++ }
++
+ const int conversionResult = libyuv::ConvertToI420(
+ videoFrame, videoFrameLength, buffer.get()->MutableDataY(),
+ buffer.get()->StrideY(), buffer.get()->MutableDataU(),
+ buffer.get()->StrideU(), buffer.get()->MutableDataV(),
+ buffer.get()->StrideV(), 0, 0, // No Cropping
+- width, height, target_width, target_height, rotation_mode,
++ width, height, dst_width, dst_height, rotation_mode,
+ ConvertVideoType(frameInfo.videoType));
+ if (conversionResult != 0) {
+ RTC_LOG(LS_ERROR) << "Failed to convert capture frame from type "