diff options
author | wez <wez@chromium.org> | 2014-09-02 21:36:33 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-03 04:39:11 +0000 |
commit | 59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e (patch) | |
tree | f72147ee07209abe17afb82cc3791f6c2dfbcfae /remoting/codec/video_encoder_helper_unittest.cc | |
parent | cda0fd0081a30ddae388d95c297e3902a6c250bf (diff) | |
download | chromium_src-59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e.zip chromium_src-59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e.tar.gz chromium_src-59ed1bb4dcd82cf212e7a9b3c27e3d533e25ad2e.tar.bz2 |
Move common VideoPacket initialization into VideoEncoderHelper.
This avoids duplication of common VideoPacket initialization across
multiple encoders, making addition of new fields (e.g. the recently
added shape field) more robust.
Review URL: https://codereview.chromium.org/530243002
Cr-Commit-Position: refs/heads/master@{#293064}
Diffstat (limited to 'remoting/codec/video_encoder_helper_unittest.cc')
-rw-r--r-- | remoting/codec/video_encoder_helper_unittest.cc | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/remoting/codec/video_encoder_helper_unittest.cc b/remoting/codec/video_encoder_helper_unittest.cc new file mode 100644 index 0000000..e464802 --- /dev/null +++ b/remoting/codec/video_encoder_helper_unittest.cc @@ -0,0 +1,107 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "remoting/codec/video_encoder_helper.h" + +#include "base/memory/scoped_ptr.h" +#include "remoting/proto/video.pb.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" + +using webrtc::BasicDesktopFrame; +using webrtc::DesktopRect; +using webrtc::DesktopRegion; +using webrtc::DesktopSize; +using webrtc::DesktopVector; + +namespace remoting { + +TEST(VideoEncoderHelperTest, PropagatesCommonFields) { + BasicDesktopFrame frame(DesktopSize(32, 32)); + frame.set_dpi(DesktopVector(96, 97)); + frame.set_capture_time_ms(20); + frame.mutable_updated_region()->SetRect(DesktopRect::MakeLTRB(0, 0, 16, 16)); + scoped_ptr<DesktopRegion> shape( + new DesktopRegion(DesktopRect::MakeLTRB(16, 0, 32, 16))); + frame.set_shape(shape.release()); + + VideoEncoderHelper helper; + scoped_ptr<VideoPacket> packet(helper.CreateVideoPacket(frame)); + + ASSERT_TRUE(packet->has_format()); + EXPECT_FALSE(packet->format().has_encoding()); + EXPECT_TRUE(packet->format().has_screen_width()); + EXPECT_TRUE(packet->format().has_screen_height()); + EXPECT_TRUE(packet->format().has_x_dpi()); + EXPECT_TRUE(packet->format().has_y_dpi()); + + EXPECT_TRUE(packet->has_capture_time_ms()); + EXPECT_EQ(1, packet->dirty_rects().size()); + + ASSERT_TRUE(packet->has_use_desktop_shape()); + EXPECT_TRUE(packet->use_desktop_shape()); + + EXPECT_EQ(1, packet->desktop_shape_rects().size()); +} + +TEST(VideoEncoderHelperTest, ZeroDpi) { + BasicDesktopFrame frame(DesktopSize(32, 32)); + // DPI is zero unless explicitly set. + + VideoEncoderHelper helper; + scoped_ptr<VideoPacket> packet(helper.CreateVideoPacket(frame)); + + // Packet should have a format containing the screen dimensions only. + ASSERT_TRUE(packet->has_format()); + EXPECT_TRUE(packet->format().has_screen_width()); + EXPECT_TRUE(packet->format().has_screen_height()); + EXPECT_FALSE(packet->format().has_x_dpi()); + EXPECT_FALSE(packet->format().has_y_dpi()); +} + +TEST(VideoEncoderHelperTest, NoShape) { + BasicDesktopFrame frame(DesktopSize(32, 32)); + + VideoEncoderHelper helper; + scoped_ptr<VideoPacket> packet(helper.CreateVideoPacket(frame)); + + EXPECT_FALSE(packet->use_desktop_shape()); + EXPECT_EQ(0, packet->desktop_shape_rects().size()); +} + +TEST(VideoEncoderHelperTest, NoScreenSizeIfUnchanged) { + BasicDesktopFrame frame(DesktopSize(32, 32)); + // Set DPI so that the packet will have a format, with DPI but no size. + frame.set_dpi(DesktopVector(96, 97)); + + VideoEncoderHelper helper; + scoped_ptr<VideoPacket> packet(helper.CreateVideoPacket(frame)); + packet = helper.CreateVideoPacket(frame); + + ASSERT_TRUE(packet->has_format()); + EXPECT_FALSE(packet->format().has_screen_width()); + EXPECT_FALSE(packet->format().has_screen_height()); + EXPECT_TRUE(packet->format().has_x_dpi()); + EXPECT_TRUE(packet->format().has_y_dpi()); +} + +TEST(VideoEncoderHelperTest, ScreenSizeWhenChanged) { + VideoEncoderHelper helper; + + // Process the same frame twice, so the helper knows the current size, and + // to trigger suppression of the size field due to the size not changing. + BasicDesktopFrame frame1(DesktopSize(32, 32)); + scoped_ptr<VideoPacket> packet(helper.CreateVideoPacket(frame1)); + packet = helper.CreateVideoPacket(frame1); + + // Process a different-sized frame to trigger size to be emitted. + BasicDesktopFrame frame2(DesktopSize(48, 48)); + packet = helper.CreateVideoPacket(frame2); + + ASSERT_TRUE(packet->has_format()); + EXPECT_TRUE(packet->format().has_screen_width()); + EXPECT_TRUE(packet->format().has_screen_height()); +} + +} // namespace remoting |