forked from pool/MozillaFirefox
c460d1e56f
* mozilla-bmo1504834-part2.patch * mozilla-bmo1504834-part3.patch * mozilla-bmo1512162.patch OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=766
77 lines
2.7 KiB
Diff
77 lines
2.7 KiB
Diff
# 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
|