Fetch and update encoder info in ctor

This allows to get encoder implementation name and other properties
without the need of initializing encoder.

Bug: none
Change-Id: I263a358d562a65a31c420ddb7c4b195316fa5ec8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226867
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Mirta Dvornicic <mirtad@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34559}
diff --git a/sdk/android/src/jni/video_encoder_wrapper.cc b/sdk/android/src/jni/video_encoder_wrapper.cc
index fe75087..d292a85 100644
--- a/sdk/android/src/jni/video_encoder_wrapper.cc
+++ b/sdk/android/src/jni/video_encoder_wrapper.cc
@@ -38,10 +38,8 @@
   initialized_ = false;
   num_resets_ = 0;
 
-  // Get bitrate limits in the constructor. This is a static property of the
-  // encoder and is expected to be available before it is initialized.
-  encoder_info_.resolution_bitrate_limits = JavaToNativeResolutionBitrateLimits(
-      jni, Java_VideoEncoder_getResolutionBitrateLimits(jni, encoder_));
+  // Fetch and update encoder info.
+  UpdateEncoderInfo(jni);
 }
 VideoEncoderWrapper::~VideoEncoderWrapper() = default;
 
@@ -91,11 +89,9 @@
       jni, Java_VideoEncoder_initEncode(jni, encoder_, settings, callback));
   RTC_LOG(LS_INFO) << "initEncode: " << status;
 
-  encoder_info_.supports_native_handle = true;
-  encoder_info_.implementation_name = GetImplementationName(jni);
-  encoder_info_.scaling_settings = GetScalingSettingsInternal(jni);
-  encoder_info_.is_hardware_accelerated = IsHardwareVideoEncoder(jni, encoder_);
-  encoder_info_.has_internal_source = false;
+  // Some encoder's properties depend on settings and may change after
+  // initialization.
+  UpdateEncoderInfo(jni);
 
   if (status == WEBRTC_VIDEO_CODEC_OK) {
     initialized_ = true;
@@ -103,6 +99,22 @@
   return status;
 }
 
+void VideoEncoderWrapper::UpdateEncoderInfo(JNIEnv* jni) {
+  encoder_info_.supports_native_handle = true;
+  encoder_info_.has_internal_source = false;
+
+  encoder_info_.implementation_name = JavaToStdString(
+      jni, Java_VideoEncoder_getImplementationName(jni, encoder_));
+
+  encoder_info_.is_hardware_accelerated =
+      Java_VideoEncoder_isHardwareEncoder(jni, encoder_);
+
+  encoder_info_.scaling_settings = GetScalingSettingsInternal(jni);
+
+  encoder_info_.resolution_bitrate_limits = JavaToNativeResolutionBitrateLimits(
+      jni, Java_VideoEncoder_getResolutionBitrateLimits(jni, encoder_));
+}
+
 int32_t VideoEncoderWrapper::RegisterEncodeCompleteCallback(
     EncodedImageCallback* callback) {
   callback_ = callback;
@@ -398,11 +410,6 @@
   return Java_BitrateAllocation_Constructor(jni, j_allocation_array);
 }
 
-std::string VideoEncoderWrapper::GetImplementationName(JNIEnv* jni) const {
-  return JavaToStdString(
-      jni, Java_VideoEncoder_getImplementationName(jni, encoder_));
-}
-
 std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(
     JNIEnv* jni,
     const JavaRef<jobject>& j_encoder) {
@@ -417,10 +424,6 @@
   return std::unique_ptr<VideoEncoder>(encoder);
 }
 
-bool IsHardwareVideoEncoder(JNIEnv* jni, const JavaRef<jobject>& j_encoder) {
-  return Java_VideoEncoder_isHardwareEncoder(jni, j_encoder);
-}
-
 std::vector<VideoEncoder::ResolutionBitrateLimits>
 JavaToNativeResolutionBitrateLimits(
     JNIEnv* jni,
diff --git a/sdk/android/src/jni/video_encoder_wrapper.h b/sdk/android/src/jni/video_encoder_wrapper.h
index ae45004..2cd77df 100644
--- a/sdk/android/src/jni/video_encoder_wrapper.h
+++ b/sdk/android/src/jni/video_encoder_wrapper.h
@@ -74,10 +74,9 @@
   ScopedJavaLocalRef<jobject> ToJavaBitrateAllocation(
       JNIEnv* jni,
       const VideoBitrateAllocation& allocation);
-  std::string GetImplementationName(JNIEnv* jni) const;
 
+  void UpdateEncoderInfo(JNIEnv* jni);
   ScalingSettings GetScalingSettingsInternal(JNIEnv* jni) const;
-
   std::vector<ResolutionBitrateLimits> GetResolutionBitrateLimits(
       JNIEnv* jni) const;