Fix a bug where all wrapped codecs were considered software codecs.
This is not the case for fallback codecs. Bug: webrtc:7925 Change-Id: I5039d8879923a2db1e7c08bb5640763dd20ea8e7 Reviewed-on: https://webrtc-review.googlesource.com/24863 Commit-Queue: Sami Kalliomäki <sakal@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20861}
This commit is contained in:

committed by
Commit Bot

parent
1f2a3e7058
commit
6196feb2ed
@ -27,5 +27,10 @@ public class VideoEncoderFallback extends WrappedNativeVideoEncoder {
|
||||
return createNativeEncoder(fallback, primary);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isSoftwareEncoder() {
|
||||
return isWrappedSoftwareEncoder(primary);
|
||||
}
|
||||
|
||||
private static native long createNativeEncoder(VideoEncoder fallback, VideoEncoder primary);
|
||||
}
|
||||
|
@ -12,4 +12,9 @@ package org.webrtc;
|
||||
|
||||
class VP8Encoder extends WrappedNativeVideoEncoder {
|
||||
@Override native long createNativeEncoder();
|
||||
|
||||
@Override
|
||||
boolean isSoftwareEncoder() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -13,5 +13,10 @@ package org.webrtc;
|
||||
class VP9Encoder extends WrappedNativeVideoEncoder {
|
||||
@Override native long createNativeEncoder();
|
||||
|
||||
@Override
|
||||
boolean isSoftwareEncoder() {
|
||||
return true;
|
||||
}
|
||||
|
||||
static native boolean isSupported();
|
||||
}
|
||||
|
@ -16,6 +16,8 @@ package org.webrtc;
|
||||
abstract class WrappedNativeVideoEncoder implements VideoEncoder {
|
||||
@CalledByNative abstract long createNativeEncoder();
|
||||
|
||||
abstract boolean isSoftwareEncoder();
|
||||
|
||||
@Override
|
||||
public VideoCodecStatus initEncode(Settings settings, Callback encodeCallback) {
|
||||
throw new UnsupportedOperationException("Not implemented.");
|
||||
@ -51,6 +53,12 @@ abstract class WrappedNativeVideoEncoder implements VideoEncoder {
|
||||
throw new UnsupportedOperationException("Not implemented.");
|
||||
}
|
||||
|
||||
@CalledByNative
|
||||
static boolean isWrappedSoftwareEncoder(VideoEncoder encoder) {
|
||||
return (encoder instanceof WrappedNativeVideoEncoder)
|
||||
&& ((WrappedNativeVideoEncoder) encoder).isSoftwareEncoder();
|
||||
}
|
||||
|
||||
@CalledByNative
|
||||
static boolean isInstanceOf(VideoEncoder encoder) {
|
||||
return encoder instanceof WrappedNativeVideoEncoder;
|
||||
|
@ -53,13 +53,9 @@ VideoEncoderFactory::CodecInfo VideoEncoderFactoryWrapper::QueryVideoEncoder(
|
||||
jobject encoder = jni->CallObjectMethod(*encoder_factory_,
|
||||
create_encoder_method_, j_codec_info);
|
||||
|
||||
jclass wrapped_native_encoder_class =
|
||||
GetClass(jni, "org/webrtc/WrappedNativeVideoEncoder");
|
||||
|
||||
CodecInfo codec_info;
|
||||
// Check if this is a wrapped native software encoder implementation.
|
||||
codec_info.is_hardware_accelerated =
|
||||
!jni->IsInstanceOf(encoder, wrapped_native_encoder_class);
|
||||
codec_info.is_hardware_accelerated = !IsWrappedSoftwareEncoder(jni, encoder);
|
||||
codec_info.has_internal_source = false;
|
||||
return codec_info;
|
||||
}
|
||||
|
@ -51,5 +51,10 @@ std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(JNIEnv* jni,
|
||||
return std::unique_ptr<VideoEncoder>(encoder);
|
||||
}
|
||||
|
||||
bool IsWrappedSoftwareEncoder(JNIEnv* jni, jobject j_encoder) {
|
||||
return Java_WrappedNativeVideoEncoder_isWrappedSoftwareEncoder(jni,
|
||||
j_encoder);
|
||||
}
|
||||
|
||||
} // namespace jni
|
||||
} // namespace webrtc
|
||||
|
@ -32,6 +32,8 @@ std::unique_ptr<VideoDecoder> JavaToNativeVideoDecoder(JNIEnv* jni,
|
||||
std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(JNIEnv* jni,
|
||||
jobject j_encoder);
|
||||
|
||||
bool IsWrappedSoftwareEncoder(JNIEnv* jni, jobject j_encoder);
|
||||
|
||||
} // namespace jni
|
||||
} // namespace webrtc
|
||||
|
||||
|
Reference in New Issue
Block a user