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:

committed by
WebRTC LUCI CQ

parent
1ee563d5e0
commit
00fd3e352a
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user