Use VideoFrameBuffer::Scale in encoder wrappers
This sincludes the SimulcastEncoderAdapter and the VideoEncoderSoftwareFallbackWrapper. This avoids converting the frame when that is not needed. Bug: webrtc:11976 Change-Id: I686725ecfb79c3b8d87d587a907da1602483bfe8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187343 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Evan Shrubsole <eshr@google.com> Cr-Commit-Position: refs/heads/master@{#32389}
This commit is contained in:

committed by
Commit Bot

parent
84524e6b19
commit
5089a8ea14
@ -367,9 +367,12 @@ int32_t VideoEncoderSoftwareFallbackWrapper::EncodeWithMainEncoder(
|
|||||||
RTC_LOG(LS_ERROR) << "Failed to convert from to I420";
|
RTC_LOG(LS_ERROR) << "Failed to convert from to I420";
|
||||||
return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE;
|
return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE;
|
||||||
}
|
}
|
||||||
rtc::scoped_refptr<I420Buffer> dst_buffer =
|
rtc::scoped_refptr<VideoFrameBuffer> dst_buffer =
|
||||||
I420Buffer::Create(codec_settings_.width, codec_settings_.height);
|
src_buffer->Scale(codec_settings_.width, codec_settings_.height);
|
||||||
dst_buffer->ScaleFrom(*src_buffer);
|
if (!dst_buffer) {
|
||||||
|
RTC_LOG(LS_ERROR) << "Failed to scale video frame.";
|
||||||
|
return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE;
|
||||||
|
}
|
||||||
VideoFrame scaled_frame = frame;
|
VideoFrame scaled_frame = frame;
|
||||||
scaled_frame.set_video_frame_buffer(dst_buffer);
|
scaled_frame.set_video_frame_buffer(dst_buffer);
|
||||||
scaled_frame.set_update_rect(VideoFrame::UpdateRect{
|
scaled_frame.set_update_rect(VideoFrame::UpdateRect{
|
||||||
|
@ -377,7 +377,7 @@ int SimulcastEncoderAdapter::Encode(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Temporary thay may hold the result of texture to i420 buffer conversion.
|
// Temporary thay may hold the result of texture to i420 buffer conversion.
|
||||||
rtc::scoped_refptr<I420BufferInterface> src_buffer;
|
rtc::scoped_refptr<VideoFrameBuffer> src_buffer;
|
||||||
int src_width = input_image.width();
|
int src_width = input_image.width();
|
||||||
int src_height = input_image.height();
|
int src_height = input_image.height();
|
||||||
for (size_t stream_idx = 0; stream_idx < streaminfos_.size(); ++stream_idx) {
|
for (size_t stream_idx = 0; stream_idx < streaminfos_.size(); ++stream_idx) {
|
||||||
@ -433,12 +433,14 @@ int SimulcastEncoderAdapter::Encode(
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (src_buffer == nullptr) {
|
if (src_buffer == nullptr) {
|
||||||
src_buffer = input_image.video_frame_buffer()->ToI420();
|
src_buffer = input_image.video_frame_buffer();
|
||||||
|
}
|
||||||
|
rtc::scoped_refptr<VideoFrameBuffer> dst_buffer =
|
||||||
|
src_buffer->Scale(dst_width, dst_height);
|
||||||
|
if (!dst_buffer) {
|
||||||
|
RTC_LOG(LS_ERROR) << "Failed to scale video frame";
|
||||||
|
return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE;
|
||||||
}
|
}
|
||||||
rtc::scoped_refptr<I420Buffer> dst_buffer =
|
|
||||||
I420Buffer::Create(dst_width, dst_height);
|
|
||||||
|
|
||||||
dst_buffer->ScaleFrom(*src_buffer);
|
|
||||||
|
|
||||||
// UpdateRect is not propagated to lower simulcast layers currently.
|
// UpdateRect is not propagated to lower simulcast layers currently.
|
||||||
// TODO(ilnik): Consider scaling UpdateRect together with the buffer.
|
// TODO(ilnik): Consider scaling UpdateRect together with the buffer.
|
||||||
|
Reference in New Issue
Block a user