diff --git a/sdk/android/api/org/webrtc/VideoEncoderFallback.java b/sdk/android/api/org/webrtc/VideoEncoderFallback.java
index 6ee6351..7894da9 100644
--- a/sdk/android/api/org/webrtc/VideoEncoderFallback.java
+++ b/sdk/android/api/org/webrtc/VideoEncoderFallback.java
@@ -27,5 +27,10 @@
     return createNativeEncoder(fallback, primary);
   }
 
+  @Override
+  boolean isSoftwareEncoder() {
+    return isWrappedSoftwareEncoder(primary);
+  }
+
   private static native long createNativeEncoder(VideoEncoder fallback, VideoEncoder primary);
 }
diff --git a/sdk/android/src/java/org/webrtc/VP8Encoder.java b/sdk/android/src/java/org/webrtc/VP8Encoder.java
index 232e1a8..4157568 100644
--- a/sdk/android/src/java/org/webrtc/VP8Encoder.java
+++ b/sdk/android/src/java/org/webrtc/VP8Encoder.java
@@ -12,4 +12,9 @@
 
 class VP8Encoder extends WrappedNativeVideoEncoder {
   @Override native long createNativeEncoder();
+
+  @Override
+  boolean isSoftwareEncoder() {
+    return true;
+  }
 }
diff --git a/sdk/android/src/java/org/webrtc/VP9Encoder.java b/sdk/android/src/java/org/webrtc/VP9Encoder.java
index 56315c4..7839ab9 100644
--- a/sdk/android/src/java/org/webrtc/VP9Encoder.java
+++ b/sdk/android/src/java/org/webrtc/VP9Encoder.java
@@ -13,5 +13,10 @@
 class VP9Encoder extends WrappedNativeVideoEncoder {
   @Override native long createNativeEncoder();
 
+  @Override
+  boolean isSoftwareEncoder() {
+    return true;
+  }
+
   static native boolean isSupported();
 }
diff --git a/sdk/android/src/java/org/webrtc/WrappedNativeVideoEncoder.java b/sdk/android/src/java/org/webrtc/WrappedNativeVideoEncoder.java
index 287566e..c41b3b0 100644
--- a/sdk/android/src/java/org/webrtc/WrappedNativeVideoEncoder.java
+++ b/sdk/android/src/java/org/webrtc/WrappedNativeVideoEncoder.java
@@ -16,6 +16,8 @@
 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.");
@@ -52,6 +54,12 @@
   }
 
   @CalledByNative
+  static boolean isWrappedSoftwareEncoder(VideoEncoder encoder) {
+    return (encoder instanceof WrappedNativeVideoEncoder)
+        && ((WrappedNativeVideoEncoder) encoder).isSoftwareEncoder();
+  }
+
+  @CalledByNative
   static boolean isInstanceOf(VideoEncoder encoder) {
     return encoder instanceof WrappedNativeVideoEncoder;
   }
diff --git a/sdk/android/src/jni/videoencoderfactorywrapper.cc b/sdk/android/src/jni/videoencoderfactorywrapper.cc
index 784b67d..2550313 100644
--- a/sdk/android/src/jni/videoencoderfactorywrapper.cc
+++ b/sdk/android/src/jni/videoencoderfactorywrapper.cc
@@ -53,13 +53,9 @@
   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;
 }
diff --git a/sdk/android/src/jni/wrappednativecodec.cc b/sdk/android/src/jni/wrappednativecodec.cc
index e5eb636..27a8977 100644
--- a/sdk/android/src/jni/wrappednativecodec.cc
+++ b/sdk/android/src/jni/wrappednativecodec.cc
@@ -51,5 +51,10 @@
   return std::unique_ptr<VideoEncoder>(encoder);
 }
 
+bool IsWrappedSoftwareEncoder(JNIEnv* jni, jobject j_encoder) {
+  return Java_WrappedNativeVideoEncoder_isWrappedSoftwareEncoder(jni,
+                                                                 j_encoder);
+}
+
 }  // namespace jni
 }  // namespace webrtc
diff --git a/sdk/android/src/jni/wrappednativecodec.h b/sdk/android/src/jni/wrappednativecodec.h
index c8de473..0494296 100644
--- a/sdk/android/src/jni/wrappednativecodec.h
+++ b/sdk/android/src/jni/wrappednativecodec.h
@@ -32,6 +32,8 @@
 std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(JNIEnv* jni,
                                                        jobject j_encoder);
 
+bool IsWrappedSoftwareEncoder(JNIEnv* jni, jobject j_encoder);
+
 }  // namespace jni
 }  // namespace webrtc
 
