mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-07 01:06:46 +08:00
RGB24ToJ420 for full range YUV
BUG=b/249563884 Change-Id: I41b45b274313ec22f5e3799000242da1ec692586 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/1629527 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: richard winterton <rrwinterton@gmail.com>
This commit is contained in:
parent
681c6c6739
commit
af9bc4f67c
@ -1,6 +1,6 @@
|
|||||||
Name: libyuv
|
Name: libyuv
|
||||||
URL: http://code.google.com/p/libyuv/
|
URL: http://code.google.com/p/libyuv/
|
||||||
Version: 1730
|
Version: 1731
|
||||||
License: BSD
|
License: BSD
|
||||||
License File: LICENSE
|
License File: LICENSE
|
||||||
|
|
||||||
|
|||||||
@ -344,6 +344,19 @@ int RGB24ToI420(const uint8_t* src_rgb24,
|
|||||||
int width,
|
int width,
|
||||||
int height);
|
int height);
|
||||||
|
|
||||||
|
// RGB little endian (bgr in memory) to J420.
|
||||||
|
LIBYUV_API
|
||||||
|
int RGB24ToJ420(const uint8_t* src_rgb24,
|
||||||
|
int src_stride_rgb24,
|
||||||
|
uint8_t* dst_y,
|
||||||
|
int dst_stride_y,
|
||||||
|
uint8_t* dst_u,
|
||||||
|
int dst_stride_u,
|
||||||
|
uint8_t* dst_v,
|
||||||
|
int dst_stride_v,
|
||||||
|
int width,
|
||||||
|
int height);
|
||||||
|
|
||||||
// RGB big endian (rgb in memory) to I420.
|
// RGB big endian (rgb in memory) to I420.
|
||||||
LIBYUV_API
|
LIBYUV_API
|
||||||
int RAWToI420(const uint8_t* src_raw,
|
int RAWToI420(const uint8_t* src_raw,
|
||||||
@ -396,6 +409,15 @@ int ARGB4444ToI420(const uint8_t* src_argb4444,
|
|||||||
int width,
|
int width,
|
||||||
int height);
|
int height);
|
||||||
|
|
||||||
|
// RGB little endian (bgr in memory) to J400.
|
||||||
|
LIBYUV_API
|
||||||
|
int RGB24ToJ400(const uint8_t* src_rgb24,
|
||||||
|
int src_stride_rgb24,
|
||||||
|
uint8_t* dst_yj,
|
||||||
|
int dst_stride_yj,
|
||||||
|
int width,
|
||||||
|
int height);
|
||||||
|
|
||||||
#ifdef HAVE_JPEG
|
#ifdef HAVE_JPEG
|
||||||
// src_width/height provided by capture.
|
// src_width/height provided by capture.
|
||||||
// dst_width/height for clipping determine final size.
|
// dst_width/height for clipping determine final size.
|
||||||
|
|||||||
@ -11,6 +11,6 @@
|
|||||||
#ifndef INCLUDE_LIBYUV_VERSION_H_
|
#ifndef INCLUDE_LIBYUV_VERSION_H_
|
||||||
#define INCLUDE_LIBYUV_VERSION_H_
|
#define INCLUDE_LIBYUV_VERSION_H_
|
||||||
|
|
||||||
#define LIBYUV_VERSION 1730
|
#define LIBYUV_VERSION 1731
|
||||||
|
|
||||||
#endif // INCLUDE_LIBYUV_VERSION_H_
|
#endif // INCLUDE_LIBYUV_VERSION_H_
|
||||||
|
|||||||
@ -1584,6 +1584,155 @@ int RGB24ToI420(const uint8_t* src_rgb24,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(fbarchard): Use Matrix version to implement I420 and J420.
|
||||||
|
// Convert RGB24 to J420.
|
||||||
|
LIBYUV_API
|
||||||
|
int RGB24ToJ420(const uint8_t* src_rgb24,
|
||||||
|
int src_stride_rgb24,
|
||||||
|
uint8_t* dst_y,
|
||||||
|
int dst_stride_y,
|
||||||
|
uint8_t* dst_u,
|
||||||
|
int dst_stride_u,
|
||||||
|
uint8_t* dst_v,
|
||||||
|
int dst_stride_v,
|
||||||
|
int width,
|
||||||
|
int height) {
|
||||||
|
int y;
|
||||||
|
#if (defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
void (*RGB24ToUVJRow)(const uint8_t* src_rgb24, int src_stride_rgb24,
|
||||||
|
uint8_t* dst_u, uint8_t* dst_v, int width) =
|
||||||
|
RGB24ToUVJRow_C;
|
||||||
|
void (*RGB24ToYJRow)(const uint8_t* src_rgb24, uint8_t* dst_y, int width) =
|
||||||
|
RGB24ToYJRow_C;
|
||||||
|
#else
|
||||||
|
void (*RGB24ToARGBRow)(const uint8_t* src_rgb, uint8_t* dst_argb, int width) =
|
||||||
|
RGB24ToARGBRow_C;
|
||||||
|
void (*ARGBToUVJRow)(const uint8_t* src_argb0, int src_stride_argb,
|
||||||
|
uint8_t* dst_u, uint8_t* dst_v, int width) =
|
||||||
|
ARGBToUVJRow_C;
|
||||||
|
void (*ARGBToYJRow)(const uint8_t* src_argb, uint8_t* dst_y, int width) =
|
||||||
|
ARGBToYJRow_C;
|
||||||
|
#endif
|
||||||
|
if (!src_rgb24 || !dst_y || !dst_u || !dst_v || width <= 0 || height == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// Negative height means invert the image.
|
||||||
|
if (height < 0) {
|
||||||
|
height = -height;
|
||||||
|
src_rgb24 = src_rgb24 + (height - 1) * src_stride_rgb24;
|
||||||
|
src_stride_rgb24 = -src_stride_rgb24;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Neon version does direct RGB24 to YUV.
|
||||||
|
#if defined(HAS_RGB24TOYJROW_NEON)
|
||||||
|
if (TestCpuFlag(kCpuHasNEON)) {
|
||||||
|
RGB24ToUVJRow = RGB24ToUVJRow_Any_NEON;
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_Any_NEON;
|
||||||
|
if (IS_ALIGNED(width, 8)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_NEON;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
RGB24ToUVJRow = RGB24ToUVJRow_NEON;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif defined(HAS_RGB24TOYJROW_MSA)
|
||||||
|
if (TestCpuFlag(kCpuHasMSA)) {
|
||||||
|
RGB24ToUVJRow = RGB24ToUVJRow_Any_MSA;
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_Any_MSA;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_MSA;
|
||||||
|
RGB24ToUVJRow = RGB24ToUVJRow_MSA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif defined(HAS_RGB24TOYJROW_MMI)
|
||||||
|
if (TestCpuFlag(kCpuHasMMI)) {
|
||||||
|
RGB24ToUVJRow = RGB24ToUVJRow_Any_MMI;
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_Any_MMI;
|
||||||
|
if (IS_ALIGNED(width, 8)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_MMI;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
RGB24ToUVJRow = RGB24ToUVJRow_MMI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Other platforms do intermediate conversion from RGB24 to ARGB.
|
||||||
|
#else
|
||||||
|
#if defined(HAS_RGB24TOARGBROW_SSSE3)
|
||||||
|
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||||
|
RGB24ToARGBRow = RGB24ToARGBRow_Any_SSSE3;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
RGB24ToARGBRow = RGB24ToARGBRow_SSSE3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(HAS_ARGBTOYJROW_SSSE3) && defined(HAS_ARGBTOUVJROW_SSSE3)
|
||||||
|
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||||
|
ARGBToUVJRow = ARGBToUVJRow_Any_SSSE3;
|
||||||
|
ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
ARGBToUVJRow = ARGBToUVJRow_SSSE3;
|
||||||
|
ARGBToYJRow = ARGBToYJRow_SSSE3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(HAS_ARGBTOYJROW_AVX2) && defined(HAS_ARGBTOUVJROW_AVX2)
|
||||||
|
if (TestCpuFlag(kCpuHasAVX2)) {
|
||||||
|
ARGBToUVJRow = ARGBToUVJRow_Any_AVX2;
|
||||||
|
ARGBToYJRow = ARGBToYJRow_Any_AVX2;
|
||||||
|
if (IS_ALIGNED(width, 32)) {
|
||||||
|
ARGBToUVJRow = ARGBToUVJRow_AVX2;
|
||||||
|
ARGBToYJRow = ARGBToYJRow_AVX2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
#if !(defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
// Allocate 2 rows of ARGB.
|
||||||
|
const int kRowSize = (width * 4 + 31) & ~31;
|
||||||
|
align_buffer_64(row, kRowSize * 2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
|
#if (defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
RGB24ToUVJRow(src_rgb24, src_stride_rgb24, dst_u, dst_v, width);
|
||||||
|
RGB24ToYJRow(src_rgb24, dst_y, width);
|
||||||
|
RGB24ToYJRow(src_rgb24 + src_stride_rgb24, dst_y + dst_stride_y, width);
|
||||||
|
#else
|
||||||
|
RGB24ToARGBRow(src_rgb24, row, width);
|
||||||
|
RGB24ToARGBRow(src_rgb24 + src_stride_rgb24, row + kRowSize, width);
|
||||||
|
ARGBToUVJRow(row, kRowSize, dst_u, dst_v, width);
|
||||||
|
ARGBToYJRow(row, dst_y, width);
|
||||||
|
ARGBToYJRow(row + kRowSize, dst_y + dst_stride_y, width);
|
||||||
|
#endif
|
||||||
|
src_rgb24 += src_stride_rgb24 * 2;
|
||||||
|
dst_y += dst_stride_y * 2;
|
||||||
|
dst_u += dst_stride_u;
|
||||||
|
dst_v += dst_stride_v;
|
||||||
|
}
|
||||||
|
if (height & 1) {
|
||||||
|
#if (defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
RGB24ToUVJRow(src_rgb24, 0, dst_u, dst_v, width);
|
||||||
|
RGB24ToYJRow(src_rgb24, dst_y, width);
|
||||||
|
#else
|
||||||
|
RGB24ToARGBRow(src_rgb24, row, width);
|
||||||
|
ARGBToUVJRow(row, 0, dst_u, dst_v, width);
|
||||||
|
ARGBToYJRow(row, dst_y, width);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if !(defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
free_aligned_buffer_64(row);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Convert RAW to I420.
|
// Convert RAW to I420.
|
||||||
LIBYUV_API
|
LIBYUV_API
|
||||||
int RAWToI420(const uint8_t* src_raw,
|
int RAWToI420(const uint8_t* src_raw,
|
||||||
@ -2220,6 +2369,124 @@ int ARGB4444ToI420(const uint8_t* src_argb4444,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert RGB24 to J400.
|
||||||
|
LIBYUV_API
|
||||||
|
int RGB24ToJ400(const uint8_t* src_rgb24,
|
||||||
|
int src_stride_rgb24,
|
||||||
|
uint8_t* dst_yj,
|
||||||
|
int dst_stride_yj,
|
||||||
|
int width,
|
||||||
|
int height) {
|
||||||
|
int y;
|
||||||
|
#if (defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
void (*RGB24ToYJRow)(const uint8_t* src_rgb24, uint8_t* dst_yj, int width) =
|
||||||
|
RGB24ToYJRow_C;
|
||||||
|
#else
|
||||||
|
void (*RGB24ToARGBRow)(const uint8_t* src_rgb, uint8_t* dst_argb, int width) =
|
||||||
|
RGB24ToARGBRow_C;
|
||||||
|
void (*ARGBToYJRow)(const uint8_t* src_argb, uint8_t* dst_yj, int width) =
|
||||||
|
ARGBToYJRow_C;
|
||||||
|
#endif
|
||||||
|
if (!src_rgb24 || !dst_yj || width <= 0 || height == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// Negative height means invert the image.
|
||||||
|
if (height < 0) {
|
||||||
|
height = -height;
|
||||||
|
src_rgb24 = src_rgb24 + (height - 1) * src_stride_rgb24;
|
||||||
|
src_stride_rgb24 = -src_stride_rgb24;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Neon version does direct RGB24 to YUV.
|
||||||
|
#if defined(HAS_RGB24TOYJROW_NEON)
|
||||||
|
if (TestCpuFlag(kCpuHasNEON)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_Any_NEON;
|
||||||
|
if (IS_ALIGNED(width, 8)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_NEON;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif defined(HAS_RGB24TOYJROW_MSA)
|
||||||
|
if (TestCpuFlag(kCpuHasMSA)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_Any_MSA;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_MSA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif defined(HAS_RGB24TOYJROW_MMI)
|
||||||
|
if (TestCpuFlag(kCpuHasMMI)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_Any_MMI;
|
||||||
|
if (IS_ALIGNED(width, 8)) {
|
||||||
|
RGB24ToYJRow = RGB24ToYJRow_MMI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Other platforms do intermediate conversion from RGB24 to ARGB.
|
||||||
|
#else
|
||||||
|
#if defined(HAS_RGB24TOARGBROW_SSSE3)
|
||||||
|
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||||
|
RGB24ToARGBRow = RGB24ToARGBRow_Any_SSSE3;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
RGB24ToARGBRow = RGB24ToARGBRow_SSSE3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(HAS_ARGBTOYJROW_SSSE3)
|
||||||
|
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||||
|
ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
|
||||||
|
if (IS_ALIGNED(width, 16)) {
|
||||||
|
ARGBToYJRow = ARGBToYJRow_SSSE3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(HAS_ARGBTOYJROW_AVX2)
|
||||||
|
if (TestCpuFlag(kCpuHasAVX2)) {
|
||||||
|
ARGBToYJRow = ARGBToYJRow_Any_AVX2;
|
||||||
|
if (IS_ALIGNED(width, 32)) {
|
||||||
|
ARGBToYJRow = ARGBToYJRow_AVX2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
#if !(defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
// Allocate 2 rows of ARGB.
|
||||||
|
const int kRowSize = (width * 4 + 31) & ~31;
|
||||||
|
align_buffer_64(row, kRowSize * 2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
|
#if (defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
RGB24ToYJRow(src_rgb24, dst_yj, width);
|
||||||
|
RGB24ToYJRow(src_rgb24 + src_stride_rgb24, dst_yj + dst_stride_yj, width);
|
||||||
|
#else
|
||||||
|
RGB24ToARGBRow(src_rgb24, row, width);
|
||||||
|
RGB24ToARGBRow(src_rgb24 + src_stride_rgb24, row + kRowSize, width);
|
||||||
|
ARGBToYJRow(row, dst_yj, width);
|
||||||
|
ARGBToYJRow(row + kRowSize, dst_yj + dst_stride_yj, width);
|
||||||
|
#endif
|
||||||
|
src_rgb24 += src_stride_rgb24 * 2;
|
||||||
|
dst_yj += dst_stride_yj * 2;
|
||||||
|
}
|
||||||
|
if (height & 1) {
|
||||||
|
#if (defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
RGB24ToYJRow(src_rgb24, dst_yj, width);
|
||||||
|
#else
|
||||||
|
RGB24ToARGBRow(src_rgb24, row, width);
|
||||||
|
ARGBToYJRow(row, dst_yj, width);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if !(defined(HAS_RGB24TOYJROW_NEON) || defined(HAS_RGB24TOYJROW_MSA) || \
|
||||||
|
defined(HAS_RGB24TOYJROW_MMI))
|
||||||
|
free_aligned_buffer_64(row);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void SplitPixels(const uint8_t* src_u,
|
static void SplitPixels(const uint8_t* src_u,
|
||||||
int src_pixel_stride_uv,
|
int src_pixel_stride_uv,
|
||||||
uint8_t* dst_u,
|
uint8_t* dst_u,
|
||||||
|
|||||||
@ -980,26 +980,27 @@ TESTBIPLANARTOB(NV21, 2, 2, YUV24, RAW, 3, 2)
|
|||||||
TESTATOPLANARI(FMT_A, BPP_A, YALIGN, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
TESTATOPLANARI(FMT_A, BPP_A, YALIGN, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||||
benchmark_width_, DIFF, _Opt, +, 0)
|
benchmark_width_, DIFF, _Opt, +, 0)
|
||||||
|
|
||||||
TESTATOPLANAR(ARGB, 4, 1, I420, 2, 2, 4)
|
|
||||||
TESTATOPLANAR(ARGB, 4, 1, J420, 2, 2, ARM_YUV_ERROR)
|
|
||||||
TESTATOPLANAR(ARGB, 4, 1, J422, 2, 1, ARM_YUV_ERROR)
|
|
||||||
TESTATOPLANAR(BGRA, 4, 1, I420, 2, 2, 4)
|
|
||||||
TESTATOPLANAR(ABGR, 4, 1, I420, 2, 2, 4)
|
TESTATOPLANAR(ABGR, 4, 1, I420, 2, 2, 4)
|
||||||
TESTATOPLANAR(RGBA, 4, 1, I420, 2, 2, 4)
|
TESTATOPLANAR(ARGB, 4, 1, I420, 2, 2, 4)
|
||||||
TESTATOPLANAR(RAW, 3, 1, I420, 2, 2, 4)
|
|
||||||
TESTATOPLANAR(RGB24, 3, 1, I420, 2, 2, 4)
|
|
||||||
TESTATOPLANAR(RGB565, 2, 1, I420, 2, 2, 5)
|
|
||||||
// TODO(fbarchard): Make 1555 neon work same as C code, reduce to diff 9.
|
|
||||||
TESTATOPLANAR(ARGB1555, 2, 1, I420, 2, 2, 15)
|
|
||||||
TESTATOPLANAR(ARGB4444, 2, 1, I420, 2, 2, 17)
|
|
||||||
TESTATOPLANAR(ARGB, 4, 1, I422, 2, 1, 2)
|
TESTATOPLANAR(ARGB, 4, 1, I422, 2, 1, 2)
|
||||||
TESTATOPLANAR(ARGB, 4, 1, I444, 1, 1, 2)
|
TESTATOPLANAR(ARGB, 4, 1, I444, 1, 1, 2)
|
||||||
TESTATOPLANAR(YUY2, 2, 1, I420, 2, 2, 2)
|
TESTATOPLANAR(ARGB, 4, 1, J420, 2, 2, ARM_YUV_ERROR)
|
||||||
TESTATOPLANAR(UYVY, 2, 1, I420, 2, 2, 2)
|
TESTATOPLANAR(ARGB, 4, 1, J422, 2, 1, ARM_YUV_ERROR)
|
||||||
TESTATOPLANAR(YUY2, 2, 1, I422, 2, 1, 2)
|
TESTATOPLANAR(ARGB1555, 2, 1, I420, 2, 2, 15)
|
||||||
TESTATOPLANAR(UYVY, 2, 1, I422, 2, 1, 2)
|
TESTATOPLANAR(ARGB4444, 2, 1, I420, 2, 2, 17)
|
||||||
|
TESTATOPLANAR(BGRA, 4, 1, I420, 2, 2, 4)
|
||||||
TESTATOPLANAR(I400, 1, 1, I420, 2, 2, 2)
|
TESTATOPLANAR(I400, 1, 1, I420, 2, 2, 2)
|
||||||
TESTATOPLANAR(J400, 1, 1, J420, 2, 2, 2)
|
TESTATOPLANAR(J400, 1, 1, J420, 2, 2, 2)
|
||||||
|
TESTATOPLANAR(RAW, 3, 1, I420, 2, 2, 4)
|
||||||
|
TESTATOPLANAR(RGB24, 3, 1, I420, 2, 2, 4)
|
||||||
|
// TODO(fbarchard): Investigate J420 error of 11 on Windows.
|
||||||
|
TESTATOPLANAR(RGB24, 3, 1, J420, 2, 2, 11)
|
||||||
|
TESTATOPLANAR(RGB565, 2, 1, I420, 2, 2, 5)
|
||||||
|
TESTATOPLANAR(RGBA, 4, 1, I420, 2, 2, 4)
|
||||||
|
TESTATOPLANAR(UYVY, 2, 1, I420, 2, 2, 2)
|
||||||
|
TESTATOPLANAR(UYVY, 2, 1, I422, 2, 1, 2)
|
||||||
|
TESTATOPLANAR(YUY2, 2, 1, I420, 2, 2, 2)
|
||||||
|
TESTATOPLANAR(YUY2, 2, 1, I422, 2, 1, 2)
|
||||||
|
|
||||||
#define TESTATOBIPLANARI(FMT_A, SUB_A, BPP_A, FMT_PLANAR, SUBSAMP_X, \
|
#define TESTATOBIPLANARI(FMT_A, SUB_A, BPP_A, FMT_PLANAR, SUBSAMP_X, \
|
||||||
SUBSAMP_Y, W1280, N, NEG, OFF) \
|
SUBSAMP_Y, W1280, N, NEG, OFF) \
|
||||||
@ -1166,45 +1167,46 @@ TESTATOBIPLANAR(AYUV, 1, 4, NV21, 2, 2)
|
|||||||
HEIGHT_B, DIFF)
|
HEIGHT_B, DIFF)
|
||||||
|
|
||||||
// TODO(fbarchard): make ARM version of C code that matches NEON.
|
// TODO(fbarchard): make ARM version of C code that matches NEON.
|
||||||
TESTATOB(ARGB, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(AB30, 4, 4, 1, ABGR, 4, 4, 1, 0)
|
||||||
TESTATOB(ARGB, 4, 4, 1, BGRA, 4, 4, 1, 0)
|
TESTATOB(AB30, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
||||||
|
TESTATOB(ABGR, 4, 4, 1, AR30, 4, 4, 1, 0)
|
||||||
|
TESTATOB(ABGR, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
||||||
|
TESTATOB(AR30, 4, 4, 1, AB30, 4, 4, 1, 0)
|
||||||
|
TESTATOB(AR30, 4, 4, 1, ABGR, 4, 4, 1, 0)
|
||||||
|
TESTATOB(AR30, 4, 4, 1, AR30, 4, 4, 1, 0)
|
||||||
|
TESTATOB(AR30, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
||||||
TESTATOB(ARGB, 4, 4, 1, ABGR, 4, 4, 1, 0)
|
TESTATOB(ARGB, 4, 4, 1, ABGR, 4, 4, 1, 0)
|
||||||
TESTATOB(ARGB, 4, 4, 1, RGBA, 4, 4, 1, 0)
|
TESTATOB(ARGB, 4, 4, 1, AR30, 4, 4, 1, 0)
|
||||||
|
TESTATOB(ARGB, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
||||||
|
TESTATOB(ARGB, 4, 4, 1, ARGB1555, 2, 2, 1, 0)
|
||||||
|
TESTATOB(ARGB, 4, 4, 1, ARGB4444, 2, 2, 1, 0)
|
||||||
|
TESTATOB(ARGB, 4, 4, 1, ARGBMirror, 4, 4, 1, 0)
|
||||||
|
TESTATOB(ARGB, 4, 4, 1, BGRA, 4, 4, 1, 0)
|
||||||
|
TESTATOB(ARGB, 4, 4, 1, I400, 1, 1, 1, 2)
|
||||||
|
TESTATOB(ARGB, 4, 4, 1, J400, 1, 1, 1, 2)
|
||||||
TESTATOB(ARGB, 4, 4, 1, RAW, 3, 3, 1, 0)
|
TESTATOB(ARGB, 4, 4, 1, RAW, 3, 3, 1, 0)
|
||||||
TESTATOB(ARGB, 4, 4, 1, RGB24, 3, 3, 1, 0)
|
TESTATOB(ARGB, 4, 4, 1, RGB24, 3, 3, 1, 0)
|
||||||
TESTATOB(ARGB, 4, 4, 1, RGB565, 2, 2, 1, 0)
|
TESTATOB(ARGB, 4, 4, 1, RGB565, 2, 2, 1, 0)
|
||||||
TESTATOB(ARGB, 4, 4, 1, ARGB1555, 2, 2, 1, 0)
|
TESTATOB(ARGB, 4, 4, 1, RGBA, 4, 4, 1, 0)
|
||||||
TESTATOB(ARGB, 4, 4, 1, ARGB4444, 2, 2, 1, 0)
|
|
||||||
TESTATOB(ABGR, 4, 4, 1, AR30, 4, 4, 1, 0)
|
|
||||||
TESTATOB(ARGB, 4, 4, 1, AR30, 4, 4, 1, 0)
|
|
||||||
TESTATOB(ARGB, 4, 4, 1, YUY2, 2, 4, 1, 4)
|
|
||||||
TESTATOB(ARGB, 4, 4, 1, UYVY, 2, 4, 1, 4)
|
TESTATOB(ARGB, 4, 4, 1, UYVY, 2, 4, 1, 4)
|
||||||
TESTATOB(ARGB, 4, 4, 1, I400, 1, 1, 1, 2)
|
TESTATOB(ARGB, 4, 4, 1, YUY2, 2, 4, 1, 4)
|
||||||
TESTATOB(ARGB, 4, 4, 1, J400, 1, 1, 1, 2)
|
TESTATOB(ARGB1555, 2, 2, 1, ARGB, 4, 4, 1, 0)
|
||||||
|
TESTATOB(ARGB4444, 2, 2, 1, ARGB, 4, 4, 1, 0)
|
||||||
TESTATOB(BGRA, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(BGRA, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
||||||
TESTATOB(ABGR, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(I400, 1, 1, 1, ARGB, 4, 4, 1, 0)
|
||||||
TESTATOB(RGBA, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(I400, 1, 1, 1, I400, 1, 1, 1, 0)
|
||||||
TESTATOB(AR30, 4, 4, 1, AR30, 4, 4, 1, 0)
|
TESTATOB(I400, 1, 1, 1, I400Mirror, 1, 1, 1, 0)
|
||||||
|
TESTATOB(J400, 1, 1, 1, ARGB, 4, 4, 1, 0)
|
||||||
|
TESTATOB(J400, 1, 1, 1, J400, 1, 1, 1, 0)
|
||||||
TESTATOB(RAW, 3, 3, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(RAW, 3, 3, 1, ARGB, 4, 4, 1, 0)
|
||||||
TESTATOB(RAW, 3, 3, 1, RGB24, 3, 3, 1, 0)
|
TESTATOB(RAW, 3, 3, 1, RGB24, 3, 3, 1, 0)
|
||||||
TESTATOB(RGB24, 3, 3, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(RGB24, 3, 3, 1, ARGB, 4, 4, 1, 0)
|
||||||
|
TESTATOB(RGB24, 3, 3, 1, J400, 1, 1, 1, 0)
|
||||||
TESTATOB(RGB565, 2, 2, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(RGB565, 2, 2, 1, ARGB, 4, 4, 1, 0)
|
||||||
TESTATOB(ARGB1555, 2, 2, 1, ARGB, 4, 4, 1, 0)
|
TESTATOB(RGBA, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
||||||
TESTATOB(ARGB4444, 2, 2, 1, ARGB, 4, 4, 1, 0)
|
|
||||||
TESTATOB(AR30, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
|
||||||
TESTATOB(AR30, 4, 4, 1, ABGR, 4, 4, 1, 0)
|
|
||||||
TESTATOB(AB30, 4, 4, 1, ARGB, 4, 4, 1, 0)
|
|
||||||
TESTATOB(AB30, 4, 4, 1, ABGR, 4, 4, 1, 0)
|
|
||||||
TESTATOB(AR30, 4, 4, 1, AB30, 4, 4, 1, 0)
|
|
||||||
TESTATOB(YUY2, 2, 4, 1, ARGB, 4, 4, 1, ARM_YUV_ERROR)
|
|
||||||
TESTATOB(UYVY, 2, 4, 1, ARGB, 4, 4, 1, ARM_YUV_ERROR)
|
TESTATOB(UYVY, 2, 4, 1, ARGB, 4, 4, 1, ARM_YUV_ERROR)
|
||||||
|
TESTATOB(YUY2, 2, 4, 1, ARGB, 4, 4, 1, ARM_YUV_ERROR)
|
||||||
TESTATOB(YUY2, 2, 4, 1, Y, 1, 1, 1, 0)
|
TESTATOB(YUY2, 2, 4, 1, Y, 1, 1, 1, 0)
|
||||||
TESTATOB(I400, 1, 1, 1, ARGB, 4, 4, 1, 0)
|
|
||||||
TESTATOB(J400, 1, 1, 1, ARGB, 4, 4, 1, 0)
|
|
||||||
TESTATOB(I400, 1, 1, 1, I400, 1, 1, 1, 0)
|
|
||||||
TESTATOB(J400, 1, 1, 1, J400, 1, 1, 1, 0)
|
|
||||||
TESTATOB(I400, 1, 1, 1, I400Mirror, 1, 1, 1, 0)
|
|
||||||
TESTATOB(ARGB, 4, 4, 1, ARGBMirror, 4, 4, 1, 0)
|
|
||||||
|
|
||||||
#define TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
|
#define TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
|
||||||
HEIGHT_B, W1280, DIFF, N, NEG, OFF) \
|
HEIGHT_B, W1280, DIFF, N, NEG, OFF) \
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
#ifdef LIBYUV_USE_GFLAGS
|
#ifdef LIBYUV_USE_GFLAGS
|
||||||
#include "gflags/gflags.h"
|
#include "gflags/gflags.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef LIBYUV_USE_BASE_FLAGS
|
||||||
|
#include "base/commandlineflags.h"
|
||||||
|
#endif
|
||||||
#include "libyuv/cpu_id.h"
|
#include "libyuv/cpu_id.h"
|
||||||
|
|
||||||
unsigned int fastrand_seed = 0xfb;
|
unsigned int fastrand_seed = 0xfb;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user