diff --git a/Android.bp b/Android.bp index ea76f9435..73b77a326 100644 --- a/Android.bp +++ b/Android.bp @@ -105,6 +105,15 @@ cc_test { static_libs: ["libyuv"], } +cc_test { + name: "i444tonv12_eg", + gtest: false, + srcs: [ + "util/i444tonv12_eg.cc", + ], + static_libs: ["libyuv"], +} + cc_test { name: "cpuid", gtest: false, diff --git a/Android.mk b/Android.mk index 0975d64a3..08f990af6 100644 --- a/Android.mk +++ b/Android.mk @@ -11,41 +11,45 @@ LOCAL_SRC_FILES := \ source/compare_gcc.cc \ source/compare_mmi.cc \ source/compare_msa.cc \ - source/compare_neon.cc \ source/compare_neon64.cc \ - source/convert.cc \ + source/compare_neon.cc \ + source/compare_win.cc \ source/convert_argb.cc \ - source/convert_from.cc \ + source/convert.cc \ source/convert_from_argb.cc \ + source/convert_from.cc \ source/convert_to_argb.cc \ source/convert_to_i420.cc \ source/cpu_id.cc \ source/planar_functions.cc \ - source/rotate.cc \ source/rotate_any.cc \ source/rotate_argb.cc \ + source/rotate.cc \ source/rotate_common.cc \ source/rotate_gcc.cc \ source/rotate_mmi.cc \ source/rotate_msa.cc \ - source/rotate_neon.cc \ source/rotate_neon64.cc \ + source/rotate_neon.cc \ + source/rotate_win.cc \ source/row_any.cc \ source/row_common.cc \ source/row_gcc.cc \ source/row_mmi.cc \ source/row_msa.cc \ - source/row_neon.cc \ source/row_neon64.cc \ - source/scale.cc \ + source/row_neon.cc \ + source/row_win.cc \ source/scale_any.cc \ source/scale_argb.cc \ + source/scale.cc \ source/scale_common.cc \ source/scale_gcc.cc \ source/scale_mmi.cc \ source/scale_msa.cc \ - source/scale_neon.cc \ source/scale_neon64.cc \ + source/scale_neon.cc \ + source/scale_win.cc \ source/video_common.cc common_CFLAGS := -Wall -fexceptions diff --git a/BUILD.gn b/BUILD.gn index a731844e1..aedf25bda 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -39,6 +39,7 @@ group("default") { deps += [ ":compare", ":cpuid", + ":i444tonv12_eg", ":libyuv_unittest", ":psnr", ":yuvconvert", @@ -389,6 +390,16 @@ if (libyuv_include_tests) { } } + executable("i444tonv12_eg") { + sources = [ + # sources + "util/i444tonv12_eg.cc", + ] + deps = [ + ":libyuv", + ] + } + executable("cpuid") { sources = [ # sources diff --git a/linux.mk b/linux.mk index e9a26a79b..6b07c5060 100644 --- a/linux.mk +++ b/linux.mk @@ -65,7 +65,7 @@ LOCAL_OBJ_FILES := \ .c.o: $(CC) -c $(CFLAGS) $*.c -o $*.o -all: libyuv.a yuvconvert cpuid psnr +all: libyuv.a i444tonv12_eg yuvconvert cpuid psnr libyuv.a: $(LOCAL_OBJ_FILES) $(AR) $(ARFLAGS) $@ $(LOCAL_OBJ_FILES) @@ -78,6 +78,10 @@ yuvconvert: util/yuvconvert.cc libyuv.a psnr: util/psnr.cc $(CXX) $(CXXFLAGS) -Iutil/ -o $@ util/psnr.cc util/psnr_main.cc util/ssim.cc +# A simple conversion example. +i444tonv12_eg: util/i444tonv12_eg.cc libyuv.a + $(CC) $(CFLAGS) -o $@ util/i444tonv12_eg.cc libyuv.a + # A C test utility that uses libyuv conversion from C. # gcc 4.4 and older require -fno-exceptions to avoid link error on __gxx_personality_v0 # CC=gcc-4.4 CXXFLAGS=-fno-exceptions CXX=g++-4.4 make -f linux.mk @@ -85,4 +89,4 @@ cpuid: util/cpuid.c libyuv.a $(CC) $(CFLAGS) -o $@ util/cpuid.c libyuv.a clean: - /bin/rm -f source/*.o *.ii *.s libyuv.a yuvconvert cpuid psnr + /bin/rm -f source/*.o *.ii *.s libyuv.a i444tonv12_eg yuvconvert cpuid psnr diff --git a/util/i444tonv12_eg.cc b/util/i444tonv12_eg.cc new file mode 100644 index 000000000..0fcb4095a --- /dev/null +++ b/util/i444tonv12_eg.cc @@ -0,0 +1,28 @@ + +#include "libyuv/convert.h" + +#include // for printf +#include // for memset + +int main(int, char**) { + unsigned char src_i444[640 * 400 * 3]; + unsigned char dst_nv12[640 * 400 * 3 / 2]; + + for (size_t i = 0; i < sizeof(src_i444); ++i) { + src_i444[i] = i & 255; + } + memset(dst_nv12, 0, sizeof(dst_nv12)); + libyuv::I444ToNV12(&src_i444[0], 640, // source Y + &src_i444[640 * 400], 640, // source U + &src_i444[640 * 400 * 2], 640, // source V + &dst_nv12[0], 640, // dest Y + &dst_nv12[640 * 400], 640, // dest UV + 640, 400); // width and height + + int checksum = 0; + for (size_t i = 0; i < sizeof(dst_nv12); ++i) { + checksum += dst_nv12[i]; + } + printf("checksum %x %s\n", checksum, checksum == 0x2ec0c00 ? "PASS" : "FAIL"); + return 0; +} \ No newline at end of file