mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2026-02-16 15:19:52 +08:00
convert source ported to c89.
BUG=303 TESTED=cl /c /TC /Iinclude source/convert.cc R=harryjin@google.com Review URL: https://webrtc-codereview.appspot.com/21849004 git-svn-id: http://libyuv.googlecode.com/svn/trunk@1029 16f28f9a-4ce2-e073-06de-1de4eb20be90
This commit is contained in:
parent
103427718a
commit
a2fbf9dee6
@ -1,6 +1,6 @@
|
|||||||
Name: libyuv
|
Name: libyuv
|
||||||
URL: http://code.google.com/p/libyuv/
|
URL: http://code.google.com/p/libyuv/
|
||||||
Version: 1026
|
Version: 1029
|
||||||
License: BSD
|
License: BSD
|
||||||
License File: LICENSE
|
License File: LICENSE
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,6 @@
|
|||||||
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
|
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
|
||||||
#define INCLUDE_LIBYUV_VERSION_H_
|
#define INCLUDE_LIBYUV_VERSION_H_
|
||||||
|
|
||||||
#define LIBYUV_VERSION 1026
|
#define LIBYUV_VERSION 1029
|
||||||
|
|
||||||
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
|
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
|
||||||
|
|||||||
@ -36,14 +36,14 @@ static int I4xxToI420(const uint8* src_y, int src_stride_y,
|
|||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int src_y_width, int src_y_height,
|
int src_y_width, int src_y_height,
|
||||||
int src_uv_width, int src_uv_height) {
|
int src_uv_width, int src_uv_height) {
|
||||||
if (src_y_width == 0 || src_y_height == 0 ||
|
|
||||||
src_uv_width == 0 || src_uv_height == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
const int dst_y_width = Abs(src_y_width);
|
const int dst_y_width = Abs(src_y_width);
|
||||||
const int dst_y_height = Abs(src_y_height);
|
const int dst_y_height = Abs(src_y_height);
|
||||||
const int dst_uv_width = SUBSAMPLE(dst_y_width, 1, 1);
|
const int dst_uv_width = SUBSAMPLE(dst_y_width, 1, 1);
|
||||||
const int dst_uv_height = SUBSAMPLE(dst_y_height, 1, 1);
|
const int dst_uv_height = SUBSAMPLE(dst_y_height, 1, 1);
|
||||||
|
if (src_y_width == 0 || src_y_height == 0 ||
|
||||||
|
src_uv_width == 0 || src_uv_height == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
ScalePlane(src_y, src_stride_y, src_y_width, src_y_height,
|
ScalePlane(src_y, src_stride_y, src_y_width, src_y_height,
|
||||||
dst_y, dst_stride_y, dst_y_width, dst_y_height,
|
dst_y, dst_stride_y, dst_y_width, dst_y_height,
|
||||||
kFilterBilinear);
|
kFilterBilinear);
|
||||||
@ -67,6 +67,8 @@ int I420Copy(const uint8* src_y, int src_stride_y,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int halfwidth = (width + 1) >> 1;
|
||||||
|
int halfheight = (height + 1) >> 1;
|
||||||
if (!src_y || !src_u || !src_v ||
|
if (!src_y || !src_u || !src_v ||
|
||||||
!dst_y || !dst_u || !dst_v ||
|
!dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
@ -75,7 +77,7 @@ int I420Copy(const uint8* src_y, int src_stride_y,
|
|||||||
// Negative height means invert the image.
|
// Negative height means invert the image.
|
||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
height = -height;
|
height = -height;
|
||||||
const int halfheight = (height + 1) >> 1;
|
halfheight = (height + 1) >> 1;
|
||||||
src_y = src_y + (height - 1) * src_stride_y;
|
src_y = src_y + (height - 1) * src_stride_y;
|
||||||
src_u = src_u + (halfheight - 1) * src_stride_u;
|
src_u = src_u + (halfheight - 1) * src_stride_u;
|
||||||
src_v = src_v + (halfheight - 1) * src_stride_v;
|
src_v = src_v + (halfheight - 1) * src_stride_v;
|
||||||
@ -88,8 +90,6 @@ int I420Copy(const uint8* src_y, int src_stride_y,
|
|||||||
CopyPlane(src_y, src_stride_y, dst_y, dst_stride_y, width, height);
|
CopyPlane(src_y, src_stride_y, dst_y, dst_stride_y, width, height);
|
||||||
}
|
}
|
||||||
// Copy UV planes.
|
// Copy UV planes.
|
||||||
const int halfwidth = (width + 1) >> 1;
|
|
||||||
const int halfheight = (height + 1) >> 1;
|
|
||||||
CopyPlane(src_u, src_stride_u, dst_u, dst_stride_u, halfwidth, halfheight);
|
CopyPlane(src_u, src_stride_u, dst_u, dst_stride_u, halfwidth, halfheight);
|
||||||
CopyPlane(src_v, src_stride_v, dst_v, dst_stride_v, halfwidth, halfheight);
|
CopyPlane(src_v, src_stride_v, dst_v, dst_stride_v, halfwidth, halfheight);
|
||||||
return 0;
|
return 0;
|
||||||
@ -164,6 +164,8 @@ int I400ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int halfwidth = (width + 1) >> 1;
|
||||||
|
int halfheight = (height + 1) >> 1;
|
||||||
if (!src_y || !dst_y || !dst_u || !dst_v ||
|
if (!src_y || !dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -171,11 +173,10 @@ int I400ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
// Negative height means invert the image.
|
// Negative height means invert the image.
|
||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
height = -height;
|
height = -height;
|
||||||
|
halfheight = (height + 1) >> 1;
|
||||||
src_y = src_y + (height - 1) * src_stride_y;
|
src_y = src_y + (height - 1) * src_stride_y;
|
||||||
src_stride_y = -src_stride_y;
|
src_stride_y = -src_stride_y;
|
||||||
}
|
}
|
||||||
int halfwidth = (width + 1) >> 1;
|
|
||||||
int halfheight = (height + 1) >> 1;
|
|
||||||
CopyPlane(src_y, src_stride_y, dst_y, dst_stride_y, width, height);
|
CopyPlane(src_y, src_stride_y, dst_y, dst_stride_y, width, height);
|
||||||
SetPlane(dst_u, dst_stride_u, halfwidth, halfheight, 128);
|
SetPlane(dst_u, dst_stride_u, halfwidth, halfheight, 128);
|
||||||
SetPlane(dst_v, dst_stride_v, halfwidth, halfheight, 128);
|
SetPlane(dst_v, dst_stride_v, halfwidth, halfheight, 128);
|
||||||
@ -185,6 +186,7 @@ int I400ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
static void CopyPlane2(const uint8* src, int src_stride_0, int src_stride_1,
|
static void CopyPlane2(const uint8* src, int src_stride_0, int src_stride_1,
|
||||||
uint8* dst, int dst_stride,
|
uint8* dst, int dst_stride,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
void (*CopyRow)(const uint8* src, uint8* dst, int width) = CopyRow_C;
|
void (*CopyRow)(const uint8* src, uint8* dst, int width) = CopyRow_C;
|
||||||
#if defined(HAS_COPYROW_X86)
|
#if defined(HAS_COPYROW_X86)
|
||||||
if (TestCpuFlag(kCpuHasX86) && IS_ALIGNED(width, 4)) {
|
if (TestCpuFlag(kCpuHasX86) && IS_ALIGNED(width, 4)) {
|
||||||
@ -216,7 +218,7 @@ static void CopyPlane2(const uint8* src, int src_stride_0, int src_stride_1,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Copy plane
|
// Copy plane
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
CopyRow(src, dst, width);
|
CopyRow(src, dst, width);
|
||||||
CopyRow(src + src_stride_0, dst + dst_stride, width);
|
CopyRow(src + src_stride_0, dst + dst_stride, width);
|
||||||
src += src_stride_0 + src_stride_1;
|
src += src_stride_0 + src_stride_1;
|
||||||
@ -243,6 +245,11 @@ static int X420ToI420(const uint8* src_y,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
int halfwidth = (width + 1) >> 1;
|
||||||
|
int halfheight = (height + 1) >> 1;
|
||||||
|
void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix) =
|
||||||
|
SplitUVRow_C;
|
||||||
if (!src_y || !src_uv ||
|
if (!src_y || !src_uv ||
|
||||||
!dst_y || !dst_u || !dst_v ||
|
!dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
@ -251,7 +258,7 @@ static int X420ToI420(const uint8* src_y,
|
|||||||
// Negative height means invert the image.
|
// Negative height means invert the image.
|
||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
height = -height;
|
height = -height;
|
||||||
int halfheight = (height + 1) >> 1;
|
halfheight = (height + 1) >> 1;
|
||||||
dst_y = dst_y + (height - 1) * dst_stride_y;
|
dst_y = dst_y + (height - 1) * dst_stride_y;
|
||||||
dst_u = dst_u + (halfheight - 1) * dst_stride_u;
|
dst_u = dst_u + (halfheight - 1) * dst_stride_u;
|
||||||
dst_v = dst_v + (halfheight - 1) * dst_stride_v;
|
dst_v = dst_v + (halfheight - 1) * dst_stride_v;
|
||||||
@ -260,8 +267,6 @@ static int X420ToI420(const uint8* src_y,
|
|||||||
dst_stride_v = -dst_stride_v;
|
dst_stride_v = -dst_stride_v;
|
||||||
}
|
}
|
||||||
// Coalesce rows.
|
// Coalesce rows.
|
||||||
int halfwidth = (width + 1) >> 1;
|
|
||||||
int halfheight = (height + 1) >> 1;
|
|
||||||
if (src_stride_y0 == width &&
|
if (src_stride_y0 == width &&
|
||||||
src_stride_y1 == width &&
|
src_stride_y1 == width &&
|
||||||
dst_stride_y == width) {
|
dst_stride_y == width) {
|
||||||
@ -277,8 +282,6 @@ static int X420ToI420(const uint8* src_y,
|
|||||||
halfheight = 1;
|
halfheight = 1;
|
||||||
src_stride_uv = dst_stride_u = dst_stride_v = 0;
|
src_stride_uv = dst_stride_u = dst_stride_v = 0;
|
||||||
}
|
}
|
||||||
void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix) =
|
|
||||||
SplitUVRow_C;
|
|
||||||
#if defined(HAS_SPLITUVROW_SSE2)
|
#if defined(HAS_SPLITUVROW_SSE2)
|
||||||
if (TestCpuFlag(kCpuHasSSE2) && halfwidth >= 16) {
|
if (TestCpuFlag(kCpuHasSSE2) && halfwidth >= 16) {
|
||||||
SplitUVRow = SplitUVRow_Any_SSE2;
|
SplitUVRow = SplitUVRow_Any_SSE2;
|
||||||
@ -331,7 +334,7 @@ static int X420ToI420(const uint8* src_y,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int y = 0; y < halfheight; ++y) {
|
for (y = 0; y < halfheight; ++y) {
|
||||||
// Copy a row of UV.
|
// Copy a row of UV.
|
||||||
SplitUVRow(src_uv, dst_u, dst_v, halfwidth);
|
SplitUVRow(src_uv, dst_u, dst_v, halfwidth);
|
||||||
dst_u += dst_stride_u;
|
dst_u += dst_stride_u;
|
||||||
@ -397,6 +400,13 @@ int Q420ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
int halfheight = (height + 1) >> 1;
|
||||||
|
void (*CopyRow)(const uint8* src, uint8* dst, int width) = CopyRow_C;
|
||||||
|
void (*YUY2ToUV422Row)(const uint8* src_yuy2, uint8* dst_u, uint8* dst_v,
|
||||||
|
int pix) = YUY2ToUV422Row_C;
|
||||||
|
void (*YUY2ToYRow)(const uint8* src_yuy2, uint8* dst_y, int pix) =
|
||||||
|
YUY2ToYRow_C;
|
||||||
if (!src_y || !src_yuy2 ||
|
if (!src_y || !src_yuy2 ||
|
||||||
!dst_y || !dst_u || !dst_v ||
|
!dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
@ -405,7 +415,7 @@ int Q420ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
// Negative height means invert the image.
|
// Negative height means invert the image.
|
||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
height = -height;
|
height = -height;
|
||||||
int halfheight = (height + 1) >> 1;
|
halfheight = (height + 1) >> 1;
|
||||||
dst_y = dst_y + (height - 1) * dst_stride_y;
|
dst_y = dst_y + (height - 1) * dst_stride_y;
|
||||||
dst_u = dst_u + (halfheight - 1) * dst_stride_u;
|
dst_u = dst_u + (halfheight - 1) * dst_stride_u;
|
||||||
dst_v = dst_v + (halfheight - 1) * dst_stride_v;
|
dst_v = dst_v + (halfheight - 1) * dst_stride_v;
|
||||||
@ -414,7 +424,6 @@ int Q420ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
dst_stride_v = -dst_stride_v;
|
dst_stride_v = -dst_stride_v;
|
||||||
}
|
}
|
||||||
// CopyRow for rows of just Y in Q420 copied to Y plane of I420.
|
// CopyRow for rows of just Y in Q420 copied to Y plane of I420.
|
||||||
void (*CopyRow)(const uint8* src, uint8* dst, int width) = CopyRow_C;
|
|
||||||
#if defined(HAS_COPYROW_NEON)
|
#if defined(HAS_COPYROW_NEON)
|
||||||
if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(width, 32)) {
|
if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(width, 32)) {
|
||||||
CopyRow = CopyRow_NEON;
|
CopyRow = CopyRow_NEON;
|
||||||
@ -443,10 +452,6 @@ int Q420ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void (*YUY2ToUV422Row)(const uint8* src_yuy2, uint8* dst_u, uint8* dst_v,
|
|
||||||
int pix) = YUY2ToUV422Row_C;
|
|
||||||
void (*YUY2ToYRow)(const uint8* src_yuy2, uint8* dst_y, int pix) =
|
|
||||||
YUY2ToYRow_C;
|
|
||||||
#if defined(HAS_YUY2TOYROW_SSE2)
|
#if defined(HAS_YUY2TOYROW_SSE2)
|
||||||
if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
||||||
YUY2ToUV422Row = YUY2ToUV422Row_Any_SSE2;
|
YUY2ToUV422Row = YUY2ToUV422Row_Any_SSE2;
|
||||||
@ -486,7 +491,7 @@ int Q420ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
CopyRow(src_y, dst_y, width);
|
CopyRow(src_y, dst_y, width);
|
||||||
src_y += src_stride_y;
|
src_y += src_stride_y;
|
||||||
dst_y += dst_stride_y;
|
dst_y += dst_stride_y;
|
||||||
@ -512,18 +517,17 @@ int YUY2ToI420(const uint8* src_yuy2, int src_stride_yuy2,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
void (*YUY2ToUVRow)(const uint8* src_yuy2, int src_stride_yuy2,
|
||||||
|
uint8* dst_u, uint8* dst_v, int pix) = YUY2ToUVRow_C;
|
||||||
|
void (*YUY2ToYRow)(const uint8* src_yuy2,
|
||||||
|
uint8* dst_y, int pix) = YUY2ToYRow_C;
|
||||||
// Negative height means invert the image.
|
// Negative height means invert the image.
|
||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
height = -height;
|
height = -height;
|
||||||
src_yuy2 = src_yuy2 + (height - 1) * src_stride_yuy2;
|
src_yuy2 = src_yuy2 + (height - 1) * src_stride_yuy2;
|
||||||
src_stride_yuy2 = -src_stride_yuy2;
|
src_stride_yuy2 = -src_stride_yuy2;
|
||||||
}
|
}
|
||||||
void (*YUY2ToUVRow)(const uint8* src_yuy2, int src_stride_yuy2,
|
|
||||||
uint8* dst_u, uint8* dst_v, int pix);
|
|
||||||
void (*YUY2ToYRow)(const uint8* src_yuy2,
|
|
||||||
uint8* dst_y, int pix);
|
|
||||||
YUY2ToYRow = YUY2ToYRow_C;
|
|
||||||
YUY2ToUVRow = YUY2ToUVRow_C;
|
|
||||||
#if defined(HAS_YUY2TOYROW_SSE2)
|
#if defined(HAS_YUY2TOYROW_SSE2)
|
||||||
if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
||||||
YUY2ToUVRow = YUY2ToUVRow_Any_SSE2;
|
YUY2ToUVRow = YUY2ToUVRow_Any_SSE2;
|
||||||
@ -563,7 +567,7 @@ int YUY2ToI420(const uint8* src_yuy2, int src_stride_yuy2,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
YUY2ToUVRow(src_yuy2, src_stride_yuy2, dst_u, dst_v, width);
|
YUY2ToUVRow(src_yuy2, src_stride_yuy2, dst_u, dst_v, width);
|
||||||
YUY2ToYRow(src_yuy2, dst_y, width);
|
YUY2ToYRow(src_yuy2, dst_y, width);
|
||||||
YUY2ToYRow(src_yuy2 + src_stride_yuy2, dst_y + dst_stride_y, width);
|
YUY2ToYRow(src_yuy2 + src_stride_yuy2, dst_y + dst_stride_y, width);
|
||||||
@ -586,18 +590,17 @@ int UYVYToI420(const uint8* src_uyvy, int src_stride_uyvy,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
void (*UYVYToUVRow)(const uint8* src_uyvy, int src_stride_uyvy,
|
||||||
|
uint8* dst_u, uint8* dst_v, int pix) = UYVYToUVRow_C;
|
||||||
|
void (*UYVYToYRow)(const uint8* src_uyvy,
|
||||||
|
uint8* dst_y, int pix) = UYVYToYRow_C;
|
||||||
// Negative height means invert the image.
|
// Negative height means invert the image.
|
||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
height = -height;
|
height = -height;
|
||||||
src_uyvy = src_uyvy + (height - 1) * src_stride_uyvy;
|
src_uyvy = src_uyvy + (height - 1) * src_stride_uyvy;
|
||||||
src_stride_uyvy = -src_stride_uyvy;
|
src_stride_uyvy = -src_stride_uyvy;
|
||||||
}
|
}
|
||||||
void (*UYVYToUVRow)(const uint8* src_uyvy, int src_stride_uyvy,
|
|
||||||
uint8* dst_u, uint8* dst_v, int pix);
|
|
||||||
void (*UYVYToYRow)(const uint8* src_uyvy,
|
|
||||||
uint8* dst_y, int pix);
|
|
||||||
UYVYToYRow = UYVYToYRow_C;
|
|
||||||
UYVYToUVRow = UYVYToUVRow_C;
|
|
||||||
#if defined(HAS_UYVYTOYROW_SSE2)
|
#if defined(HAS_UYVYTOYROW_SSE2)
|
||||||
if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
||||||
UYVYToUVRow = UYVYToUVRow_Any_SSE2;
|
UYVYToUVRow = UYVYToUVRow_Any_SSE2;
|
||||||
@ -637,7 +640,7 @@ int UYVYToI420(const uint8* src_uyvy, int src_stride_uyvy,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
UYVYToUVRow(src_uyvy, src_stride_uyvy, dst_u, dst_v, width);
|
UYVYToUVRow(src_uyvy, src_stride_uyvy, dst_u, dst_v, width);
|
||||||
UYVYToYRow(src_uyvy, dst_y, width);
|
UYVYToYRow(src_uyvy, dst_y, width);
|
||||||
UYVYToYRow(src_uyvy + src_stride_uyvy, dst_y + dst_stride_y, width);
|
UYVYToYRow(src_uyvy + src_stride_uyvy, dst_y + dst_stride_y, width);
|
||||||
@ -660,6 +663,11 @@ int ARGBToI420(const uint8* src_argb, int src_stride_argb,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
||||||
|
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
||||||
|
ARGBToYRow_C;
|
||||||
if (!src_argb ||
|
if (!src_argb ||
|
||||||
!dst_y || !dst_u || !dst_v ||
|
!dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
@ -671,10 +679,6 @@ int ARGBToI420(const uint8* src_argb, int src_stride_argb,
|
|||||||
src_argb = src_argb + (height - 1) * src_stride_argb;
|
src_argb = src_argb + (height - 1) * src_stride_argb;
|
||||||
src_stride_argb = -src_stride_argb;
|
src_stride_argb = -src_stride_argb;
|
||||||
}
|
}
|
||||||
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
|
||||||
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
|
||||||
ARGBToYRow_C;
|
|
||||||
#if defined(HAS_ARGBTOYROW_SSSE3) && defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOYROW_SSSE3) && defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
||||||
@ -716,7 +720,7 @@ int ARGBToI420(const uint8* src_argb, int src_stride_argb,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
ARGBToUVRow(src_argb, src_stride_argb, dst_u, dst_v, width);
|
ARGBToUVRow(src_argb, src_stride_argb, dst_u, dst_v, width);
|
||||||
ARGBToYRow(src_argb, dst_y, width);
|
ARGBToYRow(src_argb, dst_y, width);
|
||||||
ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width);
|
ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width);
|
||||||
@ -739,6 +743,11 @@ int BGRAToI420(const uint8* src_bgra, int src_stride_bgra,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
void (*BGRAToUVRow)(const uint8* src_bgra0, int src_stride_bgra,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = BGRAToUVRow_C;
|
||||||
|
void (*BGRAToYRow)(const uint8* src_bgra, uint8* dst_y, int pix) =
|
||||||
|
BGRAToYRow_C;
|
||||||
if (!src_bgra ||
|
if (!src_bgra ||
|
||||||
!dst_y || !dst_u || !dst_v ||
|
!dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
@ -750,10 +759,6 @@ int BGRAToI420(const uint8* src_bgra, int src_stride_bgra,
|
|||||||
src_bgra = src_bgra + (height - 1) * src_stride_bgra;
|
src_bgra = src_bgra + (height - 1) * src_stride_bgra;
|
||||||
src_stride_bgra = -src_stride_bgra;
|
src_stride_bgra = -src_stride_bgra;
|
||||||
}
|
}
|
||||||
void (*BGRAToUVRow)(const uint8* src_bgra0, int src_stride_bgra,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = BGRAToUVRow_C;
|
|
||||||
void (*BGRAToYRow)(const uint8* src_bgra, uint8* dst_y, int pix) =
|
|
||||||
BGRAToYRow_C;
|
|
||||||
#if defined(HAS_BGRATOYROW_SSSE3)
|
#if defined(HAS_BGRATOYROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
BGRAToUVRow = BGRAToUVRow_Any_SSSE3;
|
BGRAToUVRow = BGRAToUVRow_Any_SSSE3;
|
||||||
@ -784,7 +789,7 @@ int BGRAToI420(const uint8* src_bgra, int src_stride_bgra,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
BGRAToUVRow(src_bgra, src_stride_bgra, dst_u, dst_v, width);
|
BGRAToUVRow(src_bgra, src_stride_bgra, dst_u, dst_v, width);
|
||||||
BGRAToYRow(src_bgra, dst_y, width);
|
BGRAToYRow(src_bgra, dst_y, width);
|
||||||
BGRAToYRow(src_bgra + src_stride_bgra, dst_y + dst_stride_y, width);
|
BGRAToYRow(src_bgra + src_stride_bgra, dst_y + dst_stride_y, width);
|
||||||
@ -807,6 +812,11 @@ int ABGRToI420(const uint8* src_abgr, int src_stride_abgr,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
void (*ABGRToUVRow)(const uint8* src_abgr0, int src_stride_abgr,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ABGRToUVRow_C;
|
||||||
|
void (*ABGRToYRow)(const uint8* src_abgr, uint8* dst_y, int pix) =
|
||||||
|
ABGRToYRow_C;
|
||||||
if (!src_abgr ||
|
if (!src_abgr ||
|
||||||
!dst_y || !dst_u || !dst_v ||
|
!dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
@ -818,10 +828,6 @@ int ABGRToI420(const uint8* src_abgr, int src_stride_abgr,
|
|||||||
src_abgr = src_abgr + (height - 1) * src_stride_abgr;
|
src_abgr = src_abgr + (height - 1) * src_stride_abgr;
|
||||||
src_stride_abgr = -src_stride_abgr;
|
src_stride_abgr = -src_stride_abgr;
|
||||||
}
|
}
|
||||||
void (*ABGRToUVRow)(const uint8* src_abgr0, int src_stride_abgr,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ABGRToUVRow_C;
|
|
||||||
void (*ABGRToYRow)(const uint8* src_abgr, uint8* dst_y, int pix) =
|
|
||||||
ABGRToYRow_C;
|
|
||||||
#if defined(HAS_ABGRTOYROW_SSSE3)
|
#if defined(HAS_ABGRTOYROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ABGRToUVRow = ABGRToUVRow_Any_SSSE3;
|
ABGRToUVRow = ABGRToUVRow_Any_SSSE3;
|
||||||
@ -852,7 +858,7 @@ int ABGRToI420(const uint8* src_abgr, int src_stride_abgr,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
ABGRToUVRow(src_abgr, src_stride_abgr, dst_u, dst_v, width);
|
ABGRToUVRow(src_abgr, src_stride_abgr, dst_u, dst_v, width);
|
||||||
ABGRToYRow(src_abgr, dst_y, width);
|
ABGRToYRow(src_abgr, dst_y, width);
|
||||||
ABGRToYRow(src_abgr + src_stride_abgr, dst_y + dst_stride_y, width);
|
ABGRToYRow(src_abgr + src_stride_abgr, dst_y + dst_stride_y, width);
|
||||||
@ -875,6 +881,11 @@ int RGBAToI420(const uint8* src_rgba, int src_stride_rgba,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
void (*RGBAToUVRow)(const uint8* src_rgba0, int src_stride_rgba,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = RGBAToUVRow_C;
|
||||||
|
void (*RGBAToYRow)(const uint8* src_rgba, uint8* dst_y, int pix) =
|
||||||
|
RGBAToYRow_C;
|
||||||
if (!src_rgba ||
|
if (!src_rgba ||
|
||||||
!dst_y || !dst_u || !dst_v ||
|
!dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
@ -886,10 +897,6 @@ int RGBAToI420(const uint8* src_rgba, int src_stride_rgba,
|
|||||||
src_rgba = src_rgba + (height - 1) * src_stride_rgba;
|
src_rgba = src_rgba + (height - 1) * src_stride_rgba;
|
||||||
src_stride_rgba = -src_stride_rgba;
|
src_stride_rgba = -src_stride_rgba;
|
||||||
}
|
}
|
||||||
void (*RGBAToUVRow)(const uint8* src_rgba0, int src_stride_rgba,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = RGBAToUVRow_C;
|
|
||||||
void (*RGBAToYRow)(const uint8* src_rgba, uint8* dst_y, int pix) =
|
|
||||||
RGBAToYRow_C;
|
|
||||||
#if defined(HAS_RGBATOYROW_SSSE3)
|
#if defined(HAS_RGBATOYROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
RGBAToUVRow = RGBAToUVRow_Any_SSSE3;
|
RGBAToUVRow = RGBAToUVRow_Any_SSSE3;
|
||||||
@ -920,7 +927,7 @@ int RGBAToI420(const uint8* src_rgba, int src_stride_rgba,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
RGBAToUVRow(src_rgba, src_stride_rgba, dst_u, dst_v, width);
|
RGBAToUVRow(src_rgba, src_stride_rgba, dst_u, dst_v, width);
|
||||||
RGBAToYRow(src_rgba, dst_y, width);
|
RGBAToYRow(src_rgba, dst_y, width);
|
||||||
RGBAToYRow(src_rgba + src_stride_rgba, dst_y + dst_stride_y, width);
|
RGBAToYRow(src_rgba + src_stride_rgba, dst_y + dst_stride_y, width);
|
||||||
@ -943,6 +950,23 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
#if defined(HAS_RGB24TOYROW_NEON)
|
||||||
|
void (*RGB24ToUVRow)(const uint8* src_rgb24, int src_stride_rgb24,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = RGB24ToUVRow_C;
|
||||||
|
void (*RGB24ToYRow)(const uint8* src_rgb24, uint8* dst_y, int pix) =
|
||||||
|
RGB24ToYRow_C;
|
||||||
|
#else
|
||||||
|
void (*RGB24ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
||||||
|
RGB24ToARGBRow_C;
|
||||||
|
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
||||||
|
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
||||||
|
ARGBToYRow_C;
|
||||||
|
// Allocate 2 rows of ARGB.
|
||||||
|
const int kRowSize = (width * 4 + 15) & ~15;
|
||||||
|
align_buffer_64(row, kRowSize * 2);
|
||||||
|
#endif
|
||||||
if (!src_rgb24 || !dst_y || !dst_u || !dst_v ||
|
if (!src_rgb24 || !dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -955,10 +979,6 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAS_RGB24TOYROW_NEON)
|
#if defined(HAS_RGB24TOYROW_NEON)
|
||||||
void (*RGB24ToUVRow)(const uint8* src_rgb24, int src_stride_rgb24,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = RGB24ToUVRow_C;
|
|
||||||
void (*RGB24ToYRow)(const uint8* src_rgb24, uint8* dst_y, int pix) =
|
|
||||||
RGB24ToYRow_C;
|
|
||||||
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
||||||
RGB24ToYRow = RGB24ToYRow_Any_NEON;
|
RGB24ToYRow = RGB24ToYRow_Any_NEON;
|
||||||
if (IS_ALIGNED(width, 8)) {
|
if (IS_ALIGNED(width, 8)) {
|
||||||
@ -973,12 +993,6 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
|||||||
}
|
}
|
||||||
#else // HAS_RGB24TOYROW_NEON
|
#else // HAS_RGB24TOYROW_NEON
|
||||||
|
|
||||||
// Allocate 2 rows of ARGB.
|
|
||||||
const int kRowSize = (width * 4 + 15) & ~15;
|
|
||||||
align_buffer_64(row, kRowSize * 2);
|
|
||||||
|
|
||||||
void (*RGB24ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
|
||||||
RGB24ToARGBRow_C;
|
|
||||||
#if defined(HAS_RGB24TOARGBROW_SSSE3)
|
#if defined(HAS_RGB24TOARGBROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
RGB24ToARGBRow = RGB24ToARGBRow_Any_SSSE3;
|
RGB24ToARGBRow = RGB24ToARGBRow_Any_SSSE3;
|
||||||
@ -987,8 +1001,6 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
||||||
@ -997,8 +1009,6 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
|
||||||
ARGBToYRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
||||||
@ -1012,7 +1022,7 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
|||||||
#endif // HAS_ARGBTOUVROW_SSSE3
|
#endif // HAS_ARGBTOUVROW_SSSE3
|
||||||
#endif // HAS_RGB24TOYROW_NEON
|
#endif // HAS_RGB24TOYROW_NEON
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
#if defined(HAS_RGB24TOYROW_NEON)
|
#if defined(HAS_RGB24TOYROW_NEON)
|
||||||
RGB24ToUVRow(src_rgb24, src_stride_rgb24, dst_u, dst_v, width);
|
RGB24ToUVRow(src_rgb24, src_stride_rgb24, dst_u, dst_v, width);
|
||||||
RGB24ToYRow(src_rgb24, dst_y, width);
|
RGB24ToYRow(src_rgb24, dst_y, width);
|
||||||
@ -1052,6 +1062,23 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
|||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
#if defined(HAS_RAWTOYROW_NEON)
|
||||||
|
void (*RAWToUVRow)(const uint8* src_raw, int src_stride_raw,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = RAWToUVRow_C;
|
||||||
|
void (*RAWToYRow)(const uint8* src_raw, uint8* dst_y, int pix) =
|
||||||
|
RAWToYRow_C;
|
||||||
|
#else
|
||||||
|
void (*RAWToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
||||||
|
RAWToARGBRow_C;
|
||||||
|
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
||||||
|
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
||||||
|
ARGBToYRow_C;
|
||||||
|
// Allocate 2 rows of ARGB.
|
||||||
|
const int kRowSize = (width * 4 + 15) & ~15;
|
||||||
|
align_buffer_64(row, kRowSize * 2);
|
||||||
|
#endif
|
||||||
if (!src_raw || !dst_y || !dst_u || !dst_v ||
|
if (!src_raw || !dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1064,10 +1091,6 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAS_RAWTOYROW_NEON)
|
#if defined(HAS_RAWTOYROW_NEON)
|
||||||
void (*RAWToUVRow)(const uint8* src_raw, int src_stride_raw,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = RAWToUVRow_C;
|
|
||||||
void (*RAWToYRow)(const uint8* src_raw, uint8* dst_y, int pix) =
|
|
||||||
RAWToYRow_C;
|
|
||||||
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
||||||
RAWToYRow = RAWToYRow_Any_NEON;
|
RAWToYRow = RAWToYRow_Any_NEON;
|
||||||
if (IS_ALIGNED(width, 8)) {
|
if (IS_ALIGNED(width, 8)) {
|
||||||
@ -1082,12 +1105,6 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
|||||||
}
|
}
|
||||||
#else // HAS_RAWTOYROW_NEON
|
#else // HAS_RAWTOYROW_NEON
|
||||||
|
|
||||||
// Allocate 2 rows of ARGB.
|
|
||||||
const int kRowSize = (width * 4 + 15) & ~15;
|
|
||||||
align_buffer_64(row, kRowSize * 2);
|
|
||||||
|
|
||||||
void (*RAWToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
|
||||||
RAWToARGBRow_C;
|
|
||||||
#if defined(HAS_RAWTOARGBROW_SSSE3)
|
#if defined(HAS_RAWTOARGBROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
RAWToARGBRow = RAWToARGBRow_Any_SSSE3;
|
RAWToARGBRow = RAWToARGBRow_Any_SSSE3;
|
||||||
@ -1096,8 +1113,6 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
||||||
@ -1106,8 +1121,6 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
|
||||||
ARGBToYRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
||||||
@ -1121,7 +1134,7 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
|||||||
#endif // HAS_ARGBTOUVROW_SSSE3
|
#endif // HAS_ARGBTOUVROW_SSSE3
|
||||||
#endif // HAS_RAWTOYROW_NEON
|
#endif // HAS_RAWTOYROW_NEON
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
#if defined(HAS_RAWTOYROW_NEON)
|
#if defined(HAS_RAWTOYROW_NEON)
|
||||||
RAWToUVRow(src_raw, src_stride_raw, dst_u, dst_v, width);
|
RAWToUVRow(src_raw, src_stride_raw, dst_u, dst_v, width);
|
||||||
RAWToYRow(src_raw, dst_y, width);
|
RAWToYRow(src_raw, dst_y, width);
|
||||||
@ -1157,10 +1170,27 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
|||||||
// Convert RGB565 to I420.
|
// Convert RGB565 to I420.
|
||||||
LIBYUV_API
|
LIBYUV_API
|
||||||
int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
||||||
uint8* dst_y, int dst_stride_y,
|
uint8* dst_y, int dst_stride_y,
|
||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
#if defined(HAS_RGB565TOYROW_NEON)
|
||||||
|
void (*RGB565ToUVRow)(const uint8* src_rgb565, int src_stride_rgb565,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = RGB565ToUVRow_C;
|
||||||
|
void (*RGB565ToYRow)(const uint8* src_rgb565, uint8* dst_y, int pix) =
|
||||||
|
RGB565ToYRow_C;
|
||||||
|
#else
|
||||||
|
void (*RGB565ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
||||||
|
RGB565ToARGBRow_C;
|
||||||
|
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
||||||
|
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
||||||
|
ARGBToYRow_C;
|
||||||
|
// Allocate 2 rows of ARGB.
|
||||||
|
const int kRowSize = (width * 4 + 15) & ~15;
|
||||||
|
align_buffer_64(row, kRowSize * 2);
|
||||||
|
#endif
|
||||||
if (!src_rgb565 || !dst_y || !dst_u || !dst_v ||
|
if (!src_rgb565 || !dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1173,10 +1203,6 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAS_RGB565TOYROW_NEON)
|
#if defined(HAS_RGB565TOYROW_NEON)
|
||||||
void (*RGB565ToUVRow)(const uint8* src_rgb565, int src_stride_rgb565,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = RGB565ToUVRow_C;
|
|
||||||
void (*RGB565ToYRow)(const uint8* src_rgb565, uint8* dst_y, int pix) =
|
|
||||||
RGB565ToYRow_C;
|
|
||||||
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
||||||
RGB565ToYRow = RGB565ToYRow_Any_NEON;
|
RGB565ToYRow = RGB565ToYRow_Any_NEON;
|
||||||
if (IS_ALIGNED(width, 8)) {
|
if (IS_ALIGNED(width, 8)) {
|
||||||
@ -1191,12 +1217,6 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
|||||||
}
|
}
|
||||||
#else // HAS_RGB565TOYROW_NEON
|
#else // HAS_RGB565TOYROW_NEON
|
||||||
|
|
||||||
// Allocate 2 rows of ARGB.
|
|
||||||
const int kRowSize = (width * 4 + 15) & ~15;
|
|
||||||
align_buffer_64(row, kRowSize * 2);
|
|
||||||
|
|
||||||
void (*RGB565ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
|
||||||
RGB565ToARGBRow_C;
|
|
||||||
#if defined(HAS_RGB565TOARGBROW_SSE2)
|
#if defined(HAS_RGB565TOARGBROW_SSE2)
|
||||||
if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
||||||
RGB565ToARGBRow = RGB565ToARGBRow_Any_SSE2;
|
RGB565ToARGBRow = RGB565ToARGBRow_Any_SSE2;
|
||||||
@ -1205,8 +1225,6 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
||||||
@ -1215,8 +1233,6 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
|
||||||
ARGBToYRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
||||||
@ -1230,7 +1246,7 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
|||||||
#endif // HAS_ARGBTOUVROW_SSSE3
|
#endif // HAS_ARGBTOUVROW_SSSE3
|
||||||
#endif // HAS_RGB565TOYROW_NEON
|
#endif // HAS_RGB565TOYROW_NEON
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
#if defined(HAS_RGB565TOYROW_NEON)
|
#if defined(HAS_RGB565TOYROW_NEON)
|
||||||
RGB565ToUVRow(src_rgb565, src_stride_rgb565, dst_u, dst_v, width);
|
RGB565ToUVRow(src_rgb565, src_stride_rgb565, dst_u, dst_v, width);
|
||||||
RGB565ToYRow(src_rgb565, dst_y, width);
|
RGB565ToYRow(src_rgb565, dst_y, width);
|
||||||
@ -1266,10 +1282,27 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
|||||||
// Convert ARGB1555 to I420.
|
// Convert ARGB1555 to I420.
|
||||||
LIBYUV_API
|
LIBYUV_API
|
||||||
int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
||||||
uint8* dst_y, int dst_stride_y,
|
uint8* dst_y, int dst_stride_y,
|
||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
#if defined(HAS_ARGB1555TOYROW_NEON)
|
||||||
|
void (*ARGB1555ToUVRow)(const uint8* src_argb1555, int src_stride_argb1555,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGB1555ToUVRow_C;
|
||||||
|
void (*ARGB1555ToYRow)(const uint8* src_argb1555, uint8* dst_y, int pix) =
|
||||||
|
ARGB1555ToYRow_C;
|
||||||
|
#else
|
||||||
|
void (*ARGB1555ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
||||||
|
ARGB1555ToARGBRow_C;
|
||||||
|
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
||||||
|
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
||||||
|
ARGBToYRow_C;
|
||||||
|
// Allocate 2 rows of ARGB.
|
||||||
|
const int kRowSize = (width * 4 + 15) & ~15;
|
||||||
|
align_buffer_64(row, kRowSize * 2);
|
||||||
|
#endif
|
||||||
if (!src_argb1555 || !dst_y || !dst_u || !dst_v ||
|
if (!src_argb1555 || !dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1282,10 +1315,6 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAS_ARGB1555TOYROW_NEON)
|
#if defined(HAS_ARGB1555TOYROW_NEON)
|
||||||
void (*ARGB1555ToUVRow)(const uint8* src_argb1555, int src_stride_argb1555,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGB1555ToUVRow_C;
|
|
||||||
void (*ARGB1555ToYRow)(const uint8* src_argb1555, uint8* dst_y, int pix) =
|
|
||||||
ARGB1555ToYRow_C;
|
|
||||||
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
||||||
ARGB1555ToYRow = ARGB1555ToYRow_Any_NEON;
|
ARGB1555ToYRow = ARGB1555ToYRow_Any_NEON;
|
||||||
if (IS_ALIGNED(width, 8)) {
|
if (IS_ALIGNED(width, 8)) {
|
||||||
@ -1300,12 +1329,6 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
|||||||
}
|
}
|
||||||
#else // HAS_ARGB1555TOYROW_NEON
|
#else // HAS_ARGB1555TOYROW_NEON
|
||||||
|
|
||||||
// Allocate 2 rows of ARGB.
|
|
||||||
const int kRowSize = (width * 4 + 15) & ~15;
|
|
||||||
align_buffer_64(row, kRowSize * 2);
|
|
||||||
|
|
||||||
void (*ARGB1555ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
|
||||||
ARGB1555ToARGBRow_C;
|
|
||||||
#if defined(HAS_ARGB1555TOARGBROW_SSE2)
|
#if defined(HAS_ARGB1555TOARGBROW_SSE2)
|
||||||
if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
||||||
ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_SSE2;
|
ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_SSE2;
|
||||||
@ -1314,8 +1337,6 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
||||||
@ -1324,8 +1345,6 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
|
||||||
ARGBToYRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
||||||
@ -1339,7 +1358,7 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
|||||||
#endif // HAS_ARGBTOUVROW_SSSE3
|
#endif // HAS_ARGBTOUVROW_SSSE3
|
||||||
#endif // HAS_ARGB1555TOYROW_NEON
|
#endif // HAS_ARGB1555TOYROW_NEON
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
#if defined(HAS_ARGB1555TOYROW_NEON)
|
#if defined(HAS_ARGB1555TOYROW_NEON)
|
||||||
ARGB1555ToUVRow(src_argb1555, src_stride_argb1555, dst_u, dst_v, width);
|
ARGB1555ToUVRow(src_argb1555, src_stride_argb1555, dst_u, dst_v, width);
|
||||||
ARGB1555ToYRow(src_argb1555, dst_y, width);
|
ARGB1555ToYRow(src_argb1555, dst_y, width);
|
||||||
@ -1377,10 +1396,27 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
|||||||
// Convert ARGB4444 to I420.
|
// Convert ARGB4444 to I420.
|
||||||
LIBYUV_API
|
LIBYUV_API
|
||||||
int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
||||||
uint8* dst_y, int dst_stride_y,
|
uint8* dst_y, int dst_stride_y,
|
||||||
uint8* dst_u, int dst_stride_u,
|
uint8* dst_u, int dst_stride_u,
|
||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
|
int y;
|
||||||
|
#if defined(HAS_ARGB4444TOYROW_NEON)
|
||||||
|
void (*ARGB4444ToUVRow)(const uint8* src_argb4444, int src_stride_argb4444,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGB4444ToUVRow_C;
|
||||||
|
void (*ARGB4444ToYRow)(const uint8* src_argb4444, uint8* dst_y, int pix) =
|
||||||
|
ARGB4444ToYRow_C;
|
||||||
|
#else
|
||||||
|
void (*ARGB4444ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
||||||
|
ARGB4444ToARGBRow_C;
|
||||||
|
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
||||||
|
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
||||||
|
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
||||||
|
ARGBToYRow_C;
|
||||||
|
// Allocate 2 rows of ARGB.
|
||||||
|
const int kRowSize = (width * 4 + 15) & ~15;
|
||||||
|
align_buffer_64(row, kRowSize * 2);
|
||||||
|
#endif
|
||||||
if (!src_argb4444 || !dst_y || !dst_u || !dst_v ||
|
if (!src_argb4444 || !dst_y || !dst_u || !dst_v ||
|
||||||
width <= 0 || height == 0) {
|
width <= 0 || height == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1393,10 +1429,6 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAS_ARGB4444TOYROW_NEON)
|
#if defined(HAS_ARGB4444TOYROW_NEON)
|
||||||
void (*ARGB4444ToUVRow)(const uint8* src_argb4444, int src_stride_argb4444,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGB4444ToUVRow_C;
|
|
||||||
void (*ARGB4444ToYRow)(const uint8* src_argb4444, uint8* dst_y, int pix) =
|
|
||||||
ARGB4444ToYRow_C;
|
|
||||||
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
||||||
ARGB4444ToYRow = ARGB4444ToYRow_Any_NEON;
|
ARGB4444ToYRow = ARGB4444ToYRow_Any_NEON;
|
||||||
if (IS_ALIGNED(width, 8)) {
|
if (IS_ALIGNED(width, 8)) {
|
||||||
@ -1411,12 +1443,6 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
|||||||
}
|
}
|
||||||
#else // HAS_ARGB4444TOYROW_NEON
|
#else // HAS_ARGB4444TOYROW_NEON
|
||||||
|
|
||||||
// Allocate 2 rows of ARGB.
|
|
||||||
const int kRowSize = (width * 4 + 15) & ~15;
|
|
||||||
align_buffer_64(row, kRowSize * 2);
|
|
||||||
|
|
||||||
void (*ARGB4444ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int pix) =
|
|
||||||
ARGB4444ToARGBRow_C;
|
|
||||||
#if defined(HAS_ARGB4444TOARGBROW_SSE2)
|
#if defined(HAS_ARGB4444TOARGBROW_SSE2)
|
||||||
if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
||||||
ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_SSE2;
|
ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_SSE2;
|
||||||
@ -1425,8 +1451,6 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
|
||||||
uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
||||||
@ -1435,8 +1459,6 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int pix) =
|
|
||||||
ARGBToYRow_C;
|
|
||||||
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
#if defined(HAS_ARGBTOUVROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
||||||
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
||||||
@ -1450,7 +1472,7 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
|||||||
#endif // HAS_ARGBTOUVROW_SSSE3
|
#endif // HAS_ARGBTOUVROW_SSSE3
|
||||||
#endif // HAS_ARGB4444TOYROW_NEON
|
#endif // HAS_ARGB4444TOYROW_NEON
|
||||||
|
|
||||||
for (int y = 0; y < height - 1; y += 2) {
|
for (y = 0; y < height - 1; y += 2) {
|
||||||
#if defined(HAS_ARGB4444TOYROW_NEON)
|
#if defined(HAS_ARGB4444TOYROW_NEON)
|
||||||
ARGB4444ToUVRow(src_argb4444, src_stride_argb4444, dst_u, dst_v, width);
|
ARGB4444ToUVRow(src_argb4444, src_stride_argb4444, dst_u, dst_v, width);
|
||||||
ARGB4444ToYRow(src_argb4444, dst_y, width);
|
ARGB4444ToYRow(src_argb4444, dst_y, width);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user