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:
@@ -13,10 +13,6 @@
|
|||||||
#include "common_video/libyuv/include/libyuv.h"
|
#include "common_video/libyuv/include/libyuv.h"
|
||||||
#include "tick_util.h"
|
#include "tick_util.h"
|
||||||
|
|
||||||
#ifdef ANDROID_NDK_8_OR_ABOVE
|
|
||||||
#include <android/bitmap.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ANDROID_LOG
|
#ifdef ANDROID_LOG
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
@@ -275,11 +271,7 @@ AndroidSurfaceViewChannel::~AndroidSurfaceViewChannel() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ANDROID_NDK_8_OR_ABOVE
|
|
||||||
env->DeleteGlobalRef(_javaBitmapObj);
|
|
||||||
#else
|
|
||||||
env->DeleteGlobalRef(_javaByteBufferObj);
|
env->DeleteGlobalRef(_javaByteBufferObj);
|
||||||
#endif
|
|
||||||
if (isAttached) {
|
if (isAttached) {
|
||||||
if (_jvm->DetachCurrentThread() < 0) {
|
if (_jvm->DetachCurrentThread() < 0) {
|
||||||
WEBRTC_TRACE(kTraceWarning,
|
WEBRTC_TRACE(kTraceWarning,
|
||||||
@@ -354,31 +346,7 @@ WebRtc_Word32 AndroidSurfaceViewChannel::Init(
|
|||||||
__FUNCTION__);
|
__FUNCTION__);
|
||||||
return -1;
|
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
|
// get the method ID for the CreateIntArray
|
||||||
_createByteBufferCid =
|
_createByteBufferCid =
|
||||||
env->GetMethodID(javaRenderClass,
|
env->GetMethodID(javaRenderClass,
|
||||||
@@ -405,7 +373,6 @@ WebRtc_Word32 AndroidSurfaceViewChannel::Init(
|
|||||||
__FUNCTION__);
|
__FUNCTION__);
|
||||||
return -1; /* exception thrown */
|
return -1; /* exception thrown */
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// get the method ID for the SetCoordinates function
|
// get the method ID for the SetCoordinates function
|
||||||
_setCoordinatesCid = env->GetMethodID(javaRenderClass,
|
_setCoordinatesCid = env->GetMethodID(javaRenderClass,
|
||||||
@@ -461,61 +428,6 @@ WebRtc_Word32 AndroidSurfaceViewChannel::RenderFrame(
|
|||||||
void AndroidSurfaceViewChannel::DeliverFrame(JNIEnv* jniEnv) {
|
void AndroidSurfaceViewChannel::DeliverFrame(JNIEnv* jniEnv) {
|
||||||
_renderCritSect.Enter();
|
_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() ||
|
if (_bitmapWidth != _bufferToRender.Width() ||
|
||||||
_bitmapHeight != _bufferToRender.Height()) {
|
_bitmapHeight != _bufferToRender.Height()) {
|
||||||
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s: New render size %d "
|
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s: New render size %d "
|
||||||
@@ -560,7 +472,6 @@ void AndroidSurfaceViewChannel::DeliverFrame(JNIEnv* jniEnv) {
|
|||||||
_renderCritSect.Leave();
|
_renderCritSect.Leave();
|
||||||
// Draw the Surface
|
// Draw the Surface
|
||||||
jniEnv->CallVoidMethod(_javaRenderObj, _drawByteBufferCid);
|
jniEnv->CallVoidMethod(_javaRenderObj, _drawByteBufferCid);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
@@ -50,17 +50,11 @@ class AndroidSurfaceViewChannel : public AndroidStream {
|
|||||||
JavaVM* _jvm;
|
JavaVM* _jvm;
|
||||||
jobject _javaRenderObj;
|
jobject _javaRenderObj;
|
||||||
|
|
||||||
#ifdef ANDROID_NDK_8_OR_ABOVE
|
|
||||||
jclass _javaBitmapClass;
|
|
||||||
jmethodID _createBitmapCid;
|
|
||||||
jobject _javaBitmapObj;
|
|
||||||
jmethodID _drawBitmapCid;
|
|
||||||
#else
|
|
||||||
jobject _javaByteBufferObj;
|
jobject _javaByteBufferObj;
|
||||||
unsigned char* _directBuffer;
|
unsigned char* _directBuffer;
|
||||||
jmethodID _createByteBufferCid;
|
jmethodID _createByteBufferCid;
|
||||||
jmethodID _drawByteBufferCid;
|
jmethodID _drawByteBufferCid;
|
||||||
#endif
|
|
||||||
jmethodID _setCoordinatesCid;
|
jmethodID _setCoordinatesCid;
|
||||||
unsigned int _bitmapWidth;
|
unsigned int _bitmapWidth;
|
||||||
unsigned int _bitmapHeight;
|
unsigned int _bitmapHeight;
|
||||||
|
Reference in New Issue
Block a user