Update webrtc/media and webrtc/modules to new VideoFrameBuffer interface
TBR=stefan
Bug: webrtc:7632
Change-Id: Ifdaf4a591061595a53f677441baad85820336b34
Reviewed-on: https://chromium-review.googlesource.com/530844
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#18591}
diff --git a/webrtc/media/base/fakevideorenderer.h b/webrtc/media/base/fakevideorenderer.h
index 86fc027..a678c97 100644
--- a/webrtc/media/base/fakevideorenderer.h
+++ b/webrtc/media/base/fakevideorenderer.h
@@ -84,12 +84,14 @@
if (!frame || !frame->video_frame_buffer()) {
return false;
}
+ rtc::scoped_refptr<const webrtc::I420BufferInterface> i420_buffer =
+ frame->video_frame_buffer()->ToI420();
// Y
int y_width = frame->width();
int y_height = frame->height();
- const uint8_t* y_plane = frame->video_frame_buffer()->DataY();
+ const uint8_t* y_plane = i420_buffer->DataY();
const uint8_t* y_pos = y_plane;
- int32_t y_pitch = frame->video_frame_buffer()->StrideY();
+ int32_t y_pitch = i420_buffer->StrideY();
for (int i = 0; i < y_height; ++i) {
for (int j = 0; j < y_width; ++j) {
uint8_t y_value = *(y_pos + j);
@@ -100,14 +102,14 @@
y_pos += y_pitch;
}
// U and V
- int chroma_width = (frame->width() + 1)/2;
- int chroma_height = (frame->height() + 1)/2;
- const uint8_t* u_plane = frame->video_frame_buffer()->DataU();
- const uint8_t* v_plane = frame->video_frame_buffer()->DataV();
+ int chroma_width = i420_buffer->ChromaWidth();
+ int chroma_height = i420_buffer->ChromaHeight();
+ const uint8_t* u_plane = i420_buffer->DataU();
+ const uint8_t* v_plane = i420_buffer->DataV();
const uint8_t* u_pos = u_plane;
const uint8_t* v_pos = v_plane;
- int32_t u_pitch = frame->video_frame_buffer()->StrideU();
- int32_t v_pitch = frame->video_frame_buffer()->StrideV();
+ int32_t u_pitch = i420_buffer->StrideU();
+ int32_t v_pitch = i420_buffer->StrideV();
for (int i = 0; i < chroma_height; ++i) {
for (int j = 0; j < chroma_width; ++j) {
uint8_t u_value = *(u_pos + j);
diff --git a/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc b/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc
index 301533b..8bf3ed4 100644
--- a/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc
+++ b/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc
@@ -122,7 +122,7 @@
int32_t ret = encoder_->Encode(frame, codec_specific_info, frame_types);
// If requested, try a software fallback.
if (ret == WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE && InitFallbackEncoder()) {
- if (frame.video_frame_buffer()->native_handle() &&
+ if (frame.video_frame_buffer()->type() == VideoFrameBuffer::Type::kNative &&
!fallback_encoder_->SupportsNativeHandle()) {
LOG(LS_WARNING) << "Fallback encoder doesn't support native frames, "
<< "dropping one frame.";
diff --git a/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc b/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc
index 0306e7e..ae6e4d9 100644
--- a/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc
+++ b/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc
@@ -125,8 +125,7 @@
};
void VideoEncoderSoftwareFallbackWrapperTest::EncodeFrame() {
- rtc::scoped_refptr<I420Buffer> buffer = I420Buffer::Create(
- kWidth, kHeight, kWidth, (kWidth + 1) / 2, (kWidth + 1) / 2);
+ rtc::scoped_refptr<I420Buffer> buffer = I420Buffer::Create(kWidth, kHeight);
I420Buffer::SetBlack(buffer);
std::vector<FrameType> types(1, kVideoFrameKey);
diff --git a/webrtc/modules/video_capture/test/video_capture_unittest.cc b/webrtc/modules/video_capture/test/video_capture_unittest.cc
index abf5085..5dbcc35 100644
--- a/webrtc/modules/video_capture/test/video_capture_unittest.cc
+++ b/webrtc/modules/video_capture/test/video_capture_unittest.cc
@@ -362,15 +362,14 @@
capability.maxFPS = kTestFramerate;
capture_callback_.SetExpectedCapability(capability);
- rtc::scoped_refptr<webrtc::I420Buffer> buffer = webrtc::I420Buffer::Create(
- kTestWidth, kTestHeight,
- kTestWidth, ((kTestWidth + 1) / 2), (kTestWidth + 1) / 2);
+ rtc::scoped_refptr<webrtc::I420Buffer> buffer =
+ webrtc::I420Buffer::Create(kTestWidth, kTestHeight);
- memset(buffer->MutableDataY(), 127, kTestWidth * kTestHeight);
+ memset(buffer->MutableDataY(), 127, buffer->height() * buffer->StrideY());
memset(buffer->MutableDataU(), 127,
- ((kTestWidth + 1) / 2) * ((kTestHeight + 1) / 2));
+ buffer->ChromaHeight() * buffer->StrideU());
memset(buffer->MutableDataV(), 127,
- ((kTestWidth + 1) / 2) * ((kTestHeight + 1) / 2));
+ buffer->ChromaHeight() * buffer->StrideV());
test_frame_.reset(
new webrtc::VideoFrame(buffer, 0, 0, webrtc::kVideoRotation_0));
diff --git a/webrtc/modules/video_processing/test/denoiser_test.cc b/webrtc/modules/video_processing/test/denoiser_test.cc
index b5e0352..b27e5fc 100644
--- a/webrtc/modules/video_processing/test/denoiser_test.cc
+++ b/webrtc/modules/video_processing/test/denoiser_test.cc
@@ -141,14 +141,14 @@
VideoDenoiser denoiser_sse_neon(true);
for (;;) {
- rtc::scoped_refptr<VideoFrameBuffer> video_frame_buffer(
+ rtc::scoped_refptr<I420BufferInterface> video_frame_buffer(
test::ReadI420Buffer(kWidth, kHeight, source_file));
if (!video_frame_buffer)
break;
- rtc::scoped_refptr<VideoFrameBuffer> denoised_frame_c(
+ rtc::scoped_refptr<I420BufferInterface> denoised_frame_c(
denoiser_c.DenoiseFrame(video_frame_buffer, false));
- rtc::scoped_refptr<VideoFrameBuffer> denoised_frame_sse_neon(
+ rtc::scoped_refptr<I420BufferInterface> denoised_frame_sse_neon(
denoiser_sse_neon.DenoiseFrame(video_frame_buffer, false));
// Denoising results should be the same for C and SSE/NEON denoiser.
diff --git a/webrtc/modules/video_processing/video_denoiser.cc b/webrtc/modules/video_processing/video_denoiser.cc
index 8c645f2..a926bf4 100644
--- a/webrtc/modules/video_processing/video_denoiser.cc
+++ b/webrtc/modules/video_processing/video_denoiser.cc
@@ -72,7 +72,8 @@
filter_(DenoiserFilter::Create(runtime_cpu_detection, &cpu_type_)),
ne_(new NoiseEstimation()) {}
-void VideoDenoiser::DenoiserReset(rtc::scoped_refptr<VideoFrameBuffer> frame) {
+void VideoDenoiser::DenoiserReset(
+ rtc::scoped_refptr<I420BufferInterface> frame) {
width_ = frame->width();
height_ = frame->height();
mb_cols_ = width_ >> 4;
@@ -211,8 +212,8 @@
}
}
-rtc::scoped_refptr<VideoFrameBuffer> VideoDenoiser::DenoiseFrame(
- rtc::scoped_refptr<VideoFrameBuffer> frame,
+rtc::scoped_refptr<I420BufferInterface> VideoDenoiser::DenoiseFrame(
+ rtc::scoped_refptr<I420BufferInterface> frame,
bool noise_estimation_enabled) {
// If previous width and height are different from current frame's, need to
// reallocate the buffers and no denoising for the current frame.
diff --git a/webrtc/modules/video_processing/video_denoiser.h b/webrtc/modules/video_processing/video_denoiser.h
index e67bd59..e8cd22d 100644
--- a/webrtc/modules/video_processing/video_denoiser.h
+++ b/webrtc/modules/video_processing/video_denoiser.h
@@ -24,12 +24,12 @@
public:
explicit VideoDenoiser(bool runtime_cpu_detection);
- rtc::scoped_refptr<VideoFrameBuffer> DenoiseFrame(
- rtc::scoped_refptr<VideoFrameBuffer> frame,
+ rtc::scoped_refptr<I420BufferInterface> DenoiseFrame(
+ rtc::scoped_refptr<I420BufferInterface> frame,
bool noise_estimation_enabled);
private:
- void DenoiserReset(rtc::scoped_refptr<VideoFrameBuffer> frame);
+ void DenoiserReset(rtc::scoped_refptr<I420BufferInterface> frame);
// Check the mb position, return 1: close to the frame center (between 1/8
// and 7/8 of width/height), 3: close to the border (out of 1/16 and 15/16
@@ -76,7 +76,7 @@
// Save the return values by MbDenoise for each block.
std::unique_ptr<DenoiserDecision[]> mb_filter_decision_;
I420BufferPool buffer_pool_;
- rtc::scoped_refptr<VideoFrameBuffer> prev_buffer_;
+ rtc::scoped_refptr<I420BufferInterface> prev_buffer_;
};
} // namespace webrtc