Add I420ToNV12 and NV21 to convert from

BUG=178
TEST=none
Review URL: https://webrtc-codereview.appspot.com/1127007

git-svn-id: http://libyuv.googlecode.com/svn/trunk@581 16f28f9a-4ce2-e073-06de-1de4eb20be90
This commit is contained in:
fbarchard@google.com 2013-02-26 03:00:31 +00:00
parent c22cd5b209
commit 928483f397
4 changed files with 51 additions and 31 deletions

View File

@ -1,6 +1,6 @@
Name: libyuv Name: libyuv
URL: http://code.google.com/p/libyuv/ URL: http://code.google.com/p/libyuv/
Version: 579 Version: 581
License: BSD License: BSD
License File: LICENSE License File: LICENSE

View File

@ -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 579 #define LIBYUV_VERSION 581
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT

View File

@ -1866,6 +1866,30 @@ int ConvertToI420(const uint8* sample,
v, v_stride, v, v_stride,
dst_width, inv_dst_height); dst_width, inv_dst_height);
break; break;
case FOURCC_RGBP:
src = sample + (src_width * crop_y + crop_x) * 2;
r = RGB565ToI420(src, src_width * 2,
y, y_stride,
u, u_stride,
v, v_stride,
dst_width, inv_dst_height);
break;
case FOURCC_RGBO:
src = sample + (src_width * crop_y + crop_x) * 2;
r = ARGB1555ToI420(src, src_width * 2,
y, y_stride,
u, u_stride,
v, v_stride,
dst_width, inv_dst_height);
break;
case FOURCC_R444:
src = sample + (src_width * crop_y + crop_x) * 2;
r = ARGB4444ToI420(src, src_width * 2,
y, y_stride,
u, u_stride,
v, v_stride,
dst_width, inv_dst_height);
break;
case FOURCC_24BG: case FOURCC_24BG:
src = sample + (src_width * crop_y + crop_x) * 3; src = sample + (src_width * crop_y + crop_x) * 3;
r = RGB24ToI420(src, src_width * 3, r = RGB24ToI420(src, src_width * 3,
@ -1914,30 +1938,6 @@ int ConvertToI420(const uint8* sample,
v, v_stride, v, v_stride,
dst_width, inv_dst_height); dst_width, inv_dst_height);
break; break;
case FOURCC_RGBP:
src = sample + (src_width * crop_y + crop_x) * 2;
r = RGB565ToI420(src, src_width * 2,
y, y_stride,
u, u_stride,
v, v_stride,
dst_width, inv_dst_height);
break;
case FOURCC_RGBO:
src = sample + (src_width * crop_y + crop_x) * 2;
r = ARGB1555ToI420(src, src_width * 2,
y, y_stride,
u, u_stride,
v, v_stride,
dst_width, inv_dst_height);
break;
case FOURCC_R444:
src = sample + (src_width * crop_y + crop_x) * 2;
r = ARGB4444ToI420(src, src_width * 2,
y, y_stride,
u, u_stride,
v, v_stride,
dst_width, inv_dst_height);
break;
// TODO(fbarchard): Support cropping Bayer by odd numbers // TODO(fbarchard): Support cropping Bayer by odd numbers
// by adjusting fourcc. // by adjusting fourcc.
case FOURCC_BGGR: case FOURCC_BGGR:
@ -1948,7 +1948,6 @@ int ConvertToI420(const uint8* sample,
v, v_stride, v, v_stride,
dst_width, inv_dst_height); dst_width, inv_dst_height);
break; break;
case FOURCC_GBRG: case FOURCC_GBRG:
src = sample + (src_width * crop_y + crop_x); src = sample + (src_width * crop_y + crop_x);
r = BayerGBRGToI420(src, src_width, r = BayerGBRGToI420(src, src_width,
@ -1957,7 +1956,6 @@ int ConvertToI420(const uint8* sample,
v, v_stride, v, v_stride,
dst_width, inv_dst_height); dst_width, inv_dst_height);
break; break;
case FOURCC_GRBG: case FOURCC_GRBG:
src = sample + (src_width * crop_y + crop_x); src = sample + (src_width * crop_y + crop_x);
r = BayerGRBGToI420(src, src_width, r = BayerGRBGToI420(src, src_width,
@ -1966,7 +1964,6 @@ int ConvertToI420(const uint8* sample,
v, v_stride, v, v_stride,
dst_width, inv_dst_height); dst_width, inv_dst_height);
break; break;
case FOURCC_RGGB: case FOURCC_RGGB:
src = sample + (src_width * crop_y + crop_x); src = sample + (src_width * crop_y + crop_x);
r = BayerRGGBToI420(src, src_width, r = BayerRGGBToI420(src, src_width,
@ -1975,7 +1972,6 @@ int ConvertToI420(const uint8* sample,
v, v_stride, v, v_stride,
dst_width, inv_dst_height); dst_width, inv_dst_height);
break; break;
case FOURCC_I400: case FOURCC_I400:
src = sample + src_width * crop_y + crop_x; src = sample + src_width * crop_y + crop_x;
r = I400ToI420(src, src_width, r = I400ToI420(src, src_width,
@ -1984,7 +1980,6 @@ int ConvertToI420(const uint8* sample,
v, v_stride, v, v_stride,
dst_width, inv_dst_height); dst_width, inv_dst_height);
break; break;
// Biplanar formats // Biplanar formats
case FOURCC_NV12: case FOURCC_NV12:
src = sample + (src_width * crop_y + crop_x); src = sample + (src_width * crop_y + crop_x);

View File

@ -1127,6 +1127,31 @@ int ConvertFromI420(const uint8* y, int y_stride,
dst_sample_stride ? dst_sample_stride : width, dst_sample_stride ? dst_sample_stride : width,
width, height); width, height);
break; break;
case FOURCC_NV12: {
uint8* dst_uv = dst_sample + width * height;
r = I420ToNV12(y, y_stride,
u, u_stride,
v, v_stride,
dst_sample,
dst_sample_stride ? dst_sample_stride : width,
dst_uv,
dst_sample_stride ? dst_sample_stride : width,
width, height);
break;
}
case FOURCC_NV21: {
uint8* dst_vu = dst_sample + width * height;
r = I420ToNV21(y, y_stride,
u, u_stride,
v, v_stride,
dst_sample,
dst_sample_stride ? dst_sample_stride : width,
dst_vu,
dst_sample_stride ? dst_sample_stride : width,
width, height);
break;
}
// TODO(fbarchard): Add M420 and Q420.
// Triplanar formats // Triplanar formats
// TODO(fbarchard): halfstride instead of halfwidth // TODO(fbarchard): halfstride instead of halfwidth
case FOURCC_I420: case FOURCC_I420: