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
This commit is contained in:
leozwang@webrtc.org 2012-05-09 18:24:39 +00:00
parent de6a6b40fa
commit b213cd55ef
2 changed files with 2 additions and 97 deletions

View File

@ -13,10 +13,6 @@
#include "common_video/libyuv/include/libyuv.h"
#include "tick_util.h"
#ifdef ANDROID_NDK_8_OR_ABOVE
#include <android/bitmap.h>
#endif
#ifdef ANDROID_LOG
#include <stdio.h>
#include <android/log.h>
@ -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

View File

@ -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;