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 |