diff --git a/sdk/android/src/jni/androidmediaencoder.cc b/sdk/android/src/jni/androidmediaencoder.cc index d25b0dbf3b..9072fde5c1 100644 --- a/sdk/android/src/jni/androidmediaencoder.cc +++ b/sdk/android/src/jni/androidmediaencoder.cc @@ -267,6 +267,7 @@ class MediaCodecVideoEncoder : public VideoEncoder { size_t gof_idx_; const bool has_egl_context_; + EncoderInfo encoder_info_; // Temporary fix for VP8. // Sends a key frame if frames are largely spaced apart (possibly @@ -354,6 +355,10 @@ int32_t MediaCodecVideoEncoder::InitEncode(const VideoCodec* codec_settings, ALOGD << "H.264 profile: " << profile_; } + encoder_info_.supports_native_handle = has_egl_context_; + encoder_info_.implementation_name = "MediaCodec"; + encoder_info_.scaling_settings = GetScalingSettingsInternal(); + return InitEncodeInternal( init_width, init_height, codec_settings->startBitrate, codec_settings->maxFramerate, @@ -922,11 +927,7 @@ int32_t MediaCodecVideoEncoder::SetRateAllocation( } VideoEncoder::EncoderInfo MediaCodecVideoEncoder::GetEncoderInfo() const { - EncoderInfo info; - info.supports_native_handle = has_egl_context_; - info.implementation_name = "MediaCodec"; - info.scaling_settings = GetScalingSettingsInternal(); - return info; + return encoder_info_; } bool MediaCodecVideoEncoder::DeliverPendingOutputs(JNIEnv* jni) { diff --git a/sdk/android/src/jni/videoencoderwrapper.cc b/sdk/android/src/jni/videoencoderwrapper.cc index f63785d470..1e4b84eac6 100644 --- a/sdk/android/src/jni/videoencoderwrapper.cc +++ b/sdk/android/src/jni/videoencoderwrapper.cc @@ -32,8 +32,6 @@ namespace jni { VideoEncoderWrapper::VideoEncoderWrapper(JNIEnv* jni, const JavaRef& j_encoder) : encoder_(jni, j_encoder), int_array_class_(GetClass(jni, "[I")) { - implementation_name_ = GetImplementationName(jni); - initialized_ = false; num_resets_ = 0; } @@ -82,6 +80,10 @@ 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); + if (status == WEBRTC_VIDEO_CODEC_OK) { initialized_ = true; } @@ -149,16 +151,11 @@ int32_t VideoEncoderWrapper::SetRateAllocation( } VideoEncoder::EncoderInfo VideoEncoderWrapper::GetEncoderInfo() const { - EncoderInfo info; - info.supports_native_handle = true; - info.implementation_name = implementation_name_; - info.scaling_settings = GetScalingSettingsInternal(); - return info; + return encoder_info_; } VideoEncoderWrapper::ScalingSettings -VideoEncoderWrapper::GetScalingSettingsInternal() const { - JNIEnv* jni = AttachCurrentThreadIfNeeded(); +VideoEncoderWrapper::GetScalingSettingsInternal(JNIEnv* jni) const { ScopedJavaLocalRef j_scaling_settings = Java_VideoEncoder_getScalingSettings(jni, encoder_); bool isOn = diff --git a/sdk/android/src/jni/videoencoderwrapper.h b/sdk/android/src/jni/videoencoderwrapper.h index c35b880c2c..3618f78473 100644 --- a/sdk/android/src/jni/videoencoderwrapper.h +++ b/sdk/android/src/jni/videoencoderwrapper.h @@ -86,13 +86,11 @@ class VideoEncoderWrapper : public VideoEncoder { const VideoBitrateAllocation& allocation); std::string GetImplementationName(JNIEnv* jni) const; - ScalingSettings GetScalingSettingsInternal() const; + ScalingSettings GetScalingSettingsInternal(JNIEnv* jni) const; const ScopedJavaGlobalRef encoder_; const ScopedJavaGlobalRef int_array_class_; - std::string implementation_name_; - rtc::TaskQueue* encoder_queue_; std::deque frame_extra_infos_; EncodedImageCallback* callback_; @@ -100,6 +98,7 @@ class VideoEncoderWrapper : public VideoEncoder { int num_resets_; int number_of_cores_; VideoCodec codec_settings_; + EncoderInfo encoder_info_; H264BitstreamParser h264_bitstream_parser_; // VP9 variables to populate codec specific structure.