15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/video_frame.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/video_util.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VideoUtilTest : public testing::Test {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VideoUtilTest()
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : height_(0),
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        y_stride_(0),
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        u_stride_(0),
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        v_stride_(0) {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VideoUtilTest() {}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateSourceFrame(int width, int height,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         int y_stride, int u_stride, int v_stride) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_GE(y_stride, width);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_GE(u_stride, width / 2);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_GE(v_stride, width / 2);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    height_ = height;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    y_stride_ = y_stride;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    u_stride_ = u_stride;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    v_stride_ = v_stride;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    y_plane_.reset(new uint8[y_stride * height]);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    u_plane_.reset(new uint8[u_stride * height / 2]);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    v_plane_.reset(new uint8[v_stride * height / 2]);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateDestinationFrame(int width, int height) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gfx::Size size(width, height);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    destination_frame_ =
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        VideoFrame::CreateFrame(VideoFrame::YV12, size, gfx::Rect(size), size,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                base::TimeDelta());
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CopyPlanes() {
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    CopyYPlane(y_plane_.get(), y_stride_, height_, destination_frame_.get());
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    CopyUPlane(
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        u_plane_.get(), u_stride_, height_ / 2, destination_frame_.get());
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    CopyVPlane(
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        v_plane_.get(), v_stride_, height_ / 2, destination_frame_.get());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<uint8[]> y_plane_;
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<uint8[]> u_plane_;
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<uint8[]> v_plane_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int height_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int y_stride_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int u_stride_;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int v_stride_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<VideoFrame> destination_frame_;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VideoUtilTest);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(VideoUtilTest, CopyPlane_Exact) {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateSourceFrame(16, 16, 16, 8, 8);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateDestinationFrame(16, 16);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CopyPlanes();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(VideoUtilTest, CopyPlane_SmallerSource) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateSourceFrame(8, 8, 8, 4, 4);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateDestinationFrame(16, 16);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CopyPlanes();
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(VideoUtilTest, CopyPlane_SmallerDestination) {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateSourceFrame(16, 16, 16, 8, 8);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateDestinationFrame(8, 8);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CopyPlanes();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 src6x4[] = {
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  0,  1,  2,  3,  4,  5,
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  6,  7,  8,  9, 10, 11,
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12, 13, 14, 15, 16, 17,
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18, 19, 20, 21, 22, 23
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Target images, name pattern target_rotation_flipV_flipH.
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_0_n_n = src6x4;
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target6x4_0_n_y[] = {
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  5,  4,  3,  2,  1,  0,
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11, 10,  9,  8,  7,  6,
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17, 16, 15, 14, 13, 12,
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23, 22, 21, 20, 19, 18
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target6x4_0_y_n[] = {
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18, 19, 20, 21, 22, 23,
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12, 13, 14, 15, 16, 17,
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  6,  7,  8,  9, 10, 11,
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  0,  1,  2,  3,  4,  5
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target6x4_0_y_y[] = {
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23, 22, 21, 20, 19, 18,
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17, 16, 15, 14, 13, 12,
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11, 10,  9,  8,  7,  6,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  5,  4,  3,  2,  1,  0
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target6x4_90_n_n[] = {
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 19, 13,  7,  1, 255,
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 20, 14,  8,  2, 255,
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 21, 15,  9,  3, 255,
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 22, 16, 10,  4, 255
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target6x4_90_n_y[] = {
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  1,  7, 13, 19, 255,
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  2,  8, 14, 20, 255,
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  3,  9, 15, 21, 255,
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  4, 10, 16, 22, 255
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target6x4_90_y_n[] = {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 22, 16, 10,  4, 255,
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 21, 15,  9,  3, 255,
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 20, 14,  8,  2, 255,
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 19, 13,  7,  1, 255
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target6x4_90_y_y[] = {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  4, 10, 16, 22, 255,
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  3,  9, 15, 21, 255,
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  2,  8, 14, 20, 255,
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255,  1,  7, 13, 19, 255
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_180_n_n = target6x4_0_y_y;
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_180_n_y = target6x4_0_y_n;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_180_y_n = target6x4_0_n_y;
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_180_y_y = target6x4_0_n_n;
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_270_n_n = target6x4_90_y_y;
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_270_n_y = target6x4_90_y_n;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_270_y_n = target6x4_90_n_y;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target6x4_270_y_y = target6x4_90_n_n;
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 src4x6[] = {
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  0,  1,  2,  3,
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  4,  5,  6,  7,
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  8,  9, 10, 11,
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12, 13, 14, 15,
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16, 17, 18, 19,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20, 21, 22, 23
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_0_n_n = src4x6;
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target4x6_0_n_y[] = {
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  3,  2,  1,  0,
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  7,  6,  5,  4,
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11, 10,  9,  8,
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15, 14, 13, 12,
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19, 18, 17, 16,
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23, 22, 21, 20
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target4x6_0_y_n[] = {
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20, 21, 22, 23,
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16, 17, 18, 19,
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12, 13, 14, 15,
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  8,  9, 10, 11,
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  4,  5,  6,  7,
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  0,  1,  2,  3
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target4x6_0_y_y[] = {
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23, 22, 21, 20,
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19, 18, 17, 16,
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15, 14, 13, 12,
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11, 10,  9,  8,
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  7,  6,  5,  4,
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  3,  2,  1,  0
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target4x6_90_n_n[] = {
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255,
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  16,  12,   8,   4,
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  17,  13,   9,   5,
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  18,  14,  10,   6,
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  19,  15,  11,   7,
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target4x6_90_n_y[] = {
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255,
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   4,   8,  12,  16,
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   5,   9,  13,  17,
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   6,  10,  14,  18,
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   7,  11,  15,  19,
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target4x6_90_y_n[] = {
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255,
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  19,  15,  11,   7,
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  18,  14,  10,   6,
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  17,  13,   9,   5,
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  16,  12,   8,   4,
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8 target4x6_90_y_y[] = {
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255,
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   7,  11,  15,  19,
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   6,  10,  14,  18,
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   5,   9,  13,  17,
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   4,   8,  12,  16,
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255, 255, 255, 255
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_180_n_n = target4x6_0_y_y;
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_180_n_y = target4x6_0_y_n;
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_180_y_n = target4x6_0_n_y;
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_180_y_y = target4x6_0_n_n;
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_270_n_n = target4x6_90_y_y;
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_270_n_y = target4x6_90_y_n;
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_270_y_n = target4x6_90_n_y;
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* target4x6_270_y_y = target4x6_90_n_n;
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct VideoRotationTestData {
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint8* src;
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint8* target;
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int width;
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int height;
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int rotation;
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool flip_vert;
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool flip_horiz;
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const VideoRotationTestData kVideoRotationTestData[] = {
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_0_n_n, 6, 4, 0, false, false },
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_0_n_y, 6, 4, 0, false, true },
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_0_y_n, 6, 4, 0, true, false },
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_0_y_y, 6, 4, 0, true, true },
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_90_n_n, 6, 4, 90, false, false },
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_90_n_y, 6, 4, 90, false, true },
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_90_y_n, 6, 4, 90, true, false },
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_90_y_y, 6, 4, 90, true, true },
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_180_n_n, 6, 4, 180, false, false },
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_180_n_y, 6, 4, 180, false, true },
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_180_y_n, 6, 4, 180, true, false },
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_180_y_y, 6, 4, 180, true, true },
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_270_n_n, 6, 4, 270, false, false },
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_270_n_y, 6, 4, 270, false, true },
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_270_y_n, 6, 4, 270, true, false },
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src6x4, target6x4_270_y_y, 6, 4, 270, true, true },
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_0_n_n, 4, 6, 0, false, false },
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_0_n_y, 4, 6, 0, false, true },
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_0_y_n, 4, 6, 0, true, false },
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_0_y_y, 4, 6, 0, true, true },
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_90_n_n, 4, 6, 90, false, false },
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_90_n_y, 4, 6, 90, false, true },
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_90_y_n, 4, 6, 90, true, false },
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_90_y_y, 4, 6, 90, true, true },
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_180_n_n, 4, 6, 180, false, false },
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_180_n_y, 4, 6, 180, false, true },
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_180_y_n, 4, 6, 180, true, false },
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_180_y_y, 4, 6, 180, true, true },
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_270_n_n, 4, 6, 270, false, false },
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_270_n_y, 4, 6, 270, false, true },
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_270_y_n, 4, 6, 270, true, false },
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  { src4x6, target4x6_270_y_y, 4, 6, 270, true, true }
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VideoUtilRotationTest
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public testing::TestWithParam<VideoRotationTestData> {
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VideoUtilRotationTest() {
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    dest_.reset(new uint8[GetParam().width * GetParam().height]);
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~VideoUtilRotationTest() {}
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint8* dest_plane() { return dest_.get(); }
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<uint8[]> dest_;
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VideoUtilRotationTest);
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(VideoUtilRotationTest, Rotate) {
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int rotation = GetParam().rotation;
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE((rotation >= 0) && (rotation < 360) && (rotation % 90 == 0));
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int size = GetParam().width * GetParam().height;
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint8* dest = dest_plane();
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  memset(dest, 255, size);
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RotatePlaneByPixels(GetParam().src, dest, GetParam().width,
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      GetParam().height, rotation,
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      GetParam().flip_vert, GetParam().flip_horiz);
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(memcmp(dest, GetParam().target, size), 0);
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)INSTANTIATE_TEST_CASE_P(, VideoUtilRotationTest,
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        testing::ValuesIn(kVideoRotationTestData));
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(VideoUtilTest, ComputeLetterboxRegion) {
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Rect(167, 0, 666, 500),
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            ComputeLetterboxRegion(gfx::Rect(0, 0, 1000, 500),
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   gfx::Size(640, 480)));
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Rect(0, 312, 500, 375),
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            ComputeLetterboxRegion(gfx::Rect(0, 0, 500, 1000),
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   gfx::Size(640, 480)));
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Rect(56, 0, 888, 500),
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            ComputeLetterboxRegion(gfx::Rect(0, 0, 1000, 500),
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   gfx::Size(1920, 1080)));
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Rect(0, 12, 100, 75),
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            ComputeLetterboxRegion(gfx::Rect(0, 0, 100, 100),
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   gfx::Size(400, 300)));
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Rect(0, 250000000, 2000000000, 1500000000),
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            ComputeLetterboxRegion(gfx::Rect(0, 0, 2000000000, 2000000000),
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   gfx::Size(40000, 30000)));
3477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(ComputeLetterboxRegion(gfx::Rect(0, 0, 2000000000, 2000000000),
3487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                     gfx::Size(0, 0)).IsEmpty());
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(VideoUtilTest, LetterboxYUV) {
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int width = 40;
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int height = 30;
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size size(width, height);
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<VideoFrame> frame(
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      VideoFrame::CreateFrame(VideoFrame::YV12, size, gfx::Rect(size), size,
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              base::TimeDelta()));
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int left_margin = 0; left_margin <= 10; left_margin += 10) {
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (int right_margin = 0; right_margin <= 10; right_margin += 10) {
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      for (int top_margin = 0; top_margin <= 10; top_margin += 10) {
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        for (int bottom_margin = 0; bottom_margin <= 10; bottom_margin += 10) {
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          gfx::Rect view_area(left_margin, top_margin,
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              width - left_margin - right_margin,
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              height - top_margin - bottom_margin);
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          FillYUV(frame.get(), 0x1, 0x2, 0x3);
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          LetterboxYUV(frame.get(), view_area);
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          for (int x = 0; x < width; x++) {
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            for (int y = 0; y < height; y++) {
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              bool inside = x >= view_area.x() &&
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  x < view_area.x() + view_area.width() &&
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  y >= view_area.y() &&
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  y < view_area.y() + view_area.height();
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              EXPECT_EQ(frame->data(VideoFrame::kYPlane)[
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  y * frame->stride(VideoFrame::kYPlane) + x],
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        inside ? 0x01 : 0x00);
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              EXPECT_EQ(frame->data(VideoFrame::kUPlane)[
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  (y / 2) * frame->stride(VideoFrame::kUPlane) + (x / 2)],
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        inside ? 0x02 : 0x80);
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              EXPECT_EQ(frame->data(VideoFrame::kVPlane)[
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  (y / 2) * frame->stride(VideoFrame::kVPlane) + (x / 2)],
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        inside ? 0x03 : 0x80);
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          }
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace media
392