Fix a crash in PeerConnectionFactory.SetVideoHwAccelerationOptions.

BUG=webrtc:8035

Review-Url: https://codereview.webrtc.org/2992523002
Cr-Commit-Position: refs/heads/master@{#19171}
This commit is contained in:
sakal
2017-07-27 08:23:58 -07:00
committed by Commit Bot
parent 2d4040ed0e
commit 9eb3d19ec0

View File

@ -28,7 +28,7 @@ namespace webrtc_jni {
// used and all applications inject their own codecs. // used and all applications inject their own codecs.
// This is semi broken if someone wants to create multiple peerconnection // This is semi broken if someone wants to create multiple peerconnection
// factories. // factories.
static MediaCodecVideoDecoderFactory* media_codec_decoder_factory; static bool use_media_codec_decoder_factory;
cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory( cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory(
JNIEnv* jni, JNIEnv* jni,
@ -41,12 +41,12 @@ cricket::WebRtcVideoEncoderFactory* CreateVideoEncoderFactory(
cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory( cricket::WebRtcVideoDecoderFactory* CreateVideoDecoderFactory(
JNIEnv* jni, JNIEnv* jni,
jobject j_decoder_factory) { jobject j_decoder_factory) {
if (j_decoder_factory != nullptr) { use_media_codec_decoder_factory = j_decoder_factory == nullptr;
media_codec_decoder_factory = nullptr;
return new VideoDecoderFactoryWrapper(jni, j_decoder_factory); if (use_media_codec_decoder_factory) {
return new MediaCodecVideoDecoderFactory();
} else { } else {
media_codec_decoder_factory = new MediaCodecVideoDecoderFactory(); return new VideoDecoderFactoryWrapper(jni, j_decoder_factory);
return media_codec_decoder_factory;
} }
} }
@ -109,9 +109,12 @@ JOW(void, PeerConnectionFactory_nativeSetVideoHwAccelerationOptions)
encoder_factory->SetEGLContext(jni, local_egl_context); encoder_factory->SetEGLContext(jni, local_egl_context);
} }
if (media_codec_decoder_factory) { MediaCodecVideoDecoderFactory* decoder_factory =
static_cast<MediaCodecVideoDecoderFactory*>(
owned_factory->decoder_factory());
if (use_media_codec_decoder_factory && decoder_factory) {
LOG(LS_INFO) << "Set EGL context for HW decoding."; LOG(LS_INFO) << "Set EGL context for HW decoding.";
media_codec_decoder_factory->SetEGLContext(jni, remote_egl_context); decoder_factory->SetEGLContext(jni, remote_egl_context);
} }
} }