| Index: talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| diff --git a/talk/app/webrtc/java/jni/peerconnection_jni.cc b/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| index 194f9ff98c1b2887b4ae16c921ab35a7088954ec..560b61cf3cc37bb6c56f88eba185c5c850c0df3d 100644
|
| --- a/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| +++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| @@ -1338,12 +1338,40 @@ JOW(void, PeerConnectionFactory_nativeSetVideoHwAccelerationOptions)(
|
| OwnedFactoryAndThreads* owned_factory =
|
| reinterpret_cast<OwnedFactoryAndThreads*>(native_factory);
|
|
|
| + // TODO(perkj): In order to not break existing applications we need to
|
| + // check if |local_egl_context| or |remote_egl_context| is an
|
| + // EGL10 context. If so, create an EGLBase10.EGL10Context instead.
|
| + // Remove this once existing applications has been updated.
|
| + jobject local_eglbase_context = local_egl_context;
|
| + jobject remote_eglbase_context = remote_egl_context;
|
| +
|
| + jclass j_egl10_context_class =
|
| + FindClass(jni, "javax/microedition/khronos/egl/EGLContext");
|
| + jclass j_eglbase_context_class =
|
| + FindClass(jni, "org/webrtc/EglBase$Context");
|
| +
|
| + jmethodID j_eglbase_context_ctor = GetMethodID(
|
| + jni, j_eglbase_context_class,
|
| + "<init>", "(Ljavax/microedition/khronos/egl/EGLContext;)V");
|
| + if (local_egl_context != nullptr &&
|
| + jni->IsInstanceOf(local_egl_context, j_egl10_context_class)) {
|
| + local_eglbase_context = jni->NewObject(
|
| + j_eglbase_context_class, j_eglbase_context_ctor,
|
| + local_egl_context);
|
| + }
|
| + if (remote_egl_context != nullptr &&
|
| + jni->IsInstanceOf(remote_egl_context, j_egl10_context_class)) {
|
| + remote_eglbase_context = jni->NewObject(
|
| + j_eglbase_context_class, j_eglbase_context_ctor,
|
| + remote_egl_context);
|
| + }
|
| +
|
| MediaCodecVideoEncoderFactory* encoder_factory =
|
| static_cast<MediaCodecVideoEncoderFactory*>
|
| (owned_factory->encoder_factory());
|
| if (encoder_factory) {
|
| LOG(LS_INFO) << "Set EGL context for HW encoding.";
|
| - encoder_factory->SetEGLContext(jni, local_egl_context);
|
| + encoder_factory->SetEGLContext(jni, local_eglbase_context);
|
| }
|
|
|
| MediaCodecVideoDecoderFactory* decoder_factory =
|
| @@ -1351,7 +1379,7 @@ JOW(void, PeerConnectionFactory_nativeSetVideoHwAccelerationOptions)(
|
| (owned_factory->decoder_factory());
|
| if (decoder_factory) {
|
| LOG(LS_INFO) << "Set EGL context for HW decoding.";
|
| - decoder_factory->SetEGLContext(jni, remote_egl_context);
|
| + decoder_factory->SetEGLContext(jni, remote_eglbase_context);
|
| }
|
| #endif
|
| }
|
|
|