Commit f96890a0 authored by Frank Barchard's avatar Frank Barchard

yuvconstants for all YUV to RGB conversion functions.

R=harryjin@google.com
BUG=libyuv:488

Review URL: https://codereview.chromium.org/1363503002 .
parent 62c49dc8
This diff is collapsed.
This diff is collapsed.
...@@ -462,6 +462,7 @@ int I420ToARGB(const uint8* src_y, int src_stride_y, ...@@ -462,6 +462,7 @@ int I420ToARGB(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToARGBRow_C; int width) = I422ToARGBRow_C;
if (!src_y || !src_u || !src_v || !dst_argb || if (!src_y || !src_u || !src_v || !dst_argb ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -508,7 +509,7 @@ int I420ToARGB(const uint8* src_y, int src_stride_y, ...@@ -508,7 +509,7 @@ int I420ToARGB(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToARGBRow(src_y, src_u, src_v, dst_argb, width); I422ToARGBRow(src_y, src_u, src_v, dst_argb, &kYuvConstants, width);
dst_argb += dst_stride_argb; dst_argb += dst_stride_argb;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -531,6 +532,7 @@ int I420ToBGRA(const uint8* src_y, int src_stride_y, ...@@ -531,6 +532,7 @@ int I420ToBGRA(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToBGRARow_C; int width) = I422ToBGRARow_C;
if (!src_y || !src_u || !src_v || !dst_bgra || if (!src_y || !src_u || !src_v || !dst_bgra ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -577,7 +579,7 @@ int I420ToBGRA(const uint8* src_y, int src_stride_y, ...@@ -577,7 +579,7 @@ int I420ToBGRA(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToBGRARow(src_y, src_u, src_v, dst_bgra, width); I422ToBGRARow(src_y, src_u, src_v, dst_bgra, &kYuvConstants, width);
dst_bgra += dst_stride_bgra; dst_bgra += dst_stride_bgra;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -600,6 +602,7 @@ int I420ToABGR(const uint8* src_y, int src_stride_y, ...@@ -600,6 +602,7 @@ int I420ToABGR(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToABGRRow_C; int width) = I422ToABGRRow_C;
if (!src_y || !src_u || !src_v || !dst_abgr || if (!src_y || !src_u || !src_v || !dst_abgr ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -637,7 +640,7 @@ int I420ToABGR(const uint8* src_y, int src_stride_y, ...@@ -637,7 +640,7 @@ int I420ToABGR(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToABGRRow(src_y, src_u, src_v, dst_abgr, width); I422ToABGRRow(src_y, src_u, src_v, dst_abgr, &kYuvConstants, width);
dst_abgr += dst_stride_abgr; dst_abgr += dst_stride_abgr;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -660,6 +663,7 @@ int I420ToRGBA(const uint8* src_y, int src_stride_y, ...@@ -660,6 +663,7 @@ int I420ToRGBA(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToRGBARow_C; int width) = I422ToRGBARow_C;
if (!src_y || !src_u || !src_v || !dst_rgba || if (!src_y || !src_u || !src_v || !dst_rgba ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -697,7 +701,7 @@ int I420ToRGBA(const uint8* src_y, int src_stride_y, ...@@ -697,7 +701,7 @@ int I420ToRGBA(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToRGBARow(src_y, src_u, src_v, dst_rgba, width); I422ToRGBARow(src_y, src_u, src_v, dst_rgba, &kYuvConstants, width);
dst_rgba += dst_stride_rgba; dst_rgba += dst_stride_rgba;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -720,6 +724,7 @@ int I420ToRGB24(const uint8* src_y, int src_stride_y, ...@@ -720,6 +724,7 @@ int I420ToRGB24(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToRGB24Row_C; int width) = I422ToRGB24Row_C;
if (!src_y || !src_u || !src_v || !dst_rgb24 || if (!src_y || !src_u || !src_v || !dst_rgb24 ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -757,7 +762,7 @@ int I420ToRGB24(const uint8* src_y, int src_stride_y, ...@@ -757,7 +762,7 @@ int I420ToRGB24(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToRGB24Row(src_y, src_u, src_v, dst_rgb24, width); I422ToRGB24Row(src_y, src_u, src_v, dst_rgb24, &kYuvConstants, width);
dst_rgb24 += dst_stride_rgb24; dst_rgb24 += dst_stride_rgb24;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -780,6 +785,7 @@ int I420ToRAW(const uint8* src_y, int src_stride_y, ...@@ -780,6 +785,7 @@ int I420ToRAW(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToRAWRow_C; int width) = I422ToRAWRow_C;
if (!src_y || !src_u || !src_v || !dst_raw || if (!src_y || !src_u || !src_v || !dst_raw ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -817,7 +823,7 @@ int I420ToRAW(const uint8* src_y, int src_stride_y, ...@@ -817,7 +823,7 @@ int I420ToRAW(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToRAWRow(src_y, src_u, src_v, dst_raw, width); I422ToRAWRow(src_y, src_u, src_v, dst_raw, &kYuvConstants, width);
dst_raw += dst_stride_raw; dst_raw += dst_stride_raw;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -840,6 +846,7 @@ int I420ToARGB1555(const uint8* src_y, int src_stride_y, ...@@ -840,6 +846,7 @@ int I420ToARGB1555(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToARGB1555Row_C; int width) = I422ToARGB1555Row_C;
if (!src_y || !src_u || !src_v || !dst_argb1555 || if (!src_y || !src_u || !src_v || !dst_argb1555 ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -877,7 +884,7 @@ int I420ToARGB1555(const uint8* src_y, int src_stride_y, ...@@ -877,7 +884,7 @@ int I420ToARGB1555(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToARGB1555Row(src_y, src_u, src_v, dst_argb1555, width); I422ToARGB1555Row(src_y, src_u, src_v, dst_argb1555, &kYuvConstants, width);
dst_argb1555 += dst_stride_argb1555; dst_argb1555 += dst_stride_argb1555;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -901,6 +908,7 @@ int I420ToARGB4444(const uint8* src_y, int src_stride_y, ...@@ -901,6 +908,7 @@ int I420ToARGB4444(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToARGB4444Row_C; int width) = I422ToARGB4444Row_C;
if (!src_y || !src_u || !src_v || !dst_argb4444 || if (!src_y || !src_u || !src_v || !dst_argb4444 ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -938,7 +946,7 @@ int I420ToARGB4444(const uint8* src_y, int src_stride_y, ...@@ -938,7 +946,7 @@ int I420ToARGB4444(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToARGB4444Row(src_y, src_u, src_v, dst_argb4444, width); I422ToARGB4444Row(src_y, src_u, src_v, dst_argb4444, &kYuvConstants, width);
dst_argb4444 += dst_stride_argb4444; dst_argb4444 += dst_stride_argb4444;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -961,6 +969,7 @@ int I420ToRGB565(const uint8* src_y, int src_stride_y, ...@@ -961,6 +969,7 @@ int I420ToRGB565(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToRGB565Row_C; int width) = I422ToRGB565Row_C;
if (!src_y || !src_u || !src_v || !dst_rgb565 || if (!src_y || !src_u || !src_v || !dst_rgb565 ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -998,7 +1007,7 @@ int I420ToRGB565(const uint8* src_y, int src_stride_y, ...@@ -998,7 +1007,7 @@ int I420ToRGB565(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToRGB565Row(src_y, src_u, src_v, dst_rgb565, width); I422ToRGB565Row(src_y, src_u, src_v, dst_rgb565, &kYuvConstants, width);
dst_rgb565 += dst_stride_rgb565; dst_rgb565 += dst_stride_rgb565;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -1029,6 +1038,7 @@ int I420ToRGB565Dither(const uint8* src_y, int src_stride_y, ...@@ -1029,6 +1038,7 @@ int I420ToRGB565Dither(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToARGBRow_C; int width) = I422ToARGBRow_C;
void (*ARGBToRGB565DitherRow)(const uint8* src_argb, uint8* dst_rgb, void (*ARGBToRGB565DitherRow)(const uint8* src_argb, uint8* dst_rgb,
const uint32 dither4, int pix) = ARGBToRGB565DitherRow_C; const uint32 dither4, int pix) = ARGBToRGB565DitherRow_C;
...@@ -1105,7 +1115,7 @@ int I420ToRGB565Dither(const uint8* src_y, int src_stride_y, ...@@ -1105,7 +1115,7 @@ int I420ToRGB565Dither(const uint8* src_y, int src_stride_y,
// Allocate a row of argb. // Allocate a row of argb.
align_buffer_64(row_argb, width * 4); align_buffer_64(row_argb, width * 4);
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToARGBRow(src_y, src_u, src_v, row_argb, width); I422ToARGBRow(src_y, src_u, src_v, row_argb, &kYuvConstants, width);
ARGBToRGB565DitherRow(row_argb, dst_rgb565, ARGBToRGB565DitherRow(row_argb, dst_rgb565,
*(uint32*)(dither4x4 + ((y & 3) << 2)), width); *(uint32*)(dither4x4 + ((y & 3) << 2)), width);
dst_rgb565 += dst_stride_rgb565; dst_rgb565 += dst_stride_rgb565;
......
...@@ -287,9 +287,9 @@ int YUY2ToI422(const uint8* src_yuy2, int src_stride_yuy2, ...@@ -287,9 +287,9 @@ int YUY2ToI422(const uint8* src_yuy2, int src_stride_yuy2,
int width, int height) { int width, int height) {
int y; int y;
void (*YUY2ToUV422Row)(const uint8* src_yuy2, void (*YUY2ToUV422Row)(const uint8* src_yuy2,
uint8* dst_u, uint8* dst_v, int pix) = uint8* dst_u, uint8* dst_v, int width) =
YUY2ToUV422Row_C; YUY2ToUV422Row_C;
void (*YUY2ToYRow)(const uint8* src_yuy2, uint8* dst_y, int pix) = void (*YUY2ToYRow)(const uint8* src_yuy2, uint8* dst_y, int width) =
YUY2ToYRow_C; YUY2ToYRow_C;
// Negative height means invert the image. // Negative height means invert the image.
if (height < 0) { if (height < 0) {
...@@ -359,10 +359,10 @@ int UYVYToI422(const uint8* src_uyvy, int src_stride_uyvy, ...@@ -359,10 +359,10 @@ int UYVYToI422(const uint8* src_uyvy, int src_stride_uyvy,
int width, int height) { int width, int height) {
int y; int y;
void (*UYVYToUV422Row)(const uint8* src_uyvy, void (*UYVYToUV422Row)(const uint8* src_uyvy,
uint8* dst_u, uint8* dst_v, int pix) = uint8* dst_u, uint8* dst_v, int width) =
UYVYToUV422Row_C; UYVYToUV422Row_C;
void (*UYVYToYRow)(const uint8* src_uyvy, void (*UYVYToYRow)(const uint8* src_uyvy,
uint8* dst_y, int pix) = UYVYToYRow_C; uint8* dst_y, int width) = UYVYToYRow_C;
// Negative height means invert the image. // Negative height means invert the image.
if (height < 0) { if (height < 0) {
height = -height; height = -height;
...@@ -790,6 +790,7 @@ int I422ToBGRA(const uint8* src_y, int src_stride_y, ...@@ -790,6 +790,7 @@ int I422ToBGRA(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToBGRARow_C; int width) = I422ToBGRARow_C;
if (!src_y || !src_u || !src_v || if (!src_y || !src_u || !src_v ||
!dst_bgra || !dst_bgra ||
...@@ -846,7 +847,7 @@ int I422ToBGRA(const uint8* src_y, int src_stride_y, ...@@ -846,7 +847,7 @@ int I422ToBGRA(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToBGRARow(src_y, src_u, src_v, dst_bgra, width); I422ToBGRARow(src_y, src_u, src_v, dst_bgra, &kYuvConstants, width);
dst_bgra += dst_stride_bgra; dst_bgra += dst_stride_bgra;
src_y += src_stride_y; src_y += src_stride_y;
src_u += src_stride_u; src_u += src_stride_u;
...@@ -867,6 +868,7 @@ int I422ToABGR(const uint8* src_y, int src_stride_y, ...@@ -867,6 +868,7 @@ int I422ToABGR(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToABGRRow_C; int width) = I422ToABGRRow_C;
if (!src_y || !src_u || !src_v || if (!src_y || !src_u || !src_v ||
!dst_abgr || !dst_abgr ||
...@@ -914,7 +916,7 @@ int I422ToABGR(const uint8* src_y, int src_stride_y, ...@@ -914,7 +916,7 @@ int I422ToABGR(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToABGRRow(src_y, src_u, src_v, dst_abgr, width); I422ToABGRRow(src_y, src_u, src_v, dst_abgr, &kYuvConstants, width);
dst_abgr += dst_stride_abgr; dst_abgr += dst_stride_abgr;
src_y += src_stride_y; src_y += src_stride_y;
src_u += src_stride_u; src_u += src_stride_u;
...@@ -935,6 +937,7 @@ int I422ToRGBA(const uint8* src_y, int src_stride_y, ...@@ -935,6 +937,7 @@ int I422ToRGBA(const uint8* src_y, int src_stride_y,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = I422ToRGBARow_C; int width) = I422ToRGBARow_C;
if (!src_y || !src_u || !src_v || if (!src_y || !src_u || !src_v ||
!dst_rgba || !dst_rgba ||
...@@ -982,7 +985,7 @@ int I422ToRGBA(const uint8* src_y, int src_stride_y, ...@@ -982,7 +985,7 @@ int I422ToRGBA(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
I422ToRGBARow(src_y, src_u, src_v, dst_rgba, width); I422ToRGBARow(src_y, src_u, src_v, dst_rgba, &kYuvConstants, width);
dst_rgba += dst_stride_rgba; dst_rgba += dst_stride_rgba;
src_y += src_stride_y; src_y += src_stride_y;
src_u += src_stride_u; src_u += src_stride_u;
...@@ -1001,6 +1004,7 @@ int NV12ToRGB565(const uint8* src_y, int src_stride_y, ...@@ -1001,6 +1004,7 @@ int NV12ToRGB565(const uint8* src_y, int src_stride_y,
void (*NV12ToRGB565Row)(const uint8* y_buf, void (*NV12ToRGB565Row)(const uint8* y_buf,
const uint8* uv_buf, const uint8* uv_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) = NV12ToRGB565Row_C; int width) = NV12ToRGB565Row_C;
if (!src_y || !src_uv || !dst_rgb565 || if (!src_y || !src_uv || !dst_rgb565 ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
...@@ -1038,7 +1042,7 @@ int NV12ToRGB565(const uint8* src_y, int src_stride_y, ...@@ -1038,7 +1042,7 @@ int NV12ToRGB565(const uint8* src_y, int src_stride_y,
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
NV12ToRGB565Row(src_y, src_uv, dst_rgb565, width); NV12ToRGB565Row(src_y, src_uv, dst_rgb565, &kYuvConstants, width);
dst_rgb565 += dst_stride_rgb565; dst_rgb565 += dst_stride_rgb565;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -1055,10 +1059,11 @@ int NV21ToRGB565(const uint8* src_y, int src_stride_y, ...@@ -1055,10 +1059,11 @@ int NV21ToRGB565(const uint8* src_y, int src_stride_y,
uint8* dst_rgb565, int dst_stride_rgb565, uint8* dst_rgb565, int dst_stride_rgb565,
int width, int height) { int width, int height) {
int y; int y;
void (*NV21ToRGB565Row)(const uint8* y_buf, void (*NV12ToRGB565Row)(const uint8* y_buf,
const uint8* src_vu, const uint8* src_vu,
uint8* rgb_buf, uint8* rgb_buf,
int width) = NV21ToRGB565Row_C; struct YuvConstants* yuvconstants,
int width) = NV12ToRGB565Row_C;
if (!src_y || !src_vu || !dst_rgb565 || if (!src_y || !src_vu || !dst_rgb565 ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
return -1; return -1;
...@@ -1069,33 +1074,33 @@ int NV21ToRGB565(const uint8* src_y, int src_stride_y, ...@@ -1069,33 +1074,33 @@ int NV21ToRGB565(const uint8* src_y, int src_stride_y,
dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565; dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565;
dst_stride_rgb565 = -dst_stride_rgb565; dst_stride_rgb565 = -dst_stride_rgb565;
} }
#if defined(HAS_NV21TORGB565ROW_SSSE3) #if defined(HAS_NV12TORGB565ROW_SSSE3)
if (TestCpuFlag(kCpuHasSSSE3)) { if (TestCpuFlag(kCpuHasSSSE3)) {
NV21ToRGB565Row = NV21ToRGB565Row_Any_SSSE3; NV12ToRGB565Row = NV12ToRGB565Row_Any_SSSE3;
if (IS_ALIGNED(width, 8)) { if (IS_ALIGNED(width, 8)) {
NV21ToRGB565Row = NV21ToRGB565Row_SSSE3; NV12ToRGB565Row = NV12ToRGB565Row_SSSE3;
} }
} }
#endif #endif
#if defined(HAS_NV21TORGB565ROW_AVX2) #if defined(HAS_NV12TORGB565ROW_AVX2)
if (TestCpuFlag(kCpuHasAVX2)) { if (TestCpuFlag(kCpuHasAVX2)) {
NV21ToRGB565Row = NV21ToRGB565Row_Any_AVX2; NV12ToRGB565Row = NV12ToRGB565Row_Any_AVX2;
if (IS_ALIGNED(width, 16)) { if (IS_ALIGNED(width, 16)) {
NV21ToRGB565Row = NV21ToRGB565Row_AVX2; NV12ToRGB565Row = NV12ToRGB565Row_AVX2;
} }
} }
#endif #endif
#if defined(HAS_NV21TORGB565ROW_NEON) #if defined(HAS_NV12TORGB565ROW_NEON)
if (TestCpuFlag(kCpuHasNEON)) { if (TestCpuFlag(kCpuHasNEON)) {
NV21ToRGB565Row = NV21ToRGB565Row_Any_NEON; NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON;
if (IS_ALIGNED(width, 8)) { if (IS_ALIGNED(width, 8)) {
NV21ToRGB565Row = NV21ToRGB565Row_NEON; NV12ToRGB565Row = NV12ToRGB565Row_NEON;
} }
} }
#endif #endif
for (y = 0; y < height; ++y) { for (y = 0; y < height; ++y) {
NV21ToRGB565Row(src_y, src_vu, dst_rgb565, width); NV12ToRGB565Row(src_y, src_vu, dst_rgb565, &kYvuConstants, width);
dst_rgb565 += dst_stride_rgb565; dst_rgb565 += dst_stride_rgb565;
src_y += src_stride_y; src_y += src_stride_y;
if (y & 1) { if (y & 1) {
...@@ -1110,7 +1115,7 @@ void SetPlane(uint8* dst_y, int dst_stride_y, ...@@ -1110,7 +1115,7 @@ void SetPlane(uint8* dst_y, int dst_stride_y,
int width, int height, int width, int height,
uint32 value) { uint32 value) {
int y; int y;
void (*SetRow)(uint8* dst, uint8 value, int pix) = SetRow_C; void (*SetRow)(uint8* dst, uint8 value, int width) = SetRow_C;
if (height < 0) { if (height < 0) {
height = -height; height = -height;
dst_y = dst_y + (height - 1) * dst_stride_y; dst_y = dst_y + (height - 1) * dst_stride_y;
...@@ -1186,7 +1191,7 @@ int ARGBRect(uint8* dst_argb, int dst_stride_argb, ...@@ -1186,7 +1191,7 @@ int ARGBRect(uint8* dst_argb, int dst_stride_argb,
int width, int height, int width, int height,
uint32 value) { uint32 value) {
int y; int y;
void (*ARGBSetRow)(uint8* dst_argb, uint32 value, int pix) = ARGBSetRow_C; void (*ARGBSetRow)(uint8* dst_argb, uint32 value, int width) = ARGBSetRow_C;
if (!dst_argb || if (!dst_argb ||
width <= 0 || height == 0 || width <= 0 || height == 0 ||
dst_x < 0 || dst_y < 0) { dst_x < 0 || dst_y < 0) {
...@@ -1909,7 +1914,7 @@ int ARGBShuffle(const uint8* src_bgra, int src_stride_bgra, ...@@ -1909,7 +1914,7 @@ int ARGBShuffle(const uint8* src_bgra, int src_stride_bgra,
const uint8* shuffler, int width, int height) { const uint8* shuffler, int width, int height) {
int y; int y;
void (*ARGBShuffleRow)(const uint8* src_bgra, uint8* dst_argb, void (*ARGBShuffleRow)(const uint8* src_bgra, uint8* dst_argb,
const uint8* shuffler, int pix) = ARGBShuffleRow_C; const uint8* shuffler, int width) = ARGBShuffleRow_C;
if (!src_bgra || !dst_argb || if (!src_bgra || !dst_argb ||
width <= 0 || height == 0) { width <= 0 || height == 0) {
return -1; return -1;
...@@ -1976,7 +1981,7 @@ static int ARGBSobelize(const uint8* src_argb, int src_stride_argb, ...@@ -1976,7 +1981,7 @@ static int ARGBSobelize(const uint8* src_argb, int src_stride_argb,
const uint8* src_sobely, const uint8* src_sobely,
uint8* dst, int width)) { uint8* dst, int width)) {
int y; int y;
void (*ARGBToYJRow)(const uint8* src_argb, uint8* dst_g, int pix) = void (*ARGBToYJRow)(const uint8* src_argb, uint8* dst_g, int width) =
ARGBToYJRow_C; ARGBToYJRow_C;
void (*SobelYRow)(const uint8* src_y0, const uint8* src_y1, void (*SobelYRow)(const uint8* src_y0, const uint8* src_y1,
uint8* dst_sobely, int width) = SobelYRow_C; uint8* dst_sobely, int width) = SobelYRow_C;
...@@ -2360,8 +2365,8 @@ int YUY2ToNV12(const uint8* src_yuy2, int src_stride_yuy2, ...@@ -2360,8 +2365,8 @@ int YUY2ToNV12(const uint8* src_yuy2, int src_stride_yuy2,
int width, int height) { int width, int height) {
int y; int y;
int halfwidth = (width + 1) >> 1; int halfwidth = (width + 1) >> 1;
void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix) = void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
SplitUVRow_C; int width) = SplitUVRow_C;
void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr, void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr,
ptrdiff_t src_stride, int dst_width, ptrdiff_t src_stride, int dst_width,
int source_y_fraction) = InterpolateRow_C; int source_y_fraction) = InterpolateRow_C;
...@@ -2464,8 +2469,8 @@ int UYVYToNV12(const uint8* src_uyvy, int src_stride_uyvy, ...@@ -2464,8 +2469,8 @@ int UYVYToNV12(const uint8* src_uyvy, int src_stride_uyvy,
int width, int height) { int width, int height) {
int y; int y;
int halfwidth = (width + 1) >> 1; int halfwidth = (width + 1) >> 1;
void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix) = void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
SplitUVRow_C; int width) = SplitUVRow_C;
void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr, void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr,
ptrdiff_t src_stride, int dst_width, ptrdiff_t src_stride, int dst_width,
int source_y_fraction) = InterpolateRow_C; int source_y_fraction) = InterpolateRow_C;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -593,7 +593,7 @@ void MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, ...@@ -593,7 +593,7 @@ void MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
// t8 = | 0 | G1 | 0 | g1 | // t8 = | 0 | G1 | 0 | g1 |
// t2 = | 0 | R0 | 0 | r0 | // t2 = | 0 | R0 | 0 | r0 |
// t1 = | 0 | R1 | 0 | r1 | // t1 = | 0 | R1 | 0 | r1 |
#define I422ToTransientMipsRGB \ #define YUVTORGB \
"lw $t0, 0(%[y_buf]) \n" \ "lw $t0, 0(%[y_buf]) \n" \
"lhu $t1, 0(%[u_buf]) \n" \ "lhu $t1, 0(%[u_buf]) \n" \
"lhu $t2, 0(%[v_buf]) \n" \ "lhu $t2, 0(%[v_buf]) \n" \
...@@ -652,10 +652,12 @@ void MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, ...@@ -652,10 +652,12 @@ void MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
"addu.ph $t2, $t2, $s5 \n" \ "addu.ph $t2, $t2, $s5 \n" \
"addu.ph $t1, $t1, $s5 \n" "addu.ph $t1, $t1, $s5 \n"
// TODO(fbarchard): accept yuv conversion constants.
void I422ToARGBRow_MIPS_DSPR2(const uint8* y_buf, void I422ToARGBRow_MIPS_DSPR2(const uint8* y_buf,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) { int width) {
__asm__ __volatile__ ( __asm__ __volatile__ (
".set push \n" ".set push \n"
...@@ -671,7 +673,7 @@ void I422ToARGBRow_MIPS_DSPR2(const uint8* y_buf, ...@@ -671,7 +673,7 @@ void I422ToARGBRow_MIPS_DSPR2(const uint8* y_buf,
"ori $s6, 0xff00 \n" // |ff|00|ff|00|ff| "ori $s6, 0xff00 \n" // |ff|00|ff|00|ff|
"1: \n" "1: \n"
I422ToTransientMipsRGB YUVTORGB
// Arranging into argb format // Arranging into argb format
"precr.qb.ph $t4, $t8, $t4 \n" // |G1|g1|B1|b1| "precr.qb.ph $t4, $t8, $t4 \n" // |G1|g1|B1|b1|
"precr.qb.ph $t5, $t9, $t5 \n" // |G0|g0|B0|b0| "precr.qb.ph $t5, $t9, $t5 \n" // |G0|g0|B0|b0|
...@@ -717,6 +719,7 @@ void I422ToABGRRow_MIPS_DSPR2(const uint8* y_buf, ...@@ -717,6 +719,7 @@ void I422ToABGRRow_MIPS_DSPR2(const uint8* y_buf,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) { int width) {
__asm__ __volatile__ ( __asm__ __volatile__ (
".set push \n" ".set push \n"
...@@ -732,7 +735,7 @@ void I422ToABGRRow_MIPS_DSPR2(const uint8* y_buf, ...@@ -732,7 +735,7 @@ void I422ToABGRRow_MIPS_DSPR2(const uint8* y_buf,
"ori $s6, 0xff00 \n" // |ff|00|ff|00| "ori $s6, 0xff00 \n" // |ff|00|ff|00|
"1: \n" "1: \n"
I422ToTransientMipsRGB YUVTORGB
// Arranging into abgr format // Arranging into abgr format
"precr.qb.ph $t0, $t8, $t1 \n" // |G1|g1|R1|r1| "precr.qb.ph $t0, $t8, $t1 \n" // |G1|g1|R1|r1|
"precr.qb.ph $t3, $t9, $t2 \n" // |G0|g0|R0|r0| "precr.qb.ph $t3, $t9, $t2 \n" // |G0|g0|R0|r0|
...@@ -778,6 +781,7 @@ void I422ToBGRARow_MIPS_DSPR2(const uint8* y_buf, ...@@ -778,6 +781,7 @@ void I422ToBGRARow_MIPS_DSPR2(const uint8* y_buf,
const uint8* u_buf, const uint8* u_buf,
const uint8* v_buf, const uint8* v_buf,
uint8* rgb_buf, uint8* rgb_buf,
struct YuvConstants* yuvconstants,
int width) { int width) {
__asm__ __volatile__ ( __asm__ __volatile__ (
".set push \n" ".set push \n"
...@@ -793,7 +797,7 @@ void I422ToBGRARow_MIPS_DSPR2(const uint8* y_buf, ...@@ -793,7 +797,7 @@ void I422ToBGRARow_MIPS_DSPR2(const uint8* y_buf,
"ori $s6, 0xff \n" // |00|ff|00|ff| "ori $s6, 0xff \n" // |00|ff|00|ff|
"1: \n" "1: \n"
I422ToTransientMipsRGB YUVTORGB
// Arranging into bgra format // Arranging into bgra format
"precr.qb.ph $t4, $t4, $t8 \n" // |B1|b1|G1|g1| "precr.qb.ph $t4, $t4, $t8 \n" // |B1|b1|G1|g1|
"precr.qb.ph $t5, $t5, $t9 \n" // |B0|b0|G0|g0| "precr.qb.ph $t5, $t5, $t9 \n" // |B0|b0|G0|g0|
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment