mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-07 01:06:46 +08:00
add dest alignment check for NV12ToARGB
BUG=none TEST=none Review URL: https://webrtc-codereview.appspot.com/360003 git-svn-id: http://libyuv.googlecode.com/svn/trunk@143 16f28f9a-4ce2-e073-06de-1de4eb20be90
This commit is contained in:
parent
fc99814a92
commit
d1943b39e5
@ -1,6 +1,6 @@
|
|||||||
Name: libyuv
|
Name: libyuv
|
||||||
URL: http://code.google.com/p/libyuv/
|
URL: http://code.google.com/p/libyuv/
|
||||||
Version: 142
|
Version: 143
|
||||||
License: BSD
|
License: BSD
|
||||||
License File: LICENSE
|
License File: LICENSE
|
||||||
|
|
||||||
|
|||||||
@ -79,7 +79,7 @@ int I400ToI420(const uint8* src_y, int src_stride_y,
|
|||||||
uint8* dst_v, int dst_stride_v,
|
uint8* dst_v, int dst_stride_v,
|
||||||
int width, int height);
|
int width, int height);
|
||||||
|
|
||||||
// Convert NV12 to ARGB.
|
// Convert NV12 to ARGB. Also used for NV21.
|
||||||
int NV12ToARGB(const uint8* src_y, int src_stride_y,
|
int NV12ToARGB(const uint8* src_y, int src_stride_y,
|
||||||
const uint8* src_uv, int src_stride_uv,
|
const uint8* src_uv, int src_stride_uv,
|
||||||
uint8* dst_frame, int dst_stride_frame,
|
uint8* dst_frame, int dst_stride_frame,
|
||||||
|
|||||||
@ -2248,25 +2248,27 @@ int ARGBToRAW(const uint8* src_argb, int src_stride_argb,
|
|||||||
// Convert NV12 to ARGB.
|
// Convert NV12 to ARGB.
|
||||||
int NV12ToARGB(const uint8* src_y, int src_stride_y,
|
int NV12ToARGB(const uint8* src_y, int src_stride_y,
|
||||||
const uint8* src_uv, int src_stride_uv,
|
const uint8* src_uv, int src_stride_uv,
|
||||||
uint8* dst_rgb, int dst_stride_rgb,
|
uint8* dst_argb, int dst_stride_argb,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
// Negative height means invert the image.
|
// Negative height means invert the image.
|
||||||
if (height < 0) {
|
if (height < 0) {
|
||||||
height = -height;
|
height = -height;
|
||||||
dst_rgb = dst_rgb + (height - 1) * dst_stride_rgb;
|
dst_argb = dst_argb + (height - 1) * dst_stride_argb;
|
||||||
dst_stride_rgb = -dst_stride_rgb;
|
dst_stride_argb = -dst_stride_argb;
|
||||||
}
|
}
|
||||||
void (*FastConvertYUVToARGBRow)(const uint8* y_buf,
|
void (*FastConvertYUVToARGBRow)(const uint8* y_buf,
|
||||||
const uint8* u_buf,
|
const uint8* u_buf,
|
||||||
const uint8* v_buf,
|
const uint8* v_buf,
|
||||||
uint8* rgb_buf,
|
uint8* argb_buf,
|
||||||
int width);
|
int width);
|
||||||
#if defined(HAS_FASTCONVERTYUVTOARGBROW_NEON)
|
#if defined(HAS_FASTCONVERTYUVTOARGBROW_NEON)
|
||||||
if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(width, 16)) {
|
if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(width, 16)) {
|
||||||
FastConvertYUVToARGBRow = FastConvertYUVToARGBRow_NEON;
|
FastConvertYUVToARGBRow = FastConvertYUVToARGBRow_NEON;
|
||||||
} else
|
} else
|
||||||
#elif defined(HAS_FASTCONVERTYUVTOARGBROW_SSSE3)
|
#elif defined(HAS_FASTCONVERTYUVTOARGBROW_SSSE3)
|
||||||
if (TestCpuFlag(kCpuHasSSSE3) && IS_ALIGNED(width, 8)) {
|
if (TestCpuFlag(kCpuHasSSSE3) &&
|
||||||
|
IS_ALIGNED(width, 8) &&
|
||||||
|
IS_ALIGNED(dst_argb, 16) && IS_ALIGNED(dst_stride_argb, 16)) {
|
||||||
FastConvertYUVToARGBRow = FastConvertYUVToARGBRow_SSSE3;
|
FastConvertYUVToARGBRow = FastConvertYUVToARGBRow_SSSE3;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
@ -2298,8 +2300,8 @@ int NV12ToARGB(const uint8* src_y, int src_stride_y,
|
|||||||
SplitUV(src_uv, rowuv, rowuv + kMaxStride, halfwidth);
|
SplitUV(src_uv, rowuv, rowuv + kMaxStride, halfwidth);
|
||||||
src_uv += src_stride_uv;
|
src_uv += src_stride_uv;
|
||||||
}
|
}
|
||||||
FastConvertYUVToARGBRow(src_y, rowuv, rowuv + kMaxStride, dst_rgb, width);
|
FastConvertYUVToARGBRow(src_y, rowuv, rowuv + kMaxStride, dst_argb, width);
|
||||||
dst_rgb += dst_stride_rgb;
|
dst_argb += dst_stride_argb;
|
||||||
src_y += src_stride_y;
|
src_y += src_stride_y;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user