Android: Fix leaking software video codec instances.

Previously, wrapped native codec instances would leak the native object
if it was never used. This change fixes it by changing getNative method
to createNative.

Also fixes "Video codec hardware acceleration" setting in AppRTCMobile.

Bug: webrtc:7925
Change-Id: I53f6dc1dd5e37dea8d14278423122dede17719c5
Reviewed-on: https://webrtc-review.googlesource.com/24881
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20859}
This commit is contained in:
Sami Kalliomäki
2017-11-23 14:42:21 +01:00
committed by Commit Bot
parent 2a9dbe6e7e
commit aea1d1ad3f
12 changed files with 57 additions and 58 deletions

View File

@ -19,14 +19,14 @@ namespace jni {
JNI_FUNCTION_DECLARATION(jlong,
VP8Encoder_createNativeEncoder,
JNIEnv* jni,
jclass) {
jobject) {
return jlongFromPointer(VP8Encoder::Create().release());
}
JNI_FUNCTION_DECLARATION(jlong,
VP8Decoder_createNativeDecoder,
JNIEnv* jni,
jclass) {
jobject) {
return jlongFromPointer(VP8Decoder::Create().release());
}

View File

@ -19,7 +19,7 @@ namespace jni {
JNI_FUNCTION_DECLARATION(jlong,
VP9Encoder_createNativeEncoder,
JNIEnv* jni,
jclass) {
jobject) {
return jlongFromPointer(VP9Encoder::Create().release());
}
@ -33,7 +33,7 @@ JNI_FUNCTION_DECLARATION(jboolean,
JNI_FUNCTION_DECLARATION(jlong,
VP9Decoder_createNativeDecoder,
JNIEnv* jni,
jclass) {
jobject) {
return jlongFromPointer(VP9Decoder::Create().release());
}

View File

@ -28,7 +28,7 @@ std::unique_ptr<VideoDecoder> JavaToNativeVideoDecoder(JNIEnv* jni,
VideoDecoder* decoder;
if (jni->IsInstanceOf(j_decoder, wrapped_native_decoder_class)) {
jlong native_decoder =
Java_WrappedNativeVideoDecoder_getNativeDecoder(jni, j_decoder);
Java_WrappedNativeVideoDecoder_createNativeDecoder(jni, j_decoder);
decoder = reinterpret_cast<VideoDecoder*>(native_decoder);
} else {
decoder = new VideoDecoderWrapper(jni, j_decoder);
@ -39,13 +39,10 @@ std::unique_ptr<VideoDecoder> JavaToNativeVideoDecoder(JNIEnv* jni,
std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(JNIEnv* jni,
jobject j_encoder) {
jclass wrapped_native_encoder_class =
GetClass(jni, "org/webrtc/WrappedNativeVideoEncoder");
VideoEncoder* encoder;
if (jni->IsInstanceOf(j_encoder, wrapped_native_encoder_class)) {
if (Java_WrappedNativeVideoEncoder_isInstanceOf(jni, j_encoder)) {
jlong native_encoder =
Java_WrappedNativeVideoEncoder_getNativeEncoder(jni, j_encoder);
Java_WrappedNativeVideoEncoder_createNativeEncoder(jni, j_encoder);
encoder = reinterpret_cast<VideoEncoder*>(native_encoder);
} else {
encoder = new VideoEncoderWrapper(jni, j_encoder);