diff options
author | Frank Barchard <fbarchard@google.com> | 2019-09-11 11:39:52 -0700 |
---|---|---|
committer | Frank Barchard <fbarchard@chromium.org> | 2019-09-11 21:06:21 +0000 |
commit | c85a7b3ae3efb8b7e63aa86122c42843333ab91d (patch) | |
tree | 2d76dc6838076c5bc6c59419c4d0ae9da3d29ec3 /source/convert_from.cc | |
parent | eeccc19a99fec583ee927df665291ecdd5dc15af (diff) | |
download | libyuv-c85a7b3ae3efb8b7e63aa86122c42843333ab91d.tar.gz |
MMI Optimized functions I422ToARGB for 1080p video
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>
Diffstat (limited to 'source/convert_from.cc')
-rw-r--r-- | source/convert_from.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/source/convert_from.cc b/source/convert_from.cc index 60140cb4..dc25d4fe 100644 --- a/source/convert_from.cc +++ b/source/convert_from.cc @@ -592,6 +592,14 @@ static int I420ToRGBAMatrix(const uint8_t* src_y, } } #endif +#if defined(HAS_I422TORGBAROW_MMI) + if (TestCpuFlag(kCpuHasMMI)) { + I422ToRGBARow = I422ToRGBARow_Any_MMI; + if (IS_ALIGNED(width, 4)) { + I422ToRGBARow = I422ToRGBARow_MMI; + } + } +#endif for (y = 0; y < height; ++y) { I422ToRGBARow(src_y, src_u, src_v, dst_rgba, yuvconstants, width); @@ -699,6 +707,14 @@ static int I420ToRGB24Matrix(const uint8_t* src_y, } } #endif +#if defined(HAS_I422TORGB24ROW_MMI) + if (TestCpuFlag(kCpuHasMMI)) { + I422ToRGB24Row = I422ToRGB24Row_Any_MMI; + if (IS_ALIGNED(width, 4)) { + I422ToRGB24Row = I422ToRGB24Row_MMI; + } + } +#endif for (y = 0; y < height; ++y) { I422ToRGB24Row(src_y, src_u, src_v, dst_rgb24, yuvconstants, width); @@ -843,6 +859,14 @@ int I420ToARGB1555(const uint8_t* src_y, } } #endif +#if defined(HAS_I422TOARGB1555ROW_MMI) + if (TestCpuFlag(kCpuHasMMI)) { + I422ToARGB1555Row = I422ToARGB1555Row_Any_MMI; + if (IS_ALIGNED(width, 4)) { + I422ToARGB1555Row = I422ToARGB1555Row_MMI; + } + } +#endif for (y = 0; y < height; ++y) { I422ToARGB1555Row(src_y, src_u, src_v, dst_argb1555, &kYuvI601Constants, @@ -916,6 +940,14 @@ int I420ToARGB4444(const uint8_t* src_y, } } #endif +#if defined(HAS_I422TOARGB4444ROW_MMI) + if (TestCpuFlag(kCpuHasMMI)) { + I422ToARGB4444Row = I422ToARGB4444Row_Any_MMI; + if (IS_ALIGNED(width, 4)) { + I422ToARGB4444Row = I422ToARGB4444Row_MMI; + } + } +#endif for (y = 0; y < height; ++y) { I422ToARGB4444Row(src_y, src_u, src_v, dst_argb4444, &kYuvI601Constants, @@ -989,6 +1021,14 @@ int I420ToRGB565Matrix(const uint8_t* src_y, } } #endif +#if defined(HAS_I422TORGB565ROW_MMI) + if (TestCpuFlag(kCpuHasMMI)) { + I422ToRGB565Row = I422ToRGB565Row_Any_MMI; + if (IS_ALIGNED(width, 4)) { + I422ToRGB565Row = I422ToRGB565Row_MMI; + } + } +#endif for (y = 0; y < height; ++y) { I422ToRGB565Row(src_y, src_u, src_v, dst_rgb565, yuvconstants, width); @@ -1192,6 +1232,14 @@ int I420ToRGB565Dither(const uint8_t* src_y, } } #endif +#if defined(HAS_I422TOARGBROW_MMI) + if (TestCpuFlag(kCpuHasMMI)) { + I422ToARGBRow = I422ToARGBRow_Any_MMI; + if (IS_ALIGNED(width, 4)) { + I422ToARGBRow = I422ToARGBRow_MMI; + } + } +#endif #if defined(HAS_ARGBTORGB565DITHERROW_SSE2) if (TestCpuFlag(kCpuHasSSE2)) { ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_Any_SSE2; @@ -1224,6 +1272,14 @@ int I420ToRGB565Dither(const uint8_t* src_y, } } #endif +#if defined(HAS_ARGBTORGB565DITHERROW_MMI) + if (TestCpuFlag(kCpuHasMMI)) { + ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_Any_MMI; + if (IS_ALIGNED(width, 4)) { + ARGBToRGB565DitherRow = ARGBToRGB565DitherRow_MMI; + } + } +#endif { // Allocate a row of argb. align_buffer_64(row_argb, width * 4); |