author | Wolfgang Rosenauer <wr@rosenauer.org> |
Fri, 25 Oct 2019 11:19:31 +0200 | |
branch | firefox70 |
changeset 1112 | 8a4f5aea2475 |
parent 1109 | 972f68ac6b1a |
permissions | -rw-r--r-- |
1101
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
1 |
# HG changeset patch |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
2 |
# User A. Wilcox <AWilcox@Wilcox-Tech.com> |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
3 |
# Date 1543674229 0 |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
4 |
# Sat Dec 01 14:23:49 2018 +0000 |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
5 |
# Node ID 0309ff19e46b126c527e633518d7de8570442114 |
1109
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
6 |
# Parent ba2c9b0542c95cc5ee26c264e8338fc9ba94c958 |
1101
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
7 |
Bug 1511604 - Swizzle YCbCr->RGB data on big-endian machines |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
8 |
Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1511604 |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
9 |
|
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
10 |
This is very closely related to mozilla-bmo1504834 |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
11 |
|
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
12 |
Again, input for skia is swizzled to LE, as skia only understands LE. |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
13 |
|
1109
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
14 |
diff --git a/gfx/ycbcr/YCbCrUtils.cpp b/gfx/ycbcr/YCbCrUtils.cpp |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
15 |
--- a/gfx/ycbcr/YCbCrUtils.cpp |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
16 |
+++ b/gfx/ycbcr/YCbCrUtils.cpp |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
17 |
@@ -1,14 +1,16 @@ |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
18 |
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
19 |
* This Source Code Form is subject to the terms of the Mozilla Public |
1101
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
20 |
* License, v. 2.0. If a copy of the MPL was not distributed with this |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
21 |
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
22 |
|
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
23 |
+#include "mozilla/EndianUtils.h" |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
24 |
#include "gfx2DGlue.h" |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
25 |
+#include "mozilla/gfx/Swizzle.h" |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
26 |
|
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
27 |
#include "YCbCrUtils.h" |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
28 |
#include "yuv_convert.h" |
1109
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
29 |
#include "ycbcr_to_rgb565.h" |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
30 |
|
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
31 |
namespace mozilla { |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
32 |
namespace gfx { |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
33 |
|
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
34 |
@@ -231,16 +233,23 @@ ConvertYCbCrToRGB(const layers::PlanarYC |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
35 |
srcData.mPicSize.width, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
36 |
srcData.mPicSize.height, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
37 |
srcData.mYStride, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
38 |
srcData.mCbCrStride, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
39 |
aStride, |
1101
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
40 |
yuvtype, |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
41 |
srcData.mYUVColorSpace); |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
42 |
} |
1109
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
43 |
+#if MOZ_BIG_ENDIAN |
1101
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
44 |
+ // libyuv makes endian-correct result, which needs to be swapped to BGRX |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
45 |
+ if (aDestFormat != SurfaceFormat::R5G6B5_UINT16) |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
46 |
+ gfx::SwizzleData(aDestBuffer, aStride, gfx::SurfaceFormat::X8R8G8B8, |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
47 |
+ aDestBuffer, aStride, gfx::SurfaceFormat::B8G8R8X8, |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
48 |
+ srcData.mPicSize); |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
49 |
+#endif |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
50 |
} |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
51 |
|
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
52 |
void |
1109
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
53 |
ConvertYCbCrAToARGB(const uint8_t* aSrcY, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
54 |
const uint8_t* aSrcU, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
55 |
const uint8_t* aSrcV, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
56 |
const uint8_t* aSrcA, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
57 |
int aSrcStrideYA, int aSrcStrideUV, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
58 |
@@ -252,12 +261,18 @@ ConvertYCbCrAToARGB(const uint8_t* aSrcY |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
59 |
aSrcV, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
60 |
aSrcA, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
61 |
aDstARGB, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
62 |
aWidth, |
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
63 |
aHeight, |
1101
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
64 |
aSrcStrideYA, |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
65 |
aSrcStrideUV, |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
66 |
aDstStrideARGB); |
1109
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
67 |
+#if MOZ_BIG_ENDIAN |
1101
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
68 |
+ // libyuv makes endian-correct result, which needs to be swapped to BGRA |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
69 |
+ gfx::SwizzleData(aDstARGB, aDstStrideARGB, gfx::SurfaceFormat::A8R8G8B8, |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
70 |
+ aDstARGB, aDstStrideARGB, gfx::SurfaceFormat::B8G8R8A8, |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
71 |
+ IntSize(aWidth, aHeight)); |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
72 |
+#endif |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
73 |
} |
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
74 |
|
a4709640638e
added several arch specific (mainly BE) patches
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff
changeset
|
75 |
} // namespace gfx |
1109
972f68ac6b1a
Firefox 69.0 as released to Factory/Tumbleweed
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
1101
diff
changeset
|
76 |
} // namespace mozilla |