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