OLD | NEW |
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 "content/common/gpu/media/gpu_jpeg_decode_accelerator.h" | 5 #include "content/common/gpu/media/gpu_jpeg_decode_accelerator.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/containers/hash_tables.h" | 11 #include "base/containers/hash_tables.h" |
11 #include "base/logging.h" | 12 #include "base/logging.h" |
12 #include "base/memory/shared_memory.h" | 13 #include "base/memory/shared_memory.h" |
13 #include "base/single_thread_task_runner.h" | 14 #include "base/single_thread_task_runner.h" |
14 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
15 #include "base/trace_event/trace_event.h" | 16 #include "base/trace_event/trace_event.h" |
16 #include "build/build_config.h" | 17 #include "build/build_config.h" |
17 #include "content/common/gpu/gpu_channel.h" | 18 #include "content/common/gpu/gpu_channel.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 | 106 |
106 void Decode(const media::BitstreamBuffer& bitstream_buffer, | 107 void Decode(const media::BitstreamBuffer& bitstream_buffer, |
107 const scoped_refptr<media::VideoFrame>& video_frame) { | 108 const scoped_refptr<media::VideoFrame>& video_frame) { |
108 DCHECK(CalledOnValidThread()); | 109 DCHECK(CalledOnValidThread()); |
109 DCHECK(accelerator_); | 110 DCHECK(accelerator_); |
110 accelerator_->Decode(bitstream_buffer, video_frame); | 111 accelerator_->Decode(bitstream_buffer, video_frame); |
111 } | 112 } |
112 | 113 |
113 void set_accelerator(scoped_ptr<media::JpegDecodeAccelerator> accelerator) { | 114 void set_accelerator(scoped_ptr<media::JpegDecodeAccelerator> accelerator) { |
114 DCHECK(CalledOnValidThread()); | 115 DCHECK(CalledOnValidThread()); |
115 accelerator_ = accelerator.Pass(); | 116 accelerator_ = std::move(accelerator); |
116 } | 117 } |
117 | 118 |
118 private: | 119 private: |
119 base::WeakPtr<content::GpuJpegDecodeAccelerator> owner_; | 120 base::WeakPtr<content::GpuJpegDecodeAccelerator> owner_; |
120 int32_t route_id_; | 121 int32_t route_id_; |
121 scoped_ptr<media::JpegDecodeAccelerator> accelerator_; | 122 scoped_ptr<media::JpegDecodeAccelerator> accelerator_; |
122 }; | 123 }; |
123 | 124 |
124 // Create, destroy, and RemoveClient run on child thread. All other methods run | 125 // Create, destroy, and RemoveClient run on child thread. All other methods run |
125 // on IO thread. | 126 // on IO thread. |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 &GpuJpegDecodeAccelerator::CreateV4L2JDA, | 337 &GpuJpegDecodeAccelerator::CreateV4L2JDA, |
337 &GpuJpegDecodeAccelerator::CreateVaapiJDA, | 338 &GpuJpegDecodeAccelerator::CreateVaapiJDA, |
338 }; | 339 }; |
339 | 340 |
340 scoped_ptr<Client> client(new Client(this, route_id)); | 341 scoped_ptr<Client> client(new Client(this, route_id)); |
341 scoped_ptr<media::JpegDecodeAccelerator> accelerator; | 342 scoped_ptr<media::JpegDecodeAccelerator> accelerator; |
342 for (const auto& create_jda_function : create_jda_fps) { | 343 for (const auto& create_jda_function : create_jda_fps) { |
343 scoped_ptr<media::JpegDecodeAccelerator> tmp_accelerator = | 344 scoped_ptr<media::JpegDecodeAccelerator> tmp_accelerator = |
344 (*create_jda_function)(io_task_runner_); | 345 (*create_jda_function)(io_task_runner_); |
345 if (tmp_accelerator && tmp_accelerator->Initialize(client.get())) { | 346 if (tmp_accelerator && tmp_accelerator->Initialize(client.get())) { |
346 accelerator = tmp_accelerator.Pass(); | 347 accelerator = std::move(tmp_accelerator); |
347 break; | 348 break; |
348 } | 349 } |
349 } | 350 } |
350 | 351 |
351 if (!accelerator) { | 352 if (!accelerator) { |
352 DLOG(ERROR) << "JPEG accelerator Initialize failed"; | 353 DLOG(ERROR) << "JPEG accelerator Initialize failed"; |
353 GpuMsg_CreateJpegDecoder::WriteReplyParams(reply_msg, false); | 354 GpuMsg_CreateJpegDecoder::WriteReplyParams(reply_msg, false); |
354 Send(reply_msg); | 355 Send(reply_msg); |
355 return; | 356 return; |
356 } | 357 } |
357 client->set_accelerator(accelerator.Pass()); | 358 client->set_accelerator(std::move(accelerator)); |
358 | 359 |
359 if (!filter_) { | 360 if (!filter_) { |
360 DCHECK_EQ(client_number_, 0); | 361 DCHECK_EQ(client_number_, 0); |
361 filter_ = new MessageFilter(this); | 362 filter_ = new MessageFilter(this); |
362 // This should be before AddClientOnIOThread. | 363 // This should be before AddClientOnIOThread. |
363 channel_->AddFilter(filter_.get()); | 364 channel_->AddFilter(filter_.get()); |
364 } | 365 } |
365 client_number_++; | 366 client_number_++; |
366 | 367 |
367 // In this PostTask, |client| may leak if |io_task_runner_| is destroyed | 368 // In this PostTask, |client| may leak if |io_task_runner_| is destroyed |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 scoped_ptr<media::JpegDecodeAccelerator> | 403 scoped_ptr<media::JpegDecodeAccelerator> |
403 GpuJpegDecodeAccelerator::CreateV4L2JDA( | 404 GpuJpegDecodeAccelerator::CreateV4L2JDA( |
404 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) { | 405 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) { |
405 scoped_ptr<media::JpegDecodeAccelerator> decoder; | 406 scoped_ptr<media::JpegDecodeAccelerator> decoder; |
406 #if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) | 407 #if defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) |
407 scoped_refptr<V4L2Device> device = V4L2Device::Create( | 408 scoped_refptr<V4L2Device> device = V4L2Device::Create( |
408 V4L2Device::kJpegDecoder); | 409 V4L2Device::kJpegDecoder); |
409 if (device) | 410 if (device) |
410 decoder.reset(new V4L2JpegDecodeAccelerator(device, io_task_runner)); | 411 decoder.reset(new V4L2JpegDecodeAccelerator(device, io_task_runner)); |
411 #endif | 412 #endif |
412 return decoder.Pass(); | 413 return decoder; |
413 } | 414 } |
414 | 415 |
415 // static | 416 // static |
416 scoped_ptr<media::JpegDecodeAccelerator> | 417 scoped_ptr<media::JpegDecodeAccelerator> |
417 GpuJpegDecodeAccelerator::CreateVaapiJDA( | 418 GpuJpegDecodeAccelerator::CreateVaapiJDA( |
418 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) { | 419 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) { |
419 scoped_ptr<media::JpegDecodeAccelerator> decoder; | 420 scoped_ptr<media::JpegDecodeAccelerator> decoder; |
420 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) | 421 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
421 decoder.reset(new VaapiJpegDecodeAccelerator(io_task_runner)); | 422 decoder.reset(new VaapiJpegDecodeAccelerator(io_task_runner)); |
422 #endif | 423 #endif |
423 return decoder.Pass(); | 424 return decoder; |
424 } | 425 } |
425 | 426 |
426 // static | 427 // static |
427 bool GpuJpegDecodeAccelerator::IsSupported() { | 428 bool GpuJpegDecodeAccelerator::IsSupported() { |
428 const GpuJpegDecodeAccelerator::CreateJDAFp create_jda_fps[] = { | 429 const GpuJpegDecodeAccelerator::CreateJDAFp create_jda_fps[] = { |
429 &GpuJpegDecodeAccelerator::CreateV4L2JDA, | 430 &GpuJpegDecodeAccelerator::CreateV4L2JDA, |
430 &GpuJpegDecodeAccelerator::CreateVaapiJDA, | 431 &GpuJpegDecodeAccelerator::CreateVaapiJDA, |
431 }; | 432 }; |
432 for (const auto& create_jda_function : create_jda_fps) { | 433 for (const auto& create_jda_function : create_jda_fps) { |
433 scoped_ptr<media::JpegDecodeAccelerator> accelerator = | 434 scoped_ptr<media::JpegDecodeAccelerator> accelerator = |
434 (*create_jda_function)(base::ThreadTaskRunnerHandle::Get()); | 435 (*create_jda_function)(base::ThreadTaskRunnerHandle::Get()); |
435 if (accelerator && accelerator->IsSupported()) | 436 if (accelerator && accelerator->IsSupported()) |
436 return true; | 437 return true; |
437 } | 438 } |
438 return false; | 439 return false; |
439 } | 440 } |
440 | 441 |
441 } // namespace content | 442 } // namespace content |
OLD | NEW |