49 lines
1.7 KiB
Diff
49 lines
1.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 53107afbc21ec78e7ac46d37af212505f2032d5d
|
||
|
Bug 1511604 - Swizzle YCbCr->RGB data on big-endian machines
|
||
|
|
||
|
diff -r 53107afbc21e -r 0309ff19e46b gfx/ycbcr/YCbCrUtils.cpp
|
||
|
--- gfx/ycbcr/YCbCrUtils.cpp Wed Nov 07 04:50:21 2018 +0000
|
||
|
+++ gfx/ycbcr/YCbCrUtils.cpp Sat Dec 01 14:23:49 2018 +0000
|
||
|
@@ -3,7 +3,9 @@
|
||
|
* 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"
|
||
|
@@ -236,6 +238,13 @@
|
||
|
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
|
||
|
@@ -257,6 +266,12 @@
|
||
|
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
|