Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Side by Side Diff: media/video/gpu_memory_buffer_video_frame_pool_unittest.cc

Issue 2121043002: 16 bpp video stream capture, render and WebGL usage - Realsense R200 & SR300 support. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stdint.h> 5 #include <stdint.h>
6 #include <memory> 6 #include <memory>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/test/test_simple_task_runner.h" 9 #include "base/test/test_simple_task_runner.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 size.width() / 2, // u_stride 115 size.width() / 2, // u_stride
116 size.width() / 2, // v_stride 116 size.width() / 2, // v_stride
117 y_data, // y_data 117 y_data, // y_data
118 u_data, // u_data 118 u_data, // u_data
119 v_data, // v_data 119 v_data, // v_data
120 base::TimeDelta()); // timestamp 120 base::TimeDelta()); // timestamp
121 EXPECT_TRUE(video_frame); 121 EXPECT_TRUE(video_frame);
122 return video_frame; 122 return video_frame;
123 } 123 }
124 124
125 static scoped_refptr<media::VideoFrame> CreateTestY16VideoFrame(
126 int dimension) {
127 const int kDimension = 10;
128 static uint8_t data[kDimension * kDimension * 2] = {0};
129
130 DCHECK_LE(dimension, kDimension);
131 gfx::Size size(dimension, dimension);
132
133 scoped_refptr<VideoFrame> video_frame =
134 media::VideoFrame::WrapExternalData(media::PIXEL_FORMAT_Y16, // format
135 size, // coded_size
136 gfx::Rect(size), // visible_rect
137 size, // natural_size
138 data, // data
139 sizeof(data), // byte size
140 base::TimeDelta()); // timestamp
141 EXPECT_TRUE(video_frame);
142 return video_frame;
143 }
144
125 protected: 145 protected:
126 std::unique_ptr<MockGpuVideoAcceleratorFactories> mock_gpu_factories_; 146 std::unique_ptr<MockGpuVideoAcceleratorFactories> mock_gpu_factories_;
127 std::unique_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_; 147 std::unique_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_;
128 scoped_refptr<base::TestSimpleTaskRunner> media_task_runner_; 148 scoped_refptr<base::TestSimpleTaskRunner> media_task_runner_;
129 scoped_refptr<base::TestSimpleTaskRunner> copy_task_runner_; 149 scoped_refptr<base::TestSimpleTaskRunner> copy_task_runner_;
130 // GpuMemoryBufferVideoFramePool uses BindToCurrentLoop(), which requires 150 // GpuMemoryBufferVideoFramePool uses BindToCurrentLoop(), which requires
131 // ThreadTaskRunnerHandle initialization. 151 // ThreadTaskRunnerHandle initialization.
132 std::unique_ptr<base::ThreadTaskRunnerHandle> media_task_runner_handle_; 152 std::unique_ptr<base::ThreadTaskRunnerHandle> media_task_runner_handle_;
133 std::unique_ptr<TestGLES2Interface> gles2_; 153 std::unique_ptr<TestGLES2Interface> gles2_;
134 }; 154 };
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( 211 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
192 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); 212 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame));
193 RunUntilIdle(); 213 RunUntilIdle();
194 214
195 EXPECT_NE(software_frame.get(), frame.get()); 215 EXPECT_NE(software_frame.get(), frame.get());
196 EXPECT_EQ(6u, gles2_->gen_textures); 216 EXPECT_EQ(6u, gles2_->gen_textures);
197 EXPECT_EQ(frame->mailbox_holder(0).mailbox, mailbox); 217 EXPECT_EQ(frame->mailbox_holder(0).mailbox, mailbox);
198 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token); 218 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token);
199 } 219 }
200 220
201 TEST_F(GpuMemoryBufferVideoFramePoolTest, DropResourceWhenSizeIsDifferent) { 221 TEST_F(GpuMemoryBufferVideoFramePoolTest,
222 DropResourceWhenSizeOrFormatAreDifferent) {
202 scoped_refptr<VideoFrame> frame; 223 scoped_refptr<VideoFrame> frame;
203 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( 224 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
204 CreateTestYUVVideoFrame(10), 225 CreateTestYUVVideoFrame(10),
205 base::Bind(MaybeCreateHardwareFrameCallback, &frame)); 226 base::Bind(MaybeCreateHardwareFrameCallback, &frame));
206 RunUntilIdle(); 227 RunUntilIdle();
207 228
208 EXPECT_EQ(3u, gles2_->gen_textures); 229 EXPECT_EQ(3u, gles2_->gen_textures);
209 230
210 frame = nullptr; 231 frame = nullptr;
211 RunUntilIdle(); 232 RunUntilIdle();
212 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( 233 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
213 CreateTestYUVVideoFrame(4), 234 CreateTestYUVVideoFrame(4),
214 base::Bind(MaybeCreateHardwareFrameCallback, &frame)); 235 base::Bind(MaybeCreateHardwareFrameCallback, &frame));
215 RunUntilIdle(); 236 RunUntilIdle();
216 EXPECT_EQ(6u, gles2_->gen_textures); 237 EXPECT_EQ(6u, gles2_->gen_textures);
238
239 frame = nullptr;
240 RunUntilIdle();
241 mock_gpu_factories_->SetVideoFrameOutputFormat(
242 media::GpuVideoAcceleratorFactories::OutputFormat::Y16);
243 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
244 CreateTestY16VideoFrame(4),
245 base::Bind(MaybeCreateHardwareFrameCallback, &frame));
246 RunUntilIdle();
247 EXPECT_EQ(7u, gles2_->gen_textures);
217 } 248 }
218 249
219 TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareUYUVFrame) { 250 TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareUYUVFrame) {
220 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); 251 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10);
221 scoped_refptr<VideoFrame> frame; 252 scoped_refptr<VideoFrame> frame;
222 mock_gpu_factories_->SetVideoFrameOutputFormat( 253 mock_gpu_factories_->SetVideoFrameOutputFormat(
223 media::GpuVideoAcceleratorFactories::OutputFormat::UYVY); 254 media::GpuVideoAcceleratorFactories::OutputFormat::UYVY);
224 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( 255 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
225 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); 256 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame));
226 257
(...skipping 30 matching lines...) Expand all
257 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); 288 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame));
258 289
259 RunUntilIdle(); 290 RunUntilIdle();
260 291
261 EXPECT_NE(software_frame.get(), frame.get()); 292 EXPECT_NE(software_frame.get(), frame.get());
262 EXPECT_EQ(2u, gles2_->gen_textures); 293 EXPECT_EQ(2u, gles2_->gen_textures);
263 EXPECT_TRUE(frame->metadata()->IsTrue( 294 EXPECT_TRUE(frame->metadata()->IsTrue(
264 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)); 295 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED));
265 } 296 }
266 297
298 TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareY16Frame) {
299 scoped_refptr<VideoFrame> software_frame = CreateTestY16VideoFrame(10);
300 scoped_refptr<VideoFrame> frame;
301 mock_gpu_factories_->SetVideoFrameOutputFormat(
302 media::GpuVideoAcceleratorFactories::OutputFormat::Y16);
303 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
304 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame));
305
306 RunUntilIdle();
307
308 EXPECT_NE(software_frame.get(), frame.get());
309 EXPECT_EQ(1u, gles2_->gen_textures);
310 EXPECT_TRUE(frame->metadata()->IsTrue(
311 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED));
312 }
313
267 // AllocateGpuMemoryBuffer can return null (e.g: when the GPU process is down). 314 // AllocateGpuMemoryBuffer can return null (e.g: when the GPU process is down).
268 // This test checks that in that case we don't crash and still create the 315 // This test checks that in that case we don't crash and still create the
269 // textures. 316 // textures.
270 TEST_F(GpuMemoryBufferVideoFramePoolTest, AllocateGpuMemoryBufferFail) { 317 TEST_F(GpuMemoryBufferVideoFramePoolTest, AllocateGpuMemoryBufferFail) {
271 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); 318 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10);
272 scoped_refptr<VideoFrame> frame; 319 scoped_refptr<VideoFrame> frame;
273 mock_gpu_factories_->SetFailToAllocateGpuMemoryBufferForTesting(true); 320 mock_gpu_factories_->SetFailToAllocateGpuMemoryBufferForTesting(true);
274 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( 321 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
275 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); 322 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame));
276 323
277 RunUntilIdle(); 324 RunUntilIdle();
278 325
279 EXPECT_NE(software_frame.get(), frame.get()); 326 EXPECT_NE(software_frame.get(), frame.get());
280 EXPECT_EQ(3u, gles2_->gen_textures); 327 EXPECT_EQ(3u, gles2_->gen_textures);
281 } 328 }
282 329
283 } // namespace media 330 } // namespace media
OLDNEW
« no previous file with comments | « media/video/gpu_memory_buffer_video_frame_pool.cc ('k') | third_party/WebKit/Source/core/html/HTMLVideoElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698