diff -r 8e9195853a32 -r 572ec48f3fe8 mozilla-bmo1511604.patch --- 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 -# 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