From b213cd55ef436bd4a268394dbc4a85787afa61f6 Mon Sep 17 00:00:00 2001 From: "leozwang@webrtc.org" Date: Wed, 9 May 2012 18:24:39 +0000 Subject: [PATCH] Remove bitmap implementation from surfaceview render BUG= TEST= Review URL: https://webrtc-codereview.appspot.com/571004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2205 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../video_render_android_surface_view.cc | 91 +------------------ .../video_render_android_surface_view.h | 8 +- 2 files changed, 2 insertions(+), 97 deletions(-) diff --git a/src/modules/video_render/main/source/android/video_render_android_surface_view.cc b/src/modules/video_render/main/source/android/video_render_android_surface_view.cc index 02203aff62..4d1338c11b 100644 --- a/src/modules/video_render/main/source/android/video_render_android_surface_view.cc +++ b/src/modules/video_render/main/source/android/video_render_android_surface_view.cc @@ -13,10 +13,6 @@ #include "common_video/libyuv/include/libyuv.h" #include "tick_util.h" -#ifdef ANDROID_NDK_8_OR_ABOVE - #include -#endif - #ifdef ANDROID_LOG #include #include @@ -275,11 +271,7 @@ AndroidSurfaceViewChannel::~AndroidSurfaceViewChannel() { } } -#ifdef ANDROID_NDK_8_OR_ABOVE - env->DeleteGlobalRef(_javaBitmapObj); -#else env->DeleteGlobalRef(_javaByteBufferObj); -#endif if (isAttached) { if (_jvm->DetachCurrentThread() < 0) { WEBRTC_TRACE(kTraceWarning, @@ -354,31 +346,7 @@ WebRtc_Word32 AndroidSurfaceViewChannel::Init( __FUNCTION__); return -1; } -#ifdef ANDROID_NDK_8_OR_ABOVE - // get the method ID for the CreateBitmap - _createBitmapCid = - env->GetMethodID(_javaRenderClass, - "CreateBitmap", - "(II)Landroid/graphics/Bitmap;"); - if (_createBitmapCid == NULL) { - WEBRTC_TRACE(kTraceError, - kTraceVideoRenderer, - _id, - "%s: could not get CreateBitmap ID", - __FUNCTION__); - return -1; /* exception thrown */ - } - // get the method ID for the DrawBitmap function - _drawBitmapCid = env->GetMethodID(_javaRenderClass, "DrawBitmap", "()V"); - if (_drawBitmapCid == NULL) { - WEBRTC_TRACE(kTraceError, - kTraceVideoRenderer, - _id, - "%s: could not get DrawBitmap ID", - __FUNCTION__); - return -1; /* exception thrown */ - } -#else + // get the method ID for the CreateIntArray _createByteBufferCid = env->GetMethodID(javaRenderClass, @@ -405,7 +373,6 @@ WebRtc_Word32 AndroidSurfaceViewChannel::Init( __FUNCTION__); return -1; /* exception thrown */ } -#endif // get the method ID for the SetCoordinates function _setCoordinatesCid = env->GetMethodID(javaRenderClass, @@ -461,61 +428,6 @@ WebRtc_Word32 AndroidSurfaceViewChannel::RenderFrame( void AndroidSurfaceViewChannel::DeliverFrame(JNIEnv* jniEnv) { _renderCritSect.Enter(); -#ifdef ANDROID_NDK_8_OR_ABOVE - if (_bitmapWidth != _bufferToRender.Width() || - _bitmapHeight != _bufferToRender.Height()) { - // Create the bitmap to write to - WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s: Creating bitmap %u " - "%u", __FUNCTION__, _bufferToRender.Width(), - _bufferToRender.Height()); - if (_javaBitmapObj) { - jniEnv->DeleteGlobalRef(_javaBitmapObj); - _javaBitmapObj = NULL; - } - jobject javaBitmap = jniEnv->CallObjectMethod(_javaRenderObj, - _createBitmapCid, - _bufferToRender.Width(), - _bufferToRender.Height()); - _javaBitmapObj = jniEnv->NewGlobalRef(javaBitmap); - if (!_javaBitmapObj) { - WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s: could not " - "create Java Bitmap object reference", __FUNCTION__); - _renderCritSect.Leave(); - return; - } else { - _bitmapWidth = _bufferToRender.Width(); - _bitmapHeight = _bufferToRender.Height(); - } - } - void* pixels; - if (_javaBitmapObj && - AndroidBitmap_lockPixels(jniEnv, _javaBitmapObj, &pixels) >= 0) { - WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s: Locked bitmap", - __FUNCTION__); - // Convert I420 straight into the Java bitmap. - int ret = ConvertFromI420((unsigned char*)_bufferToRender.Buffer(), - _bitmapWidth, KRGB565, 0, - _bitmapWidth, _bitmapHeight, - (unsigned char*) pixels); - if (ret < 0) { - WEBRTC_TRACE(kTraceError, - kTraceVideoRenderer, - _id, - "%s: Color conversion failed.", - __FUNCTION__); - } - - AndroidBitmap_unlockPixels(jniEnv, _javaBitmapObj); - // Draw the Surface. - jniEnv->CallVoidMethod(_javaRenderObj,_drawCid); - - } else { - WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s: Could not lock " - "bitmap", __FUNCTION__); - } - _renderCritSect.Leave(); - -#else if (_bitmapWidth != _bufferToRender.Width() || _bitmapHeight != _bufferToRender.Height()) { WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s: New render size %d " @@ -560,7 +472,6 @@ void AndroidSurfaceViewChannel::DeliverFrame(JNIEnv* jniEnv) { _renderCritSect.Leave(); // Draw the Surface jniEnv->CallVoidMethod(_javaRenderObj, _drawByteBufferCid); -#endif } } // namespace webrtc diff --git a/src/modules/video_render/main/source/android/video_render_android_surface_view.h b/src/modules/video_render/main/source/android/video_render_android_surface_view.h index 34394c219a..1122a79acb 100644 --- a/src/modules/video_render/main/source/android/video_render_android_surface_view.h +++ b/src/modules/video_render/main/source/android/video_render_android_surface_view.h @@ -50,17 +50,11 @@ class AndroidSurfaceViewChannel : public AndroidStream { JavaVM* _jvm; jobject _javaRenderObj; -#ifdef ANDROID_NDK_8_OR_ABOVE - jclass _javaBitmapClass; - jmethodID _createBitmapCid; - jobject _javaBitmapObj; - jmethodID _drawBitmapCid; -#else jobject _javaByteBufferObj; unsigned char* _directBuffer; jmethodID _createByteBufferCid; jmethodID _drawByteBufferCid; -#endif + jmethodID _setCoordinatesCid; unsigned int _bitmapWidth; unsigned int _bitmapHeight;