--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-bmo1511604.patch Tue Nov 19 22:54:22 2019 +0100
@@ -0,0 +1,76 @@
+# 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