diff --git a/remoting/DEPS b/remoting/DEPS index 80188724296463..6e5ae99519f1a7 100644 --- a/remoting/DEPS +++ b/remoting/DEPS @@ -21,6 +21,7 @@ include_rules = [ "+third_party/GTM/AppKit", "+third_party/libjingle", "+third_party/libvpx", + "+third_party/libyuv", "+third_party/skia/include/core", "+ui/base/keycodes", ] diff --git a/remoting/base/util.cc b/remoting/base/util.cc index 66a70eae537ada..bd85e6a49f924e 100644 --- a/remoting/base/util.cc +++ b/remoting/base/util.cc @@ -11,6 +11,7 @@ #include "base/time.h" #include "media/base/video_frame.h" #include "media/base/yuv_convert.h" +#include "third_party/libyuv/include/libyuv/convert.h" #include "third_party/skia/include/core/SkRegion.h" #if defined(OS_POSIX) @@ -65,15 +66,11 @@ void ConvertRGB32ToYUVWithRect(const uint8* rgb_plane, int y_offset = CalculateYOffset(x, y, y_stride); int uv_offset = CalculateUVOffset(x, y, uv_stride);; - media::ConvertRGB32ToYUV(rgb_plane + rgb_offset, - y_plane + y_offset, - u_plane + uv_offset, - v_plane + uv_offset, - width, - height, - rgb_stride, - y_stride, - uv_stride); + libyuv::ARGBToI420(rgb_plane + rgb_offset, rgb_stride, + y_plane + y_offset, y_stride, + u_plane + uv_offset, uv_stride, + v_plane + uv_offset, uv_stride, + width, height); } void ConvertAndScaleYUVToRGB32Rect(const uint8* source_yplane, @@ -111,7 +108,7 @@ void ConvertAndScaleYUVToRGB32Rect(const uint8* source_yplane, // See if scaling is needed. if (source_size == dest_size) { // Calculate the inner rectangle that can be copied by the optimized - // ConvertYUVToRGB32(). + // libyuv::I420ToARGB(). SkIRect inner_rect = SkIRect::MakeLTRB(RoundToTwosMultiple(dest_rect.left() + 1), RoundToTwosMultiple(dest_rect.top() + 1), @@ -126,16 +123,11 @@ void ConvertAndScaleYUVToRGB32Rect(const uint8* source_yplane, rgb_offset += CalculateRGBOffset(inner_rect.x(), inner_rect.y(), dest_stride); - media::ConvertYUVToRGB32(source_yplane + y_offset, - source_uplane + uv_offset, - source_vplane + uv_offset, - dest_buffer + rgb_offset, - inner_rect.width(), - inner_rect.height(), - source_ystride, - source_uvstride, - dest_stride, - media::YV12); + libyuv::I420ToARGB(source_yplane + y_offset, source_ystride, + source_uplane + uv_offset, source_uvstride, + source_vplane + uv_offset, source_uvstride, + dest_buffer + rgb_offset, dest_stride, + inner_rect.width(), inner_rect.height()); // Now see if some pixels weren't copied due to alignment. if (dest_rect != inner_rect) { diff --git a/remoting/codec/video_decoder_vp8_unittest.cc b/remoting/codec/video_decoder_vp8_unittest.cc index bf4d6262e632d6..d8d36f0a18866b 100644 --- a/remoting/codec/video_decoder_vp8_unittest.cc +++ b/remoting/codec/video_decoder_vp8_unittest.cc @@ -34,7 +34,7 @@ TEST_F(VideoDecoderVp8Test, VideoEncodeAndDecode) { // frame too much. The frame used is a gradient, which does not contain sharp // transitions, so encoding lossiness should not be too high. TEST_F(VideoDecoderVp8Test, Gradient) { - TestGradient(320, 240, 320, 240, 0.03, 0.01); + TestGradient(320, 240, 320, 240, 0.04, 0.02); } TEST_F(VideoDecoderVp8Test, GradientScaleUpEvenToEven) { diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp index 0a39d0cf36f5a7..e5bfd01d4a127a 100644 --- a/remoting/remoting.gyp +++ b/remoting/remoting.gyp @@ -2204,6 +2204,7 @@ '../net/net.gyp:net', '../skia/skia.gyp:skia', '../third_party/libvpx/libvpx.gyp:libvpx', + '../third_party/libyuv/libyuv.gyp:libyuv', '../third_party/opus/opus.gyp:opus', '../third_party/protobuf/protobuf.gyp:protobuf_lite', '../third_party/speex/speex.gyp:libspeex',