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:
parent
de6a6b40fa
commit
b213cd55ef
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user