Remove workaround for Android VideoFrame's ToI420() returning wrong type
Bug: webrtc:12602
Change-Id: I466a2751314fcff53051b63d77e4d5298368a095
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227040
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Byoungchan Lee <daniel.l@hpcnt.com>
Cr-Commit-Position: refs/heads/master@{#34574}
diff --git a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc
index 034709a..a814c74 100644
--- a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc
+++ b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc
@@ -588,31 +588,15 @@
VideoFrameBuffer::Type::kI420A) {
rtc::scoped_refptr<I420BufferInterface> converted_buffer(
prepped_input_frame.video_frame_buffer()->ToI420());
- // The buffer should now be a mapped I420 or I420A format, but some buffer
- // implementations incorrectly return the wrong buffer format, such as
- // kNative. As a workaround to this, we perform ToI420() a second time.
- // TODO(https://crbug.com/webrtc/12602): When Android buffers have a correct
- // ToI420() implementaion, remove his workaround.
if (!converted_buffer) {
RTC_LOG(LS_ERROR) << "Failed to convert "
<< VideoFrameBufferTypeToString(
- converted_buffer->type())
+ prepped_input_frame.video_frame_buffer()->type())
<< " image to I420. Can't encode frame.";
return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE;
}
- if (converted_buffer->type() != VideoFrameBuffer::Type::kI420 &&
- converted_buffer->type() != VideoFrameBuffer::Type::kI420A) {
- converted_buffer = converted_buffer->ToI420();
- RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
- converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
- }
- if (!converted_buffer) {
- RTC_LOG(LS_ERROR) << "Failed to convert "
- << VideoFrameBufferTypeToString(
- converted_buffer->type())
- << " image to I420. Can't encode frame.";
- return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE;
- }
+ RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
+ converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
prepped_input_frame = VideoFrame(converted_buffer, frame.timestamp(),
frame.render_time_ms(), frame.rotation());
}
diff --git a/modules/video_coding/codecs/h264/h264_encoder_impl.cc b/modules/video_coding/codecs/h264/h264_encoder_impl.cc
index af03939..879e95b 100644
--- a/modules/video_coding/codecs/h264/h264_encoder_impl.cc
+++ b/modules/video_coding/codecs/h264/h264_encoder_impl.cc
@@ -377,17 +377,15 @@
rtc::scoped_refptr<I420BufferInterface> frame_buffer =
input_frame.video_frame_buffer()->ToI420();
- // The buffer should now be a mapped I420 or I420A format, but some buffer
- // implementations incorrectly return the wrong buffer format, such as
- // kNative. As a workaround to this, we perform ToI420() a second time.
- // TODO(https://crbug.com/webrtc/12602): When Android buffers have a correct
- // ToI420() implementaion, remove his workaround.
- if (frame_buffer->type() != VideoFrameBuffer::Type::kI420 &&
- frame_buffer->type() != VideoFrameBuffer::Type::kI420A) {
- frame_buffer = frame_buffer->ToI420();
- RTC_CHECK(frame_buffer->type() == VideoFrameBuffer::Type::kI420 ||
- frame_buffer->type() == VideoFrameBuffer::Type::kI420A);
+ if (!frame_buffer) {
+ RTC_LOG(LS_ERROR) << "Failed to convert "
+ << VideoFrameBufferTypeToString(
+ input_frame.video_frame_buffer()->type())
+ << " image to I420. Can't encode frame.";
+ return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE;
}
+ RTC_CHECK(frame_buffer->type() == VideoFrameBuffer::Type::kI420 ||
+ frame_buffer->type() == VideoFrameBuffer::Type::kI420A);
bool send_key_frame = false;
for (size_t i = 0; i < configurations_.size(); ++i) {
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
index 51315fc..996dedf 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
@@ -1327,24 +1327,9 @@
<< " image to I420. Can't encode frame.";
return {};
}
- // The buffer should now be a mapped I420 or I420A format, but some buffer
- // implementations incorrectly return the wrong buffer format, such as
- // kNative. As a workaround to this, we perform ToI420() a second time.
- // TODO(https://crbug.com/webrtc/12602): When Android buffers have a correct
- // ToI420() implementaion, remove his workaround.
- if (converted_buffer->type() != VideoFrameBuffer::Type::kI420 &&
- converted_buffer->type() != VideoFrameBuffer::Type::kI420A) {
- converted_buffer = converted_buffer->ToI420();
- if (!converted_buffer) {
- RTC_LOG(LS_ERROR) << "Failed to convert "
- << VideoFrameBufferTypeToString(
- converted_buffer->type())
- << " image to I420. Can't encode frame.";
- return {};
- }
- RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
- converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
- }
+ RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
+ converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
+
// Because |buffer| had to be converted, use |converted_buffer| instead...
buffer = mapped_buffer = converted_buffer;
}
diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc
index 511e6df..da8b019 100644
--- a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc
+++ b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc
@@ -1907,23 +1907,9 @@
<< " image to I420. Can't encode frame.";
return {};
}
- // The buffer should now be a mapped I420 or I420A format, but some buffer
- // implementations incorrectly return the wrong buffer format, such as
- // kNative. As a workaround to this, we perform ToI420() a second time.
- // TODO(https://crbug.com/webrtc/12602): When Android buffers have a correct
- // ToI420() implementaion, remove his workaround.
- if (converted_buffer->type() != VideoFrameBuffer::Type::kI420 &&
- converted_buffer->type() != VideoFrameBuffer::Type::kI420A) {
- converted_buffer = converted_buffer->ToI420();
- if (!converted_buffer) {
- RTC_LOG(LS_ERROR) << "Failed to convert "
- << VideoFrameBufferTypeToString(buffer->type())
- << " image to I420. Can't encode frame.";
- return {};
- }
- RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
- converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
- }
+ RTC_CHECK(converted_buffer->type() == VideoFrameBuffer::Type::kI420 ||
+ converted_buffer->type() == VideoFrameBuffer::Type::kI420A);
+
// Because |buffer| had to be converted, use |converted_buffer| instead.
buffer = mapped_buffer = converted_buffer;
}