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:
committed by
Commit Bot
parent
2a9dbe6e7e
commit
aea1d1ad3f
@ -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());
|
||||
}
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user