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}
This commit is contained in:
Sergey Silkin
2021-07-23 18:10:06 +02:00
committed by WebRTC LUCI CQ
parent 1ee563d5e0
commit 00fd3e352a
2 changed files with 22 additions and 20 deletions

View File

@ -38,10 +38,8 @@ VideoEncoderWrapper::VideoEncoderWrapper(JNIEnv* jni,
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 @@ int32_t VideoEncoderWrapper::InitEncodeInternal(JNIEnv* jni) {
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 @@ int32_t VideoEncoderWrapper::InitEncodeInternal(JNIEnv* jni) {
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 @@ ScopedJavaLocalRef<jobject> VideoEncoderWrapper::ToJavaBitrateAllocation(
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 @@ std::unique_ptr<VideoEncoder> JavaToNativeVideoEncoder(
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,

View File

@ -74,10 +74,9 @@ class VideoEncoderWrapper : public VideoEncoder {
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;