Index: content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
diff --git a/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
index 81d812b223d483f8a652dfd13c0a8be9240755de..8a4f46e20cd9272be2eb04ff9e105aba727356f3 100644 |
--- a/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
+++ b/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
@@ -4,10 +4,18 @@ |
#include <algorithm> |
+#include "base/bind.h" |
+#include "base/run_loop.h" |
+#include "content/child/child_process.h" |
#include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h" |
+#include "gpu/command_buffer/common/mailbox_holder.h" |
#include "media/base/video_frame.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+namespace { |
+static void ReleaseMailboxCB(const gpu::SyncToken& sync_token) {} |
+} // anonymous namespace |
+ |
namespace content { |
class WebRtcVideoCapturerAdapterTest |
@@ -44,14 +52,43 @@ class WebRtcVideoCapturerAdapterTest |
EXPECT_EQ(natural_height, output_frame_height_); |
} |
+ void TestSourceTextureFrame() { |
+ EXPECT_TRUE(message_loop_.IsCurrent()); |
+ gpu::MailboxHolder holders[media::VideoFrame::kMaxPlanes] = { |
+ gpu::MailboxHolder(gpu::Mailbox::Generate(), gpu::SyncToken(), 5)}; |
+ scoped_refptr<media::VideoFrame> frame = |
+ media::VideoFrame::WrapNativeTextures( |
+ media::PIXEL_FORMAT_ARGB, holders, base::Bind(&ReleaseMailboxCB), |
+ gfx::Size(10, 10), gfx::Rect(10, 10), gfx::Size(10, 10), |
+ base::TimeDelta()); |
+ adapter_.OnFrameCaptured(frame); |
+ rtc::scoped_refptr<webrtc::VideoFrameBuffer> texture_frame = |
+ output_frame_.video_frame_buffer(); |
+ EXPECT_EQ(media::VideoFrame::STORAGE_OPAQUE, |
+ static_cast<media::VideoFrame*>(texture_frame->native_handle()) |
+ ->storage_type()); |
+ |
+ rtc::scoped_refptr<webrtc::VideoFrameBuffer> copied_frame = |
+ texture_frame->NativeToI420Buffer(); |
+ EXPECT_TRUE(copied_frame); |
+ EXPECT_TRUE(copied_frame->DataY()); |
+ EXPECT_TRUE(copied_frame->DataU()); |
+ EXPECT_TRUE(copied_frame->DataV()); |
+ } |
+ |
// rtc::VideoSinkInterface |
void OnFrame(const cricket::VideoFrame& frame) override { |
+ output_frame_ = frame; |
output_frame_width_ = frame.width(); |
output_frame_height_ = frame.height(); |
} |
private: |
+ const base::MessageLoopForIO message_loop_; |
+ const ChildProcess child_process_; |
+ |
WebRtcVideoCapturerAdapter adapter_; |
+ cricket::VideoFrame output_frame_; |
int output_frame_width_; |
int output_frame_height_; |
}; |
@@ -68,4 +105,8 @@ TEST_F(WebRtcVideoCapturerAdapterTest, Scale720To640360) { |
TestSourceCropFrame(1280, 720, 1280, 720, 640, 360); |
} |
+TEST_F(WebRtcVideoCapturerAdapterTest, SendsWithCopyTextureFrameCallback) { |
+ TestSourceTextureFrame(); |
+} |
+ |
} // namespace content |