Inform VideoEncoder of negotiated capabilities
After this CL lands, an announcement will be made to discuss-webrtc about the deprecation of one version of InitEncode(). Bug: webrtc:10720 Change-Id: Ib992af0272bbb16ae16ef7e69491f365702d179e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/140884 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Elad Alon <eladalon@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28224}
This commit is contained in:
@ -99,6 +99,8 @@ class MediaCodecVideoEncoder : public VideoEncoder {
|
||||
int32_t InitEncode(const VideoCodec* codec_settings,
|
||||
int32_t /* number_of_cores */,
|
||||
size_t /* max_payload_size */) override;
|
||||
int32_t InitEncode(const VideoCodec* codec_settings,
|
||||
const Settings& settings) override;
|
||||
int32_t Encode(const VideoFrame& input_image,
|
||||
const std::vector<VideoFrameType>* frame_types) override;
|
||||
int32_t RegisterEncodeCompleteCallback(
|
||||
@ -306,6 +308,12 @@ MediaCodecVideoEncoder::MediaCodecVideoEncoder(JNIEnv* jni,
|
||||
int32_t MediaCodecVideoEncoder::InitEncode(const VideoCodec* codec_settings,
|
||||
int32_t /* number_of_cores */,
|
||||
size_t /* max_payload_size */) {
|
||||
RTC_NOTREACHED();
|
||||
return WEBRTC_VIDEO_CODEC_ERROR;
|
||||
}
|
||||
|
||||
int32_t MediaCodecVideoEncoder::InitEncode(const VideoCodec* codec_settings,
|
||||
const Settings& settings) {
|
||||
RTC_DCHECK_RUN_ON(&encoder_queue_checker_);
|
||||
if (codec_settings == NULL) {
|
||||
ALOGE << "NULL VideoCodec instance";
|
||||
|
||||
@ -41,10 +41,17 @@ VideoEncoderWrapper::~VideoEncoderWrapper() = default;
|
||||
int32_t VideoEncoderWrapper::InitEncode(const VideoCodec* codec_settings,
|
||||
int32_t number_of_cores,
|
||||
size_t max_payload_size) {
|
||||
RTC_NOTREACHED();
|
||||
return WEBRTC_VIDEO_CODEC_ERROR;
|
||||
}
|
||||
|
||||
int VideoEncoderWrapper::InitEncode(const VideoCodec* codec_settings,
|
||||
const Settings& settings) {
|
||||
JNIEnv* jni = AttachCurrentThreadIfNeeded();
|
||||
|
||||
number_of_cores_ = number_of_cores;
|
||||
codec_settings_ = *codec_settings;
|
||||
capabilities_ = settings.capabilities;
|
||||
number_of_cores_ = settings.number_of_cores;
|
||||
num_resets_ = 0;
|
||||
{
|
||||
rtc::CritScope lock(&encoder_queue_crit_);
|
||||
@ -69,12 +76,16 @@ int32_t VideoEncoderWrapper::InitEncodeInternal(JNIEnv* jni) {
|
||||
automatic_resize_on = true;
|
||||
}
|
||||
|
||||
RTC_DCHECK(capabilities_);
|
||||
ScopedJavaLocalRef<jobject> capabilities =
|
||||
Java_Capabilities_Constructor(jni, capabilities_->loss_notification);
|
||||
|
||||
ScopedJavaLocalRef<jobject> settings = Java_Settings_Constructor(
|
||||
jni, number_of_cores_, codec_settings_.width, codec_settings_.height,
|
||||
static_cast<int>(codec_settings_.startBitrate),
|
||||
static_cast<int>(codec_settings_.maxFramerate),
|
||||
static_cast<int>(codec_settings_.numberOfSimulcastStreams),
|
||||
automatic_resize_on);
|
||||
automatic_resize_on, capabilities);
|
||||
|
||||
ScopedJavaLocalRef<jobject> callback =
|
||||
Java_VideoEncoderWrapper_createEncoderCallback(jni,
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/task_queue/task_queue_base.h"
|
||||
#include "api/video_codecs/video_encoder.h"
|
||||
#include "common_video/h264/h264_bitstream_parser.h"
|
||||
@ -35,6 +36,8 @@ class VideoEncoderWrapper : public VideoEncoder {
|
||||
int32_t InitEncode(const VideoCodec* codec_settings,
|
||||
int32_t number_of_cores,
|
||||
size_t max_payload_size) override;
|
||||
int32_t InitEncode(const VideoCodec* codec_settings,
|
||||
const Settings& settings) override;
|
||||
|
||||
int32_t RegisterEncodeCompleteCallback(
|
||||
EncodedImageCallback* callback) override;
|
||||
@ -95,6 +98,7 @@ class VideoEncoderWrapper : public VideoEncoder {
|
||||
EncodedImageCallback* callback_;
|
||||
bool initialized_;
|
||||
int num_resets_;
|
||||
absl::optional<VideoEncoder::Capabilities> capabilities_;
|
||||
int number_of_cores_;
|
||||
VideoCodec codec_settings_;
|
||||
EncoderInfo encoder_info_;
|
||||
|
||||
Reference in New Issue
Block a user