| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 const int kSizeY = 400; | 144 const int kSizeY = 400; |
| 145 const int kSizeU = 100; | 145 const int kSizeU = 100; |
| 146 const int kSizeV = 100; | 146 const int kSizeV = 100; |
| 147 const VideoRotation kRotation = kVideoRotation_270; | 147 const VideoRotation kRotation = kVideoRotation_270; |
| 148 uint8_t buffer_y[kSizeY]; | 148 uint8_t buffer_y[kSizeY]; |
| 149 uint8_t buffer_u[kSizeU]; | 149 uint8_t buffer_u[kSizeU]; |
| 150 uint8_t buffer_v[kSizeV]; | 150 uint8_t buffer_v[kSizeV]; |
| 151 memset(buffer_y, 16, kSizeY); | 151 memset(buffer_y, 16, kSizeY); |
| 152 memset(buffer_u, 8, kSizeU); | 152 memset(buffer_u, 8, kSizeU); |
| 153 memset(buffer_v, 4, kSizeV); | 153 memset(buffer_v, 4, kSizeV); |
| 154 VideoFrame frame1; | 154 VideoFrame frame1( |
| 155 frame1.CreateFrame(buffer_y, buffer_u, buffer_v, width, height, | 155 I420Buffer::Copy(new rtc::RefCountedObject<webrtc::WrappedI420Buffer>( |
| 156 stride_y, stride_u, stride_v, kRotation); | 156 width, height, |
| 157 buffer_y, stride_y, |
| 158 buffer_u, stride_u, |
| 159 buffer_v, stride_v, |
| 160 rtc::Callback0<void>([](){}))), |
| 161 kRotation, 0); |
| 157 frame1.set_timestamp(timestamp); | 162 frame1.set_timestamp(timestamp); |
| 158 frame1.set_ntp_time_ms(ntp_time_ms); | 163 frame1.set_ntp_time_ms(ntp_time_ms); |
| 159 frame1.set_render_time_ms(render_time_ms); | 164 frame1.set_render_time_ms(render_time_ms); |
| 160 VideoFrame frame2; | 165 VideoFrame frame2(frame1); |
| 161 frame2.ShallowCopy(frame1); | |
| 162 | 166 |
| 163 // To be able to access the buffers, we need const pointers to the frames. | 167 EXPECT_EQ(frame1.video_frame_buffer(), frame2.video_frame_buffer()); |
| 164 const VideoFrame* const_frame1_ptr = &frame1; | 168 EXPECT_EQ(frame1.video_frame_buffer()->DataY(), |
| 165 const VideoFrame* const_frame2_ptr = &frame2; | 169 frame2.video_frame_buffer()->DataY()); |
| 166 | 170 EXPECT_EQ(frame1.video_frame_buffer()->DataU(), |
| 167 EXPECT_TRUE(const_frame1_ptr->video_frame_buffer()->DataY() == | 171 frame2.video_frame_buffer()->DataU()); |
| 168 const_frame2_ptr->video_frame_buffer()->DataY()); | 172 EXPECT_EQ(frame1.video_frame_buffer()->DataV(), |
| 169 EXPECT_TRUE(const_frame1_ptr->video_frame_buffer()->DataU() == | 173 frame2.video_frame_buffer()->DataV()); |
| 170 const_frame2_ptr->video_frame_buffer()->DataU()); | |
| 171 EXPECT_TRUE(const_frame1_ptr->video_frame_buffer()->DataV() == | |
| 172 const_frame2_ptr->video_frame_buffer()->DataV()); | |
| 173 | 174 |
| 174 EXPECT_EQ(frame2.timestamp(), frame1.timestamp()); | 175 EXPECT_EQ(frame2.timestamp(), frame1.timestamp()); |
| 175 EXPECT_EQ(frame2.ntp_time_ms(), frame1.ntp_time_ms()); | 176 EXPECT_EQ(frame2.ntp_time_ms(), frame1.ntp_time_ms()); |
| 176 EXPECT_EQ(frame2.render_time_ms(), frame1.render_time_ms()); | 177 EXPECT_EQ(frame2.render_time_ms(), frame1.render_time_ms()); |
| 177 EXPECT_EQ(frame2.rotation(), frame1.rotation()); | 178 EXPECT_EQ(frame2.rotation(), frame1.rotation()); |
| 178 | 179 |
| 179 frame2.set_timestamp(timestamp + 1); | 180 frame2.set_timestamp(timestamp + 1); |
| 180 frame2.set_ntp_time_ms(ntp_time_ms + 1); | 181 frame2.set_ntp_time_ms(ntp_time_ms + 1); |
| 181 frame2.set_render_time_ms(render_time_ms + 1); | 182 frame2.set_render_time_ms(render_time_ms + 1); |
| 182 frame2.set_rotation(kVideoRotation_90); | 183 frame2.set_rotation(kVideoRotation_90); |
| 183 | 184 |
| 184 EXPECT_NE(frame2.timestamp(), frame1.timestamp()); | 185 EXPECT_NE(frame2.timestamp(), frame1.timestamp()); |
| 185 EXPECT_NE(frame2.ntp_time_ms(), frame1.ntp_time_ms()); | 186 EXPECT_NE(frame2.ntp_time_ms(), frame1.ntp_time_ms()); |
| 186 EXPECT_NE(frame2.render_time_ms(), frame1.render_time_ms()); | 187 EXPECT_NE(frame2.render_time_ms(), frame1.render_time_ms()); |
| 187 EXPECT_NE(frame2.rotation(), frame1.rotation()); | 188 EXPECT_NE(frame2.rotation(), frame1.rotation()); |
| 188 } | 189 } |
| 189 | 190 |
| 190 TEST(TestVideoFrame, CopyBuffer) { | |
| 191 VideoFrame frame1, frame2; | |
| 192 int width = 15; | |
| 193 int height = 15; | |
| 194 int stride_y = 15; | |
| 195 int stride_uv = 10; | |
| 196 const int kSizeY = 225; | |
| 197 const int kSizeUv = 80; | |
| 198 | |
| 199 uint8_t buffer_y[kSizeY]; | |
| 200 uint8_t buffer_u[kSizeUv]; | |
| 201 uint8_t buffer_v[kSizeUv]; | |
| 202 memset(buffer_y, 16, kSizeY); | |
| 203 memset(buffer_u, 8, kSizeUv); | |
| 204 memset(buffer_v, 4, kSizeUv); | |
| 205 frame2.CreateFrame(buffer_y, buffer_u, buffer_v, | |
| 206 width, height, stride_y, stride_uv, stride_uv, | |
| 207 kVideoRotation_0); | |
| 208 // Expect exactly the same pixel data. | |
| 209 EXPECT_TRUE(test::EqualPlane(buffer_y, frame2.video_frame_buffer()->DataY(), | |
| 210 stride_y, 15, 15)); | |
| 211 EXPECT_TRUE(test::EqualPlane(buffer_u, frame2.video_frame_buffer()->DataU(), | |
| 212 stride_uv, 8, 8)); | |
| 213 EXPECT_TRUE(test::EqualPlane(buffer_v, frame2.video_frame_buffer()->DataV(), | |
| 214 stride_uv, 8, 8)); | |
| 215 } | |
| 216 | |
| 217 TEST(TestVideoFrame, TextureInitialValues) { | 191 TEST(TestVideoFrame, TextureInitialValues) { |
| 218 test::FakeNativeHandle* handle = new test::FakeNativeHandle(); | 192 test::FakeNativeHandle* handle = new test::FakeNativeHandle(); |
| 219 VideoFrame frame = test::FakeNativeHandle::CreateFrame( | 193 VideoFrame frame = test::FakeNativeHandle::CreateFrame( |
| 220 handle, 640, 480, 100, 10, webrtc::kVideoRotation_0); | 194 handle, 640, 480, 100, 10, webrtc::kVideoRotation_0); |
| 221 EXPECT_EQ(640, frame.width()); | 195 EXPECT_EQ(640, frame.width()); |
| 222 EXPECT_EQ(480, frame.height()); | 196 EXPECT_EQ(480, frame.height()); |
| 223 EXPECT_EQ(100u, frame.timestamp()); | 197 EXPECT_EQ(100u, frame.timestamp()); |
| 224 EXPECT_EQ(10, frame.render_time_ms()); | 198 EXPECT_EQ(10, frame.render_time_ms()); |
| 225 ASSERT_TRUE(frame.video_frame_buffer() != nullptr); | 199 ASSERT_TRUE(frame.video_frame_buffer() != nullptr); |
| 226 EXPECT_EQ(handle, frame.video_frame_buffer()->native_handle()); | 200 EXPECT_EQ(handle, frame.video_frame_buffer()->native_handle()); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 CheckRotate(640, 480, GetParam(), *rotated_buffer); | 291 CheckRotate(640, 480, GetParam(), *rotated_buffer); |
| 318 } | 292 } |
| 319 | 293 |
| 320 INSTANTIATE_TEST_CASE_P(Rotate, TestI420BufferRotate, | 294 INSTANTIATE_TEST_CASE_P(Rotate, TestI420BufferRotate, |
| 321 ::testing::Values(kVideoRotation_0, | 295 ::testing::Values(kVideoRotation_0, |
| 322 kVideoRotation_90, | 296 kVideoRotation_90, |
| 323 kVideoRotation_180, | 297 kVideoRotation_180, |
| 324 kVideoRotation_270)); | 298 kVideoRotation_270)); |
| 325 | 299 |
| 326 } // namespace webrtc | 300 } // namespace webrtc |
| OLD | NEW |