| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "media/base/video_frame.h" | 6 #include "media/base/video_frame.h" |
| 7 #include "media/base/video_util.h" | 7 #include "media/base/video_util.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace media { | 10 namespace media { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 int y_stride, int u_stride, int v_stride) { | 24 int y_stride, int u_stride, int v_stride) { |
| 25 EXPECT_GE(y_stride, width); | 25 EXPECT_GE(y_stride, width); |
| 26 EXPECT_GE(u_stride, width / 2); | 26 EXPECT_GE(u_stride, width / 2); |
| 27 EXPECT_GE(v_stride, width / 2); | 27 EXPECT_GE(v_stride, width / 2); |
| 28 | 28 |
| 29 height_ = height; | 29 height_ = height; |
| 30 y_stride_ = y_stride; | 30 y_stride_ = y_stride; |
| 31 u_stride_ = u_stride; | 31 u_stride_ = u_stride; |
| 32 v_stride_ = v_stride; | 32 v_stride_ = v_stride; |
| 33 | 33 |
| 34 y_plane_.reset(new uint8[y_stride * height]); | 34 y_plane_.reset(new uint8_t[y_stride * height]); |
| 35 u_plane_.reset(new uint8[u_stride * height / 2]); | 35 u_plane_.reset(new uint8_t[u_stride * height / 2]); |
| 36 v_plane_.reset(new uint8[v_stride * height / 2]); | 36 v_plane_.reset(new uint8_t[v_stride * height / 2]); |
| 37 } | 37 } |
| 38 | 38 |
| 39 void CreateDestinationFrame(int width, int height) { | 39 void CreateDestinationFrame(int width, int height) { |
| 40 gfx::Size size(width, height); | 40 gfx::Size size(width, height); |
| 41 destination_frame_ = VideoFrame::CreateFrame( | 41 destination_frame_ = VideoFrame::CreateFrame( |
| 42 PIXEL_FORMAT_YV12, size, gfx::Rect(size), size, base::TimeDelta()); | 42 PIXEL_FORMAT_YV12, size, gfx::Rect(size), size, base::TimeDelta()); |
| 43 } | 43 } |
| 44 | 44 |
| 45 private: | 45 private: |
| 46 scoped_ptr<uint8[]> y_plane_; | 46 scoped_ptr<uint8_t[]> y_plane_; |
| 47 scoped_ptr<uint8[]> u_plane_; | 47 scoped_ptr<uint8_t[]> u_plane_; |
| 48 scoped_ptr<uint8[]> v_plane_; | 48 scoped_ptr<uint8_t[]> v_plane_; |
| 49 | 49 |
| 50 int height_; | 50 int height_; |
| 51 int y_stride_; | 51 int y_stride_; |
| 52 int u_stride_; | 52 int u_stride_; |
| 53 int v_stride_; | 53 int v_stride_; |
| 54 | 54 |
| 55 scoped_refptr<VideoFrame> destination_frame_; | 55 scoped_refptr<VideoFrame> destination_frame_; |
| 56 | 56 |
| 57 DISALLOW_COPY_AND_ASSIGN(VideoUtilTest); | 57 DISALLOW_COPY_AND_ASSIGN(VideoUtilTest); |
| 58 }; | 58 }; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 81 EXPECT_EQ(gfx::Size(569, 240), GetNaturalSize(visible_size, 16, 9)); | 81 EXPECT_EQ(gfx::Size(569, 240), GetNaturalSize(visible_size, 16, 9)); |
| 82 EXPECT_EQ(gfx::Size(180, 240), GetNaturalSize(visible_size, 9, 16)); | 82 EXPECT_EQ(gfx::Size(180, 240), GetNaturalSize(visible_size, 9, 16)); |
| 83 | 83 |
| 84 // Test some random ratios. | 84 // Test some random ratios. |
| 85 EXPECT_EQ(gfx::Size(495, 240), GetNaturalSize(visible_size, 17, 11)); | 85 EXPECT_EQ(gfx::Size(495, 240), GetNaturalSize(visible_size, 17, 11)); |
| 86 EXPECT_EQ(gfx::Size(207, 240), GetNaturalSize(visible_size, 11, 17)); | 86 EXPECT_EQ(gfx::Size(207, 240), GetNaturalSize(visible_size, 11, 17)); |
| 87 } | 87 } |
| 88 | 88 |
| 89 namespace { | 89 namespace { |
| 90 | 90 |
| 91 uint8 src6x4[] = { | 91 uint8_t src6x4[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, |
| 92 0, 1, 2, 3, 4, 5, | 92 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}; |
| 93 6, 7, 8, 9, 10, 11, | |
| 94 12, 13, 14, 15, 16, 17, | |
| 95 18, 19, 20, 21, 22, 23 | |
| 96 }; | |
| 97 | 93 |
| 98 // Target images, name pattern target_rotation_flipV_flipH. | 94 // Target images, name pattern target_rotation_flipV_flipH. |
| 99 uint8* target6x4_0_n_n = src6x4; | 95 uint8_t* target6x4_0_n_n = src6x4; |
| 100 | 96 |
| 101 uint8 target6x4_0_n_y[] = { | 97 uint8_t target6x4_0_n_y[] = {5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6, |
| 102 5, 4, 3, 2, 1, 0, | 98 17, 16, 15, 14, 13, 12, 23, 22, 21, 20, 19, 18}; |
| 103 11, 10, 9, 8, 7, 6, | |
| 104 17, 16, 15, 14, 13, 12, | |
| 105 23, 22, 21, 20, 19, 18 | |
| 106 }; | |
| 107 | 99 |
| 108 uint8 target6x4_0_y_n[] = { | 100 uint8_t target6x4_0_y_n[] = {18, 19, 20, 21, 22, 23, 12, 13, 14, 15, 16, 17, |
| 109 18, 19, 20, 21, 22, 23, | 101 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5}; |
| 110 12, 13, 14, 15, 16, 17, | |
| 111 6, 7, 8, 9, 10, 11, | |
| 112 0, 1, 2, 3, 4, 5 | |
| 113 }; | |
| 114 | 102 |
| 115 uint8 target6x4_0_y_y[] = { | 103 uint8_t target6x4_0_y_y[] = {23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, |
| 116 23, 22, 21, 20, 19, 18, | 104 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; |
| 117 17, 16, 15, 14, 13, 12, | |
| 118 11, 10, 9, 8, 7, 6, | |
| 119 5, 4, 3, 2, 1, 0 | |
| 120 }; | |
| 121 | 105 |
| 122 uint8 target6x4_90_n_n[] = { | 106 uint8_t target6x4_90_n_n[] = {255, 19, 13, 7, 1, 255, 255, 20, 14, 8, 2, 255, |
| 123 255, 19, 13, 7, 1, 255, | 107 255, 21, 15, 9, 3, 255, 255, 22, 16, 10, 4, 255}; |
| 124 255, 20, 14, 8, 2, 255, | |
| 125 255, 21, 15, 9, 3, 255, | |
| 126 255, 22, 16, 10, 4, 255 | |
| 127 }; | |
| 128 | 108 |
| 129 uint8 target6x4_90_n_y[] = { | 109 uint8_t target6x4_90_n_y[] = {255, 1, 7, 13, 19, 255, 255, 2, 8, 14, 20, 255, |
| 130 255, 1, 7, 13, 19, 255, | 110 255, 3, 9, 15, 21, 255, 255, 4, 10, 16, 22, 255}; |
| 131 255, 2, 8, 14, 20, 255, | |
| 132 255, 3, 9, 15, 21, 255, | |
| 133 255, 4, 10, 16, 22, 255 | |
| 134 }; | |
| 135 | 111 |
| 136 uint8 target6x4_90_y_n[] = { | 112 uint8_t target6x4_90_y_n[] = {255, 22, 16, 10, 4, 255, 255, 21, 15, 9, 3, 255, |
| 137 255, 22, 16, 10, 4, 255, | 113 255, 20, 14, 8, 2, 255, 255, 19, 13, 7, 1, 255}; |
| 138 255, 21, 15, 9, 3, 255, | |
| 139 255, 20, 14, 8, 2, 255, | |
| 140 255, 19, 13, 7, 1, 255 | |
| 141 }; | |
| 142 | 114 |
| 143 uint8 target6x4_90_y_y[] = { | 115 uint8_t target6x4_90_y_y[] = {255, 4, 10, 16, 22, 255, 255, 3, 9, 15, 21, 255, |
| 144 255, 4, 10, 16, 22, 255, | 116 255, 2, 8, 14, 20, 255, 255, 1, 7, 13, 19, 255}; |
| 145 255, 3, 9, 15, 21, 255, | |
| 146 255, 2, 8, 14, 20, 255, | |
| 147 255, 1, 7, 13, 19, 255 | |
| 148 }; | |
| 149 | 117 |
| 150 uint8* target6x4_180_n_n = target6x4_0_y_y; | 118 uint8_t* target6x4_180_n_n = target6x4_0_y_y; |
| 151 uint8* target6x4_180_n_y = target6x4_0_y_n; | 119 uint8_t* target6x4_180_n_y = target6x4_0_y_n; |
| 152 uint8* target6x4_180_y_n = target6x4_0_n_y; | 120 uint8_t* target6x4_180_y_n = target6x4_0_n_y; |
| 153 uint8* target6x4_180_y_y = target6x4_0_n_n; | 121 uint8_t* target6x4_180_y_y = target6x4_0_n_n; |
| 154 | 122 |
| 155 uint8* target6x4_270_n_n = target6x4_90_y_y; | 123 uint8_t* target6x4_270_n_n = target6x4_90_y_y; |
| 156 uint8* target6x4_270_n_y = target6x4_90_y_n; | 124 uint8_t* target6x4_270_n_y = target6x4_90_y_n; |
| 157 uint8* target6x4_270_y_n = target6x4_90_n_y; | 125 uint8_t* target6x4_270_y_n = target6x4_90_n_y; |
| 158 uint8* target6x4_270_y_y = target6x4_90_n_n; | 126 uint8_t* target6x4_270_y_y = target6x4_90_n_n; |
| 159 | 127 |
| 160 uint8 src4x6[] = { | 128 uint8_t src4x6[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, |
| 161 0, 1, 2, 3, | 129 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}; |
| 162 4, 5, 6, 7, | |
| 163 8, 9, 10, 11, | |
| 164 12, 13, 14, 15, | |
| 165 16, 17, 18, 19, | |
| 166 20, 21, 22, 23 | |
| 167 }; | |
| 168 | 130 |
| 169 uint8* target4x6_0_n_n = src4x6; | 131 uint8_t* target4x6_0_n_n = src4x6; |
| 170 | 132 |
| 171 uint8 target4x6_0_n_y[] = { | 133 uint8_t target4x6_0_n_y[] = {3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, |
| 172 3, 2, 1, 0, | 134 15, 14, 13, 12, 19, 18, 17, 16, 23, 22, 21, 20}; |
| 173 7, 6, 5, 4, | |
| 174 11, 10, 9, 8, | |
| 175 15, 14, 13, 12, | |
| 176 19, 18, 17, 16, | |
| 177 23, 22, 21, 20 | |
| 178 }; | |
| 179 | 135 |
| 180 uint8 target4x6_0_y_n[] = { | 136 uint8_t target4x6_0_y_n[] = {20, 21, 22, 23, 16, 17, 18, 19, 12, 13, 14, 15, |
| 181 20, 21, 22, 23, | 137 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3}; |
| 182 16, 17, 18, 19, | |
| 183 12, 13, 14, 15, | |
| 184 8, 9, 10, 11, | |
| 185 4, 5, 6, 7, | |
| 186 0, 1, 2, 3 | |
| 187 }; | |
| 188 | 138 |
| 189 uint8 target4x6_0_y_y[] = { | 139 uint8_t target4x6_0_y_y[] = {23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, |
| 190 23, 22, 21, 20, | 140 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; |
| 191 19, 18, 17, 16, | |
| 192 15, 14, 13, 12, | |
| 193 11, 10, 9, 8, | |
| 194 7, 6, 5, 4, | |
| 195 3, 2, 1, 0 | |
| 196 }; | |
| 197 | 141 |
| 198 uint8 target4x6_90_n_n[] = { | 142 uint8_t target4x6_90_n_n[] = {255, 255, 255, 255, 16, 12, 8, 4, |
| 199 255, 255, 255, 255, | 143 17, 13, 9, 5, 18, 14, 10, 6, |
| 200 16, 12, 8, 4, | 144 19, 15, 11, 7, 255, 255, 255, 255}; |
| 201 17, 13, 9, 5, | |
| 202 18, 14, 10, 6, | |
| 203 19, 15, 11, 7, | |
| 204 255, 255, 255, 255 | |
| 205 }; | |
| 206 | 145 |
| 207 uint8 target4x6_90_n_y[] = { | 146 uint8_t target4x6_90_n_y[] = {255, 255, 255, 255, 4, 8, 12, 16, |
| 208 255, 255, 255, 255, | 147 5, 9, 13, 17, 6, 10, 14, 18, |
| 209 4, 8, 12, 16, | 148 7, 11, 15, 19, 255, 255, 255, 255}; |
| 210 5, 9, 13, 17, | |
| 211 6, 10, 14, 18, | |
| 212 7, 11, 15, 19, | |
| 213 255, 255, 255, 255 | |
| 214 }; | |
| 215 | 149 |
| 216 uint8 target4x6_90_y_n[] = { | 150 uint8_t target4x6_90_y_n[] = {255, 255, 255, 255, 19, 15, 11, 7, |
| 217 255, 255, 255, 255, | 151 18, 14, 10, 6, 17, 13, 9, 5, |
| 218 19, 15, 11, 7, | 152 16, 12, 8, 4, 255, 255, 255, 255}; |
| 219 18, 14, 10, 6, | |
| 220 17, 13, 9, 5, | |
| 221 16, 12, 8, 4, | |
| 222 255, 255, 255, 255 | |
| 223 }; | |
| 224 | 153 |
| 225 uint8 target4x6_90_y_y[] = { | 154 uint8_t target4x6_90_y_y[] = {255, 255, 255, 255, 7, 11, 15, 19, |
| 226 255, 255, 255, 255, | 155 6, 10, 14, 18, 5, 9, 13, 17, |
| 227 7, 11, 15, 19, | 156 4, 8, 12, 16, 255, 255, 255, 255}; |
| 228 6, 10, 14, 18, | |
| 229 5, 9, 13, 17, | |
| 230 4, 8, 12, 16, | |
| 231 255, 255, 255, 255 | |
| 232 }; | |
| 233 | 157 |
| 234 uint8* target4x6_180_n_n = target4x6_0_y_y; | 158 uint8_t* target4x6_180_n_n = target4x6_0_y_y; |
| 235 uint8* target4x6_180_n_y = target4x6_0_y_n; | 159 uint8_t* target4x6_180_n_y = target4x6_0_y_n; |
| 236 uint8* target4x6_180_y_n = target4x6_0_n_y; | 160 uint8_t* target4x6_180_y_n = target4x6_0_n_y; |
| 237 uint8* target4x6_180_y_y = target4x6_0_n_n; | 161 uint8_t* target4x6_180_y_y = target4x6_0_n_n; |
| 238 | 162 |
| 239 uint8* target4x6_270_n_n = target4x6_90_y_y; | 163 uint8_t* target4x6_270_n_n = target4x6_90_y_y; |
| 240 uint8* target4x6_270_n_y = target4x6_90_y_n; | 164 uint8_t* target4x6_270_n_y = target4x6_90_y_n; |
| 241 uint8* target4x6_270_y_n = target4x6_90_n_y; | 165 uint8_t* target4x6_270_y_n = target4x6_90_n_y; |
| 242 uint8* target4x6_270_y_y = target4x6_90_n_n; | 166 uint8_t* target4x6_270_y_y = target4x6_90_n_n; |
| 243 | 167 |
| 244 struct VideoRotationTestData { | 168 struct VideoRotationTestData { |
| 245 uint8* src; | 169 uint8_t* src; |
| 246 uint8* target; | 170 uint8_t* target; |
| 247 int width; | 171 int width; |
| 248 int height; | 172 int height; |
| 249 int rotation; | 173 int rotation; |
| 250 bool flip_vert; | 174 bool flip_vert; |
| 251 bool flip_horiz; | 175 bool flip_horiz; |
| 252 }; | 176 }; |
| 253 | 177 |
| 254 const VideoRotationTestData kVideoRotationTestData[] = { | 178 const VideoRotationTestData kVideoRotationTestData[] = { |
| 255 { src6x4, target6x4_0_n_n, 6, 4, 0, false, false }, | 179 { src6x4, target6x4_0_n_n, 6, 4, 0, false, false }, |
| 256 { src6x4, target6x4_0_n_y, 6, 4, 0, false, true }, | 180 { src6x4, target6x4_0_n_y, 6, 4, 0, false, true }, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 { src4x6, target4x6_270_y_n, 4, 6, 270, true, false }, | 216 { src4x6, target4x6_270_y_n, 4, 6, 270, true, false }, |
| 293 { src4x6, target4x6_270_y_y, 4, 6, 270, true, true } | 217 { src4x6, target4x6_270_y_y, 4, 6, 270, true, true } |
| 294 }; | 218 }; |
| 295 | 219 |
| 296 } // namespace | 220 } // namespace |
| 297 | 221 |
| 298 class VideoUtilRotationTest | 222 class VideoUtilRotationTest |
| 299 : public testing::TestWithParam<VideoRotationTestData> { | 223 : public testing::TestWithParam<VideoRotationTestData> { |
| 300 public: | 224 public: |
| 301 VideoUtilRotationTest() { | 225 VideoUtilRotationTest() { |
| 302 dest_.reset(new uint8[GetParam().width * GetParam().height]); | 226 dest_.reset(new uint8_t[GetParam().width * GetParam().height]); |
| 303 } | 227 } |
| 304 | 228 |
| 305 virtual ~VideoUtilRotationTest() {} | 229 virtual ~VideoUtilRotationTest() {} |
| 306 | 230 |
| 307 uint8* dest_plane() { return dest_.get(); } | 231 uint8_t* dest_plane() { return dest_.get(); } |
| 308 | 232 |
| 309 private: | 233 private: |
| 310 scoped_ptr<uint8[]> dest_; | 234 scoped_ptr<uint8_t[]> dest_; |
| 311 | 235 |
| 312 DISALLOW_COPY_AND_ASSIGN(VideoUtilRotationTest); | 236 DISALLOW_COPY_AND_ASSIGN(VideoUtilRotationTest); |
| 313 }; | 237 }; |
| 314 | 238 |
| 315 TEST_P(VideoUtilRotationTest, Rotate) { | 239 TEST_P(VideoUtilRotationTest, Rotate) { |
| 316 int rotation = GetParam().rotation; | 240 int rotation = GetParam().rotation; |
| 317 EXPECT_TRUE((rotation >= 0) && (rotation < 360) && (rotation % 90 == 0)); | 241 EXPECT_TRUE((rotation >= 0) && (rotation < 360) && (rotation % 90 == 0)); |
| 318 | 242 |
| 319 int size = GetParam().width * GetParam().height; | 243 int size = GetParam().width * GetParam().height; |
| 320 uint8* dest = dest_plane(); | 244 uint8_t* dest = dest_plane(); |
| 321 memset(dest, 255, size); | 245 memset(dest, 255, size); |
| 322 | 246 |
| 323 RotatePlaneByPixels(GetParam().src, dest, GetParam().width, | 247 RotatePlaneByPixels(GetParam().src, dest, GetParam().width, |
| 324 GetParam().height, rotation, | 248 GetParam().height, rotation, |
| 325 GetParam().flip_vert, GetParam().flip_horiz); | 249 GetParam().flip_vert, GetParam().flip_horiz); |
| 326 | 250 |
| 327 EXPECT_EQ(memcmp(dest, GetParam().target, size), 0); | 251 EXPECT_EQ(memcmp(dest, GetParam().target, size), 0); |
| 328 } | 252 } |
| 329 | 253 |
| 330 INSTANTIATE_TEST_CASE_P(, VideoUtilRotationTest, | 254 INSTANTIATE_TEST_CASE_P(, VideoUtilRotationTest, |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 inside ? 0x03 : 0x80); | 351 inside ? 0x03 : 0x80); |
| 428 } | 352 } |
| 429 } | 353 } |
| 430 } | 354 } |
| 431 } | 355 } |
| 432 } | 356 } |
| 433 } | 357 } |
| 434 } | 358 } |
| 435 | 359 |
| 436 } // namespace media | 360 } // namespace media |
| OLD | NEW |