mozilla-bmo1511604.patch
changeset 1114 572ec48f3fe8
parent 1113 8e9195853a32
child 1115 ed3548a16248
--- a/mozilla-bmo1511604.patch	Tue Nov 19 22:54:22 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-# HG changeset patch
-# User A. Wilcox <AWilcox@Wilcox-Tech.com>
-# Date 1543674229 0
-#      Sat Dec 01 14:23:49 2018 +0000
-# Node ID 0309ff19e46b126c527e633518d7de8570442114
-# Parent  ba2c9b0542c95cc5ee26c264e8338fc9ba94c958
-Bug 1511604 - Swizzle YCbCr->RGB data on big-endian machines
-Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1511604
-
-This is very closely related to mozilla-bmo1504834
-
-Again, input for skia is swizzled to LE, as skia only understands LE.
-
-diff --git a/gfx/ycbcr/YCbCrUtils.cpp b/gfx/ycbcr/YCbCrUtils.cpp
---- a/gfx/ycbcr/YCbCrUtils.cpp
-+++ b/gfx/ycbcr/YCbCrUtils.cpp
-@@ -1,14 +1,16 @@
- /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-  * This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
-+#include "mozilla/EndianUtils.h"
- #include "gfx2DGlue.h"
-+#include "mozilla/gfx/Swizzle.h"
- 
- #include "YCbCrUtils.h"
- #include "yuv_convert.h"
- #include "ycbcr_to_rgb565.h"
- 
- namespace mozilla {
- namespace gfx {
- 
-@@ -231,16 +233,23 @@ ConvertYCbCrToRGB(const layers::PlanarYC
-                           srcData.mPicSize.width,
-                           srcData.mPicSize.height,
-                           srcData.mYStride,
-                           srcData.mCbCrStride,
-                           aStride,
-                           yuvtype,
-                           srcData.mYUVColorSpace);
-   }
-+#if MOZ_BIG_ENDIAN
-+  // libyuv makes endian-correct result, which needs to be swapped to BGRX
-+  if (aDestFormat != SurfaceFormat::R5G6B5_UINT16)
-+    gfx::SwizzleData(aDestBuffer, aStride, gfx::SurfaceFormat::X8R8G8B8,
-+                     aDestBuffer, aStride, gfx::SurfaceFormat::B8G8R8X8,
-+                     srcData.mPicSize);
-+#endif
- }
- 
- void
- ConvertYCbCrAToARGB(const uint8_t* aSrcY,
-                     const uint8_t* aSrcU,
-                     const uint8_t* aSrcV,
-                     const uint8_t* aSrcA,
-                     int aSrcStrideYA, int aSrcStrideUV,
-@@ -252,12 +261,18 @@ ConvertYCbCrAToARGB(const uint8_t* aSrcY
-                         aSrcV,
-                         aSrcA,
-                         aDstARGB,
-                         aWidth,
-                         aHeight,
-                         aSrcStrideYA,
-                         aSrcStrideUV,
-                         aDstStrideARGB);
-+#if MOZ_BIG_ENDIAN
-+  // libyuv makes endian-correct result, which needs to be swapped to BGRA
-+  gfx::SwizzleData(aDstARGB, aDstStrideARGB, gfx::SurfaceFormat::A8R8G8B8,
-+                   aDstARGB, aDstStrideARGB, gfx::SurfaceFormat::B8G8R8A8,
-+                   IntSize(aWidth, aHeight));
-+#endif
- }
- 
- } // namespace gfx
- } // namespace mozilla