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

Side by Side Diff: content/browser/media/capture/web_contents_video_capture_device_unittest.cc

Issue 1016773002: MJPEG acceleration for video capture using VAAPI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
wuchengli 2015/04/21 06:05:36 Please provide performance data of HW and SW JPEG
kcwu 2015/05/08 14:42:41 Done.
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 "content/browser/media/capture/web_contents_video_capture_device.h" 5 #include "content/browser/media/capture/web_contents_video_capture_device.h"
6 6
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/debug/debugger.h" 8 #include "base/debug/debugger.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/test/test_timeouts.h" 10 #include "base/test/test_timeouts.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 media::VideoPixelFormat format, 339 media::VideoPixelFormat format,
340 const gfx::Size& dimensions) override { 340 const gfx::Size& dimensions) override {
341 CHECK_EQ(format, media::PIXEL_FORMAT_I420); 341 CHECK_EQ(format, media::PIXEL_FORMAT_I420);
342 int buffer_id_to_drop = VideoCaptureBufferPool::kInvalidId; // Ignored. 342 int buffer_id_to_drop = VideoCaptureBufferPool::kInvalidId; // Ignored.
343 int buffer_id = buffer_pool_->ReserveForProducer(format, dimensions, 343 int buffer_id = buffer_pool_->ReserveForProducer(format, dimensions,
344 &buffer_id_to_drop); 344 &buffer_id_to_drop);
345 if (buffer_id == VideoCaptureBufferPool::kInvalidId) 345 if (buffer_id == VideoCaptureBufferPool::kInvalidId)
346 return NULL; 346 return NULL;
347 void* data; 347 void* data;
348 size_t size; 348 size_t size;
349 buffer_pool_->GetBufferInfo(buffer_id, &data, &size); 349 base::SharedMemoryHandle handle;
350 buffer_pool_->GetBufferInfo(buffer_id, &data, &size, &handle);
350 return scoped_refptr<media::VideoCaptureDevice::Client::Buffer>( 351 return scoped_refptr<media::VideoCaptureDevice::Client::Buffer>(
351 new AutoReleaseBuffer(buffer_pool_, buffer_id, data, size)); 352 new AutoReleaseBuffer(buffer_pool_, buffer_id, data, size, handle));
352 } 353 }
353 354
354 void OnIncomingCapturedVideoFrame( 355 void OnIncomingCapturedVideoFrame(
355 const scoped_refptr<Buffer>& buffer, 356 const scoped_refptr<Buffer>& buffer,
356 const scoped_refptr<media::VideoFrame>& frame, 357 const scoped_refptr<media::VideoFrame>& frame,
357 const base::TimeTicks& timestamp) override { 358 const base::TimeTicks& timestamp) override {
358 EXPECT_EQ(gfx::Size(kTestWidth, kTestHeight), frame->visible_rect().size()); 359 EXPECT_EQ(gfx::Size(kTestWidth, kTestHeight), frame->visible_rect().size());
359 EXPECT_EQ(media::VideoFrame::I420, frame->format()); 360 EXPECT_EQ(media::VideoFrame::I420, frame->format());
360 double frame_rate = 0; 361 double frame_rate = 0;
361 EXPECT_TRUE( 362 EXPECT_TRUE(
362 frame->metadata()->GetDouble(media::VideoFrameMetadata::FRAME_RATE, 363 frame->metadata()->GetDouble(media::VideoFrameMetadata::FRAME_RATE,
363 &frame_rate)); 364 &frame_rate));
364 EXPECT_EQ(kTestFramesPerSecond, frame_rate); 365 EXPECT_EQ(kTestFramesPerSecond, frame_rate);
365 uint8 yuv[3]; 366 uint8 yuv[3];
366 for (int plane = 0; plane < 3; ++plane) 367 for (int plane = 0; plane < 3; ++plane)
367 yuv[plane] = frame->visible_data(plane)[0]; 368 yuv[plane] = frame->visible_data(plane)[0];
368 // TODO(nick): We just look at the first pixel presently, because if 369 // TODO(nick): We just look at the first pixel presently, because if
369 // the analysis is too slow, the backlog of frames will grow without bound 370 // the analysis is too slow, the backlog of frames will grow without bound
370 // and trouble erupts. http://crbug.com/174519 371 // and trouble erupts. http://crbug.com/174519
371 color_callback_.Run((SkColorSetRGB(yuv[0], yuv[1], yuv[2]))); 372 color_callback_.Run((SkColorSetRGB(yuv[0], yuv[1], yuv[2])));
372 } 373 }
373 374
374 void OnError(const std::string& reason) override { error_callback_.Run(); } 375 void OnError(const std::string& reason) override { error_callback_.Run(); }
375 376
376 private: 377 private:
377 class AutoReleaseBuffer : public media::VideoCaptureDevice::Client::Buffer { 378 class AutoReleaseBuffer : public media::VideoCaptureDevice::Client::Buffer {
378 public: 379 public:
379 AutoReleaseBuffer(const scoped_refptr<VideoCaptureBufferPool>& pool, 380 AutoReleaseBuffer(const scoped_refptr<VideoCaptureBufferPool>& pool,
380 int buffer_id, 381 int buffer_id,
381 void* data, 382 void* data,
382 size_t size) 383 size_t size,
384 base::SharedMemoryHandle handle)
383 : pool_(pool), 385 : pool_(pool),
384 id_(buffer_id), 386 id_(buffer_id),
385 data_(data), 387 data_(data),
386 size_(size) { 388 size_(size),
389 handle_(handle) {
387 DCHECK(pool_.get()); 390 DCHECK(pool_.get());
388 } 391 }
389 int id() const override { return id_; } 392 int id() const override { return id_; }
390 void* data() const override { return data_; } 393 void* data() const override { return data_; }
391 size_t size() const override { return size_; } 394 size_t size() const override { return size_; }
395 base::SharedMemoryHandle handle() const override { return handle_; }
392 396
393 private: 397 private:
394 ~AutoReleaseBuffer() override { pool_->RelinquishProducerReservation(id_); } 398 ~AutoReleaseBuffer() override { pool_->RelinquishProducerReservation(id_); }
395 399
396 const scoped_refptr<VideoCaptureBufferPool> pool_; 400 const scoped_refptr<VideoCaptureBufferPool> pool_;
397 const int id_; 401 const int id_;
398 void* const data_; 402 void* const data_;
399 const size_t size_; 403 const size_t size_;
404 const base::SharedMemoryHandle handle_;
400 }; 405 };
401 406
402 scoped_refptr<VideoCaptureBufferPool> buffer_pool_; 407 scoped_refptr<VideoCaptureBufferPool> buffer_pool_;
403 base::Callback<void(SkColor)> color_callback_; 408 base::Callback<void(SkColor)> color_callback_;
404 base::Closure error_callback_; 409 base::Closure error_callback_;
405 410
406 DISALLOW_COPY_AND_ASSIGN(StubClient); 411 DISALLOW_COPY_AND_ASSIGN(StubClient);
407 }; 412 };
408 413
409 class StubClientObserver { 414 class StubClientObserver {
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 source()->SetSolidColor(SK_ColorGREEN); 872 source()->SetSolidColor(SK_ColorGREEN);
868 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN)); 873 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorGREEN));
869 source()->SetSolidColor(SK_ColorRED); 874 source()->SetSolidColor(SK_ColorRED);
870 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED)); 875 ASSERT_NO_FATAL_FAILURE(client_observer()->WaitForNextColor(SK_ColorRED));
871 876
872 device()->StopAndDeAllocate(); 877 device()->StopAndDeAllocate();
873 } 878 }
874 879
875 } // namespace 880 } // namespace
876 } // namespace content 881 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698