From b86a1770ee648751ea0cb8a1d8b8cc8db14e6798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20Kalliom=C3=A4ki?= Date: Thu, 21 Nov 2019 11:08:54 +0100 Subject: [PATCH] Expose ABGRToI420 in YuvHelper. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: None Change-Id: I59947339a3a4bb683211ec3c00713ccfbf35bc40 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160182 Reviewed-by: Paulina Hensman Commit-Queue: Sami Kalliomäki Cr-Commit-Position: refs/heads/master@{#29855} --- sdk/android/api/org/webrtc/YuvHelper.java | 10 ++++++++++ sdk/android/src/jni/yuv_helper.cc | 24 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/sdk/android/api/org/webrtc/YuvHelper.java b/sdk/android/api/org/webrtc/YuvHelper.java index f82fde880a..83bd7dcbb4 100644 --- a/sdk/android/api/org/webrtc/YuvHelper.java +++ b/sdk/android/api/org/webrtc/YuvHelper.java @@ -102,6 +102,13 @@ public class YuvHelper { nativeCopyPlane(src, srcStride, dst, dstStride, width, height); } + /** Converts ABGR little endian (rgba in memory) to I420. */ + public static void ABGRToI420(ByteBuffer src, int srcStride, ByteBuffer dstY, int dstStrideY, + ByteBuffer dstU, int dstStrideU, ByteBuffer dstV, int dstStrideV, int width, int height) { + nativeABGRToI420( + src, srcStride, dstY, dstStrideY, dstU, dstStrideU, dstV, dstStrideV, width, height); + } + public static void I420Copy(ByteBuffer srcY, int srcStrideY, ByteBuffer srcU, int srcStrideU, ByteBuffer srcV, int srcStrideV, ByteBuffer dstY, int dstStrideY, ByteBuffer dstU, int dstStrideU, ByteBuffer dstV, int dstStrideV, int width, int height) { @@ -136,4 +143,7 @@ public class YuvHelper { int srcStrideU, ByteBuffer srcV, int srcStrideV, ByteBuffer dstY, int dstStrideY, ByteBuffer dstU, int dstStrideU, ByteBuffer dstV, int dstStrideV, int srcWidth, int srcHeight, int rotationMode); + private static native void nativeABGRToI420(ByteBuffer src, int srcStride, ByteBuffer dstY, + int dstStrideY, ByteBuffer dstU, int dstStrideU, ByteBuffer dstV, int dstStrideV, int width, + int height); } diff --git a/sdk/android/src/jni/yuv_helper.cc b/sdk/android/src/jni/yuv_helper.cc index 04ae49b2c9..e812bc9527 100644 --- a/sdk/android/src/jni/yuv_helper.cc +++ b/sdk/android/src/jni/yuv_helper.cc @@ -130,5 +130,29 @@ void JNI_YuvHelper_I420Rotate(JNIEnv* jni, static_cast(rotation_mode)); } +void JNI_YuvHelper_ABGRToI420(JNIEnv* jni, + const JavaParamRef& j_src, + jint src_stride, + const JavaParamRef& j_dst_y, + jint dst_stride_y, + const JavaParamRef& j_dst_u, + jint dst_stride_u, + const JavaParamRef& j_dst_v, + jint dst_stride_v, + jint src_width, + jint src_height) { + const uint8_t* src = + static_cast(jni->GetDirectBufferAddress(j_src.obj())); + uint8_t* dst_y = + static_cast(jni->GetDirectBufferAddress(j_dst_y.obj())); + uint8_t* dst_u = + static_cast(jni->GetDirectBufferAddress(j_dst_u.obj())); + uint8_t* dst_v = + static_cast(jni->GetDirectBufferAddress(j_dst_v.obj())); + + libyuv::ABGRToI420(src, src_stride, dst_y, dst_stride_y, dst_u, dst_stride_u, + dst_v, dst_stride_v, src_width, src_height); +} + } // namespace jni } // namespace webrtc