aboutsummaryrefslogtreecommitdiff
path: root/source/convert_argb.cc
AgeCommit message (Collapse)Author
2023-12-04malloc return 1 for failures and assert for internal functionsFrank Barchard
Bug: libyuv:968 Change-Id: Iea2f907061532d2e00347996124bc80d079a7bdc Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/5010874 Reviewed-by: Wan-Teh Chang <wtc@google.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2023-10-27Check allocations that return NULL and return earlyFrank Barchard
BUG=libyuv:968 Change-Id: I9e8594440a6035958511f9c50072820131331fc8 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4977552 Reviewed-by: Wan-Teh Chang <wtc@google.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2023-09-05[RVV] Support AR64ToAB64 and RGBA-family color conversionsBruce Lai
Add scalar code for AR64ToAB64, ARGBToRGBA, ARGBToBGRA, ARGBToABGR, RGBAToARGB, BGRAToARGB, and ABGRToARGB. They are originally implemented by ARGBShffle. This CL independetly implements them, and only enables for risc-v now. This CL also add RVV implementation for `RGBA-family <-> RGBA-family` color conversions. * Run on SiFive internal FPGA(VLEN=128): Test Case Speedup AR64ToAB64_Opt x4.6 ARGBToRGBA_Opt x6 ARGBToBGRA_Opt x6 ARGBToABGR_Opt x6 RGBAToARGB_Opt x6 Change-Id: Ie0630901046084aa259699fcdeccc64170d7103f Signed-off-by: Bruce Lai <bruce.lai@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4797451 Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2023-07-26[RVV] Enable ScaleRowUp2_(Bi)linear_RVV/ScaleUVRowUp2_(Bi)linear_RVVDarren Hsieh
ScaleUVRowUp2_(Bi)linear_RVV function is equal to other platforms' ScaleRowUp2_(Bi)linear_Any_XXX. We process entire row in this function. Other platforms only implement non-edge part of image and process edge with scalar. ScaleRowUp2_(Bi)linear_Any_XXX: Combine ScaleRowUp2_(Bi)linear_XXX(non-edge) + ScaleRowUp2_(Bi)linear_C(edge) by SBUH2LANY/SU2BLANY. * Run on SiFive internal FPGA: Test case RVV function Speedup I444ScaleFrom640x360_Bilinear ScaleRowUp2_Bilinear_RVV 8.21 I444ScaleFrom640x360_Linear ScaleRowUp2_Linear_RVV 8.08 UVScaleFrom640x360_Bilinear ScaleUVRowUp2_Bilinear_RVV 7.80 UVScaleFrom640x360_Linear ScaleUVRowUp2_Linear_RVV 7.03 Change-Id: I539245ce51858f077506a78f0e7e82377ac6a95d Signed-off-by: Darren Hsieh <darren.hsieh@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4666062 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2023-07-24[RVV] Enable NV{12,21}To{ARGB,RGB24}Row_RVVDarren Hsieh
* Run on SiFive internal FPGA(w/ -march=rv64gcv): Test Case Speedup NV12ToARGB_Opt 12.0 NV21ToARGB_Opt 12.1 NV12ToABGR_Opt 12.6 NV21ToABGR_Opt 12.0 NV12ToRGB24_Opt 12.5 NV21ToRGB24_Opt 11.7 NV12ToRAW_Opt 12.1 NV21ToRAW_Opt 11.4 Change-Id: Icae2bac2b4ebbd4c5a89e847fde9a74fe6481878 Signed-off-by: Darren Hsieh <darren.hsieh@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4707804 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2023-06-02Fix tidy warning that uint32_t dither4 should not be constFrank Barchard
- Remove const from uint32_t dither4 parameter to fix clang-tidy warning - Apply clang format - Bump version - Remove unused MMI source; superceded by MSA Bug: None Change-Id: Id49991db25bca4e99590b415312542d917471c62 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4581882 Reviewed-by: Wan-Teh Chang <wtc@google.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2023-05-20Enable {J400/I400}ToARGBRow_RVVWan-Teh Chang
Run on SiFive internal FPGA*: I400ToARGB_Opt (~8x vs scalar) J400ToARGB_Opt (~10x vs scalar) LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=10 Bug: libyuv:956, libyuv:961 Change-Id: If4e21ec85c4ff79083ec16a6faae0e457129a8de Signed-off-by: Bruce Lai <bruce.lai@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4544972 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Wan-Teh Chang <wtc@google.com>
2023-05-19Optimize the following 19 functions with LSX in row_lsx.cc.Lu Wang
UYVYToYRow_LSX, UYVYToUVRow_LSX, UYVYToUV422Row_LSX, ARGBToUVRow_LSX, ARGBToRGB24Row_LSX, ARGBToRAWRow_LSX, ARGBToRGB565Row_LSX, ARGBToARGB1555Row_LSX, ARGBToARGB4444Row_LSX, ARGBToUV444Row_LSX, ARGBMultiplyRow_LSX, ARGBAddRow_LSX, ARGBSubtractRow_LSX, ARGBAttenuateRow_LSX, ARGBToRGB565DitherRow_LSX, ARGBShuffleRow_LSX, ARGBShadeRow_LSX, ARGBGrayRow_LSX, ARGBSepiaRow_LSX Bug: libyuv:913 Change-Id: I02c0c9d68b229c4a66c96837e9b928c2f5dda1f3 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4546814 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2023-05-17ARGBToI420Alpha function to convert ARGB to I420 with AlphaFrank Barchard
Bug: b/281866362 Change-Id: Ic1093a887fb483f134c78909cf1ee7495e7345ba Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4534100 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Wan-Teh Chang <wtc@google.com>
2023-05-16Enable I{422,444}AlphaToARGBRow_RVV & ARGBAttentuateRow_RVVBruce Lai
Run on SiFive internal FPGA: I444AlphaToARGB_Opt (~16x vs scalar) I422AlphaToARGB_Opt (~10x vs scalar) ARGBAttenuate_Opt (~3x vs scalar) LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=10 Change-Id: I0046eb7af8104bc8e13cee1cb91a19f90940d5b0 Signed-off-by: Bruce Lai <bruce.lai@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4535657 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2023-05-10Enable I444To{ARGB,RGB24}Row_RVVDarren Hsieh
Run on SiFive internal FPGA: I444ToARGB_Opt (~16x vs scalar) I444ToRGB24_Opt (~10x vs scalar) LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=10 Change-Id: Idae7dc46ef648beaa14b58ba3eb56b67b17c9b3b Signed-off-by: Darren Hsieh <darren.hsieh@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4520761 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2023-05-10Enable I422To{ARGB,RGBA,RGB24}Row_RVVDarren Hsieh
Run on SiFive internal FPGA: I422ToARGB_Opt (~10x vs scalar) I422ToRGBA_Opt (~10x vs scalar) I420ToRGB24_Opt (~8x vs scalar) LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=10 This CL manually sets rounding mode, since we use fixed-point vector narrowing clip. There is no definition about default value for fixed-point rounding mode. https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#38-vector-fixed-point-rounding-mode-register-vxrm The behavior could be different on differet paltforms. To avoid unexpected behavior, we set rounding mode manually. Change-Id: I90f0dcb90c37f7da7caab8eb1df6c9c7a3c874a8 Signed-off-by: Darren Hsieh <darren.hsieh@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4512373 Reviewed-by: Wan-Teh Chang <wtc@google.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2023-05-10Optimize the following functions with LSX.Lu Wang
MirrorRow_LSX, MirrorUVRow_LSX, ARGBMirrorRow_LSX, I422ToYUY2Row_LSX, I422ToUYVYRow_LSX, I422ToARGBRow_LSX, I422ToRGBARow_LSX, I422AlphaToARGBRow_LSX, I422ToRGB24Row_LSX, I422ToRGB565Row_LSX, I422ToARGB4444Row_LSX, I422ToARGB1555Row_LSX, YUY2ToYRow_LSX, YUY2ToUVRow_LSX, YUY2ToUV422Row_LSX Bug: libyuv:913 Change-Id: I46cec605001d7ddd73846eed6d0a77f936b6dc53 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4515191 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2023-04-20Optimized AR64/AB64 <-> ARGB with RVVBruce Lai
* Run on SiFive internal FPGA: ARGBToAR64_Opt (~13.7x vs scalar) ARGBToAB64_Opt (~5.81x vs scalar) AR64ToARGB_Opt (~15.8x vs scalar) AB64ToARGB_Opt (~2.40x vs scalar) LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=10 Bug: libyuv:956 Change-Id: Ida642a5077f59d25fb7c5328f671956b2293dadd Signed-off-by: Bruce Lai <bruce.lai@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4442913 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2023-04-13Add ARGBToRAWRow_RVV, ARGBToRGB24Row_RVV, RGB24ToARGBRow_RVVDarren Hsieh
* Run on SiFive internal FPGA: ARGBToRAW_Opt (~1.55x vs scalar) ARGBToRGB24_Opt (~1.44x vs scalar) RGB24ToARGB_Opt (~1.77x vs scalar) LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=10 Bug: libyuv:956 Change-Id: I26722f6848cd68684d95d9a7ee06ce0416e7985d Signed-off-by: Darren Hsieh <darren.hsieh@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4413083 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2023-04-07Add RAWToARGBRow_RVV,RAWToRGBARow_RVV,RAWToRGB24Row_RVVDarren Hsieh
* Run on SiFive internal FPGA: RAWToARGB_Opt (~2x vs scalar) RAWToRGBA_Opt (~2x vs scalar) RAWToRGB24_Opt (~1.5x vs scalar) LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=10 Change-Id: I21a13d646589ea2aa3822cb9225f5191068c285b Signed-off-by: Darren Hsieh <darren.hsieh@sifive.com> Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4408357 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-09-20I422ToRGB24, I422ToRAW, I422ToRGB24MatrixFilter conversion functions added.Frank Barchard
- YUV to RGB use linear for first and last row. - add assert(yuvconstants) - rename pointers to match row functions. - use macros that match row functions. - use 12 bit upsampler for conversions of 10 and 12 bits Cortex A53 AArch32 I420ToRGB24_Opt (3627 ms) I422ToRGB24_Opt (4099 ms) I444ToRGB24_Opt (4186 ms) I420ToRGB24Filter_Opt (5451 ms) I422ToRGB24Filter_Opt (5430 ms) AVX2 Was I420ToRGB24Filter_Opt (583 ms) Now I420ToRGB24Filter_Opt (560 ms) Neon Cortex A7 Was I420ToRGB24Filter_Opt (5447 ms) Now I420ToRGB24Filter_Opt (5439 ms) Bug: libyuv:938 Change-Id: I1731f2dd591073ae11a756f06574103ba0f803c7 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3906082 Reviewed-by: Justin Green <greenjustin@google.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-09-16I420ToRGB24MatrixFilter function addedFrank Barchard
- Implemented as 3 steps: Upsample UV to 4:4:4, I444ToARGB, ARGBToRGB24 - Fix some build warnings for missing prototypes. Pixel 4 I420ToRGB24_Opt (743 ms) I420ToRGB24Filter_Opt (1331 ms) Windows with skylake xeon: x86 32 bit I420ToRGB24_Opt (387 ms) I420ToRGB24Filter_Opt (571 ms) x64 64 bit I420ToRGB24_Opt (384 ms) I420ToRGB24Filter_Opt (582 ms) Bug: libyuv:938, libyuv:830 Change-Id: Ie27f70816ec084437014f8a1c630ae011ee2348c Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3900298 Reviewed-by: Wan-Teh Chang <wtc@google.com>
2022-08-09Add I422ToRGB565MatrixVignesh Venkatasubramanian
The code already exists to use a specific matrix. This CL simply adds a function to use a generic YUV matrix for the conversion. Bug: b/241451603 Change-Id: I0eea7e96a891d045905a9c963b56c053097029ec Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3820903 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-08-01Disable bilinear 16 bit scale up for SSE2Frank Barchard
- Undefine HAS_SCALEROWUP2_BILINEAR_16_SSE2 - Save XMM7 in ScaleRowUp2_Bilinear_16_SSE2(). - Rename HAS_SCALEROWUP2LINEAR_xxx to HAS_SCALEROWUP2_LINEAR_xxx - DetileSplitUVRow_C() is implemented using SplitUVRow_C(). - Changes to unit_test/planar_test.cc. Bug: libyuv:882 Change-Id: I0a8e8e5fb43bdf58ded87244e802343eacb789f2 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3795063 Reviewed-by: Wan-Teh Chang <wtc@google.com>
2022-04-15Change ScaleUVRowUp2_Biinear_16_SSE2 to SSE41Frank Barchard
Bug: libyuv:928 xed -i scale_gcc.o: SYM ScaleUVRowUp2_Linear_16_SSE2: XDIS 0: LOGICAL SSE2 660FEFED pxor xmm5, xmm5 XDIS 4: SSE SSE2 660F76E4 pcmpeqd xmm4, xmm4 XDIS 8: SSE SSE2 660F72D41F psrld xmm4, 0x1f XDIS d: SSE SSE2 660F72F401 pslld xmm4, 0x1 XDIS 12: DATAXFER SSE2 F30F7E07 movq xmm0, qword ptr [rdi] XDIS 16: DATAXFER SSE2 F30F7E4F04 movq xmm1, qword ptr [rdi+0x4] XDIS 1b: SSE SSE2 660F61C5 punpcklwd xmm0, xmm5 XDIS 1f: SSE SSE2 660F61CD punpcklwd xmm1, xmm5 XDIS 23: DATAXFER SSE2 660F6FD0 movdqa xmm2, xmm0 XDIS 27: DATAXFER SSE2 660F6FD9 movdqa xmm3, xmm1 XDIS 2b: SSE SSE2 660F70D24E pshufd xmm2, xmm2, 0x4e XDIS 30: SSE SSE2 660F70DB4E pshufd xmm3, xmm3, 0x4e XDIS 35: SSE SSE2 660FFED4 paddd xmm2, xmm4 XDIS 39: SSE SSE2 660FFEDC paddd xmm3, xmm4 XDIS 3d: SSE SSE2 660FFED0 paddd xmm2, xmm0 XDIS 41: SSE SSE2 660FFED9 paddd xmm3, xmm1 XDIS 45: SSE SSE2 660FFEC0 paddd xmm0, xmm0 XDIS 49: SSE SSE2 660FFEC9 paddd xmm1, xmm1 XDIS 4d: SSE SSE2 660FFEC2 paddd xmm0, xmm2 XDIS 51: SSE SSE2 660FFECB paddd xmm1, xmm3 XDIS 55: SSE SSE2 660F72D002 psrld xmm0, 0x2 XDIS 5a: SSE SSE2 660F72D102 psrld xmm1, 0x2 XDIS 5f: SSE SSE4 660F382BC1 packusdw xmm0, xmm1 XDIS 64: DATAXFER SSE2 F30F7F06 movdqu xmmword ptr [rsi], xmm0 XDIS 68: MISC BASE 488D7F08 lea rdi, ptr [rdi+0x8] XDIS 6c: MISC BASE 488D7610 lea rsi, ptr [rsi+0x10] XDIS 70: BINARY BASE 83EA04 sub edx, 0x4 XDIS 73: COND_BR BASE 7F9D jnle 0x12 <ScaleUVRowUp2_Linear_16_SSE2+0x12> XDIS 75: RET BASE C3 ret SYM ScaleUVRowUp2_Bilinear_16_SSE2: XDIS 0: LOGICAL SSE2 660FEFFF pxor xmm7, xmm7 XDIS 4: SSE SSE2 660F76F6 pcmpeqd xmm6, xmm6 XDIS 8: SSE SSE2 660F72D61F psrld xmm6, 0x1f XDIS d: SSE SSE2 660F72F603 pslld xmm6, 0x3 XDIS 12: DATAXFER SSE2 F30F7E07 movq xmm0, qword ptr [rdi] XDIS 16: DATAXFER SSE2 F30F7E4F04 movq xmm1, qword ptr [rdi+0x4] XDIS 1b: SSE SSE2 660F61C7 punpcklwd xmm0, xmm7 XDIS 1f: SSE SSE2 660F61CF punpcklwd xmm1, xmm7 XDIS 23: DATAXFER SSE2 660F6FD0 movdqa xmm2, xmm0 XDIS 27: DATAXFER SSE2 660F6FD9 movdqa xmm3, xmm1 XDIS 2b: SSE SSE2 660F70D24E pshufd xmm2, xmm2, 0x4e XDIS 30: SSE SSE2 660F70DB4E pshufd xmm3, xmm3, 0x4e XDIS 35: SSE SSE2 660FFED0 paddd xmm2, xmm0 XDIS 39: SSE SSE2 660FFED9 paddd xmm3, xmm1 XDIS 3d: SSE SSE2 660FFEC0 paddd xmm0, xmm0 XDIS 41: SSE SSE2 660FFEC9 paddd xmm1, xmm1 XDIS 45: SSE SSE2 660FFEC2 paddd xmm0, xmm2 XDIS 49: SSE SSE2 660FFECB paddd xmm1, xmm3 XDIS 4d: DATAXFER SSE2 F30F7E1477 movq xmm2, qword ptr [rdi+rsi*2] XDIS 52: DATAXFER SSE2 F30F7E5C7704 movq xmm3, qword ptr [rdi+rsi*2+0x4] XDIS 58: SSE SSE2 660F61D7 punpcklwd xmm2, xmm7 XDIS 5c: SSE SSE2 660F61DF punpcklwd xmm3, xmm7 XDIS 60: DATAXFER SSE2 660F6FE2 movdqa xmm4, xmm2 XDIS 64: DATAXFER SSE2 660F6FEB movdqa xmm5, xmm3 XDIS 68: SSE SSE2 660F70E44E pshufd xmm4, xmm4, 0x4e XDIS 6d: SSE SSE2 660F70ED4E pshufd xmm5, xmm5, 0x4e XDIS 72: SSE SSE2 660FFEE2 paddd xmm4, xmm2 XDIS 76: SSE SSE2 660FFEEB paddd xmm5, xmm3 XDIS 7a: SSE SSE2 660FFED2 paddd xmm2, xmm2 XDIS 7e: SSE SSE2 660FFEDB paddd xmm3, xmm3 XDIS 82: SSE SSE2 660FFED4 paddd xmm2, xmm4 XDIS 86: SSE SSE2 660FFEDD paddd xmm3, xmm5 XDIS 8a: DATAXFER SSE2 660F6FE0 movdqa xmm4, xmm0 XDIS 8e: DATAXFER SSE2 660F6FEA movdqa xmm5, xmm2 XDIS 92: SSE SSE2 660FFEE0 paddd xmm4, xmm0 XDIS 96: SSE SSE2 660FFEEE paddd xmm5, xmm6 XDIS 9a: SSE SSE2 660FFEE0 paddd xmm4, xmm0 XDIS 9e: SSE SSE2 660FFEE5 paddd xmm4, xmm5 XDIS a2: SSE SSE2 660F72D404 psrld xmm4, 0x4 XDIS a7: DATAXFER SSE2 660F6FEA movdqa xmm5, xmm2 XDIS ab: SSE SSE2 660FFEEA paddd xmm5, xmm2 XDIS af: SSE SSE2 660FFEC6 paddd xmm0, xmm6 XDIS b3: SSE SSE2 660FFEEA paddd xmm5, xmm2 XDIS b7: SSE SSE2 660FFEE8 paddd xmm5, xmm0 XDIS bb: SSE SSE2 660F72D504 psrld xmm5, 0x4 XDIS c0: DATAXFER SSE2 660F6FC1 movdqa xmm0, xmm1 XDIS c4: DATAXFER SSE2 660F6FD3 movdqa xmm2, xmm3 XDIS c8: SSE SSE2 660FFEC1 paddd xmm0, xmm1 XDIS cc: SSE SSE2 660FFED6 paddd xmm2, xmm6 XDIS d0: SSE SSE2 660FFEC1 paddd xmm0, xmm1 XDIS d4: SSE SSE2 660FFEC2 paddd xmm0, xmm2 XDIS d8: SSE SSE2 660F72D004 psrld xmm0, 0x4 XDIS dd: DATAXFER SSE2 660F6FD3 movdqa xmm2, xmm3 XDIS e1: SSE SSE2 660FFED3 paddd xmm2, xmm3 XDIS e5: SSE SSE2 660FFECE paddd xmm1, xmm6 XDIS e9: SSE SSE2 660FFED3 paddd xmm2, xmm3 XDIS ed: SSE SSE2 660FFED1 paddd xmm2, xmm1 XDIS f1: SSE SSE2 660F72D204 psrld xmm2, 0x4 XDIS f6: SSE SSE4 660F382BE0 packusdw xmm4, xmm0 XDIS fb: DATAXFER SSE2 F30F7F22 movdqu xmmword ptr [rdx], xmm4 XDIS ff: SSE SSE4 660F382BEA packusdw xmm5, xmm2 XDIS 104: DATAXFER SSE2 F30F7F2C4A movdqu xmmword ptr [rdx+rcx*2], xmm5 XDIS 109: MISC BASE 488D7F08 lea rdi, ptr [rdi+0x8] XDIS 10d: MISC BASE 488D5210 lea rdx, ptr [rdx+0x10] XDIS 111: BINARY BASE 4183E804 sub r8d, 0x4 XDIS 115: COND_BR BASE 0F8FF7FEFFFF jnle 0x12 <ScaleUVRowUp2_Bilinear_16_SSE2+0x12> XDIS 11b: RET BASE C3 ret Change-Id: Ia20860e9c3c45368822cfd8877167ff0bf973dcc Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3587602 Reviewed-by: richard winterton <rrwinterton@gmail.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-03-25Fix bugs in I010AlphaToARGBMatrixBilinear()Wan-Teh Chang
Add a missing increment of src_a and ARGBAttenuateRow() call. Bug: libyuv:922 Change-Id: I26e04e70c6a1a231cbe54b60c249f4c2e8af112a Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3549976 Reviewed-by: Mirko Bonadei <mbonadei@chromium.org> Commit-Queue: Wan-Teh Chang <wtc@google.com>
2022-03-25Add null pointer checks for the src_a parametersWan-Teh Chang
Change-Id: Icc96e18eab07080c18b6542171a340c97f059c78 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3550016 Reviewed-by: Mirko Bonadei <mbonadei@chromium.org> Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
2022-03-09Fix FilterMode enum typeYuan Tong
When used in C enum keyword can't be eliminated. Bug: libyuv:872 Change-Id: Iacff5a8bd84ec7caa1f90889e48f81ffc10071ae Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3513317 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-03-09Add YUV to RGB conversion function with filter parameterYuan Tong
Add the following functions: I420ToARGBMatrixFilter I422ToARGBMatrixFilter I010ToAR30MatrixFilter I210ToAR30MatrixFilter I010ToARGBMatrixFilter I210ToARGBMatrixFilter I420AlphaToARGBMatrixFilter I422AlphaToARGBMatrixFilter I010AlphaToARGBMatrixFilter I210AlphaToARGBMatrixFilter Bug: libyuv:872 Change-Id: Ib33b09fd7d304688c5e06c55e0a576a964665a51 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3430334 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-03-09Optimize functions for LASX in row_lasx.cc.Hao Chen
1. Optimize 18 functions in source/row_lasx.cc file. 2. Make small modifications to LSX. 3. Remove some unnecessary content. Bug: libyuv:912 Change-Id: Ifd1d85366efb9cdb3b99491e30fa450ff1848661 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3507640 Reviewed-by: Mirko Bonadei <mbonadei@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-01-31DetilePlane and unittest for NEONFrank Barchard
Bug: libyuv:915, b/215425056 Change-Id: Iccab1ed3f6d385f02895d44faa94d198ad79d693 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3424820 Reviewed-by: Justin Green <greenjustin@google.com> Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-01-26Remove MMI supportFrank Barchard
Bug: libyuv:916 Change-Id: I345b7e271ceb4b32fe91e292915e66be40812810 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3415817 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Wan-Teh Chang <wtc@google.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-01-21Add optimization functions in row_lsx.cc file.Hao Chen
Optimize 44 functions in source/row_lsx.cc file. All test cases passed on loongarch platform. Bug: libyuv:913 Change-Id: Ic80a5751314adc2e9bd435f2bbd928ab017a90f9 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3351467 Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2022-01-21Add optimization functions in row_lasx.cc file.Hao Chen
Optimize 32 functions in source/row_lasx.cc file. All test cases passed on loongarch platform. Bug: libyuv:912 Signed-off-by: Hao Chen <chenhao@loongson.cn> Change-Id: I7d3f649f753f72ca9bd052d5e0562dbc6f6ccfed Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3351466 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-01-20Add supports for loongarch LSX and LASX.Hao Chen
1. Add supports for LSX and LASX. 2. Three optimization functions are added in loongarch/row_lasx.cc file: I422ToARGBRow_LASX,I422ToRGBARow_LASX,I422AlphaToARGBRow_LASX. Bug: libyuv:912, Bug: libyuv:913 Change-Id: I043c2704f99a5215724b5c0b7f97e6bf5f7a199b Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3329189 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2022-01-14I420ToARGB for AVX512Frank Barchard
On Skylake Xeon AVX512 I420ToARGB_Opt (2050 ms) AVX2 I420ToARGB_Opt (2533 ms) SSSE3 I420ToARGB_Opt (3688 ms) Bug: libyuv:911 Change-Id: I2214cc15dec24b06541895ca59d88990edbb2216 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3382100 Reviewed-by: richard winterton <rrwinterton@gmail.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2021-11-24NV21ToYUV24 replace ST3 with ST1. ARGBToAR64 replace ST2 with ST1Frank Barchard
On Samsung S8 Exynos M2 Was ST3 NV21ToYUV24_Opt (769 ms) Now ST1 NV21ToYUV24_Opt (473 ms) Was ST2 ARGBToAR64_Opt (1759 ms) Now ST1 ARGBToAR64_Opt (987 ms) Skylake Xeon, AVX2 version: Was NV21ToYUV24_Opt (885 ms) Now NV21ToYUV24_Opt (194 ms) Bug: b/204562143, b/124413599 Change-Id: Icc9cb64d822cd11937789a4e04fbb773b3e33aa3 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3290664 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: richard winterton <rrwinterton@gmail.com>
2021-04-21Disable win32 SIMDFrank Barchard
Bug: libyuv:900, libyuv:848, b/178283356, b/185922513 Change-Id: Iee7d9970c7991856c8f51158cd12ec72ee9c57eb Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2844779 Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
2021-03-23Add RAWToJ420Frank Barchard
Add J420 output from RAW. Optimize RGB24 and RAW To J420 on ARM by using NEON for the 2 step conversion. Also fix sign-compare warning that was breaking Windows build Bug: libyuv:887, b/183534734 Change-Id: I8c39334552dc0b28414e638708db413d6adf8d6e Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2783382 Reviewed-by: Wan-Teh Chang <wtc@google.com>
2021-03-13Add support for AR64 formatYuan Tong
Add following conversions: ARGB,ABGR <-> AR64,AB64 AR64 <-> AB64 R=fbarchard@chromium.org Change-Id: I5ca5b40a98bffea11981e136afae4a511ba6c564 Bug: libyuv:886 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2746780 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2021-03-05Add 12 bit YUV to 10 bit RGBFrank Barchard
Bug: libyuv:843 Change-Id: I0104c8fcaeed09e83d2fd654c6a5e7d41bcb74cf Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2727775 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Wan-Teh Chang <wtc@google.com>
2021-03-03Add more 10 bit YUV To RGB functionYuan Tong
The following functions are added: planar YUV: I410ToAR30, I410ToARGB planar YUVA: I010AlphaToARGB, I210AlphaToARGB, I410AlphaToARGB biplanar YUV: P010ToARGB, P210ToARGB P010ToAR30, P210ToAR30 biplanar functions can also handle 12 bit and 16 bit samples. libyuv_unittest --gtest_filter=LibYUVConvertTest.*10*ToA*:LibYUVConvertTest.*P?1?ToA* R=fbarchard@chromium.org Bug: libyuv:751, libyuv:844 Change-Id: I2be02244dfa23335e1e7bc241fb0613990208de5 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2707003 Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2021-01-23Add I422AlphaToARGB and I444AlphaToARGBYuan Tong
Bug: libyuv:878 Change-Id: I64c314326ac7ae5242acc64e20016e30adc6d17f Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2639439 Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2020-05-26Remove M420 and refactor NV12ToI420Frank Barchard
M420 is a row biplanar variation of NV12 supported on Microsoft webcams. The code was hardcoded to bt.601 and should be jpeg, but the format is very old and rare. Is a variation on NV12, so if someone needs it, it can be re-implemented easily. Bug: libyuv:858 Change-Id: I246167dba3c190cc76af741b8e91e58e68fde28f Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2212608 Reviewed-by: richard winterton <rrwinterton@gmail.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2020-05-20I400ToARGBMatrix Pass a color matrix to use different coefficientsFrank Barchard
32 bit Neon I400ToARGB_Opt (1937 ms) 64 bit C I400ToARGB_Opt (8957 ms) NEON I400ToARGB_Opt (2147 ms) x86 cI400ToARGB_Opt (1110 ms) AVX2 I400ToARGB_Opt (213 ms) SSE2 I400ToARGB_Opt (225 ms) Bug: libyuv:861, b/156642185 Change-Id: I96b6f4ebba6ff9c4ed8803291ce098de6f93fa4f Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2209718 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: richard winterton <rrwinterton@gmail.com>
2020-05-19YUV to RGB Matrix functions for color space supportFrank Barchard
Make all Matrix versions of conversions public. Bug: libyuv:861, b/156642185 Change-Id: Ida067c95dd041b612e2bab64dbface58b257038a Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2202748 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Chong Zhang <chz@google.com>
2020-04-28Move init process of msa after mmi.Shiyou Yin
Some processors support both MSA and MMI. when they are enabled together, MSA will be preferd. This patch move MSA initialization after MMI, so that MSA can overide MMI and be setted to effective. Change-Id: I8a52cce83ee4ec9727d47c99b287c9580329b149 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2155944 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2020-03-24RGB24Mirror functionFrank Barchard
Bug: b/151960427 Change-Id: I413db0011a4ed87eefc0dd166bb8e076b5aa4b1d Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2116639 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: richard winterton <rrwinterton@gmail.com>
2019-11-06I210ToAR30 support for 422 10 bit to 10 bit RGBFrank Barchard
BUG=960620, libyuv:845, b/129864744 Change-Id: I43b152568b7f297f81624d47e56a334c127be17b Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/1901465 Reviewed-by: Dale Curtis <dalecurtis@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2019-11-05Add U444ToABGR, J444ToABGR, H444ToABGR, H444ToARGB and ConvertToARGB supportFrank Barchard
BUG=960620, libyuv:845, b/129864744 Change-Id: I9f80cda3be8e13298c596fac514f65a23a38d3d0 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/1900310 Reviewed-by: Dale Curtis <dalecurtis@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2019-11-05BT.2020 pull in tests and upstream fixes; expose a few more methods.Frank Barchard
This adds some missing prototypes from the BT.2020 CL as well as expands the H444 and J444 results. BUG=960620, libyuv:845, b/129864744 Change-Id: I8ea3959379f1bb2edb857d4eb90fb9a1f6aa4e03 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/1899093 Reviewed-by: Dale Curtis <dalecurtis@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2019-10-29Add support for BT.2020.Dale Curtis
This pulls in the changes that Firefox made to add BT.2020 support as well as expands them to the existing 10-bit support. So we now have the following input formats: U420, U422, U444, U010. BUG=960620, libyuv:845 Change-Id: If0c47853a465d0ed660f849db08e71489fe1b9c2 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/1884468 Commit-Queue: Dale Curtis <dalecurtis@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2019-10-14RAWToRGBA for 3 channel OCRFrank Barchard
Replace ARM64 only row function with high level function that implements SSSE3, 32 bit Neon and C. Compared to 2 step RAWToARGB + ARGBToRGBA on row level: 3.1x faster on ARM 6.2% faster on Intel BUG=b/140748379 Change-Id: Ia8636d9e4fcdbe10b8c2e81610a54728e29845cd Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/1860914 Reviewed-by: richard winterton <rrwinterton@gmail.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2019-09-11MMI Optimized functions I422ToARGB for 1080p videoFrank Barchard
Improves playback performance for 1080p video on www.youku.com BUG=libyuv:841 Change-Id: Iabe7693fba276162af0290863f46e214ab86fb6c Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/1790959 Reviewed-by: Miguel Casas <mcasas@chromium.org>