OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/vaapi_video_decode_accelerator.h" | 5 #include "content/common/gpu/media/vaapi_video_decode_accelerator.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 private: | 249 private: |
250 scoped_refptr<VaapiDecodeSurface> VP9PictureToVaapiDecodeSurface( | 250 scoped_refptr<VaapiDecodeSurface> VP9PictureToVaapiDecodeSurface( |
251 const scoped_refptr<VP9Picture>& pic); | 251 const scoped_refptr<VP9Picture>& pic); |
252 | 252 |
253 VaapiWrapper* vaapi_wrapper_; | 253 VaapiWrapper* vaapi_wrapper_; |
254 VaapiVideoDecodeAccelerator* vaapi_dec_; | 254 VaapiVideoDecodeAccelerator* vaapi_dec_; |
255 | 255 |
256 DISALLOW_COPY_AND_ASSIGN(VaapiVP9Accelerator); | 256 DISALLOW_COPY_AND_ASSIGN(VaapiVP9Accelerator); |
257 }; | 257 }; |
258 | 258 |
259 VaapiVideoDecodeAccelerator::InputBuffer::InputBuffer() : id(0), size(0) { | 259 VaapiVideoDecodeAccelerator::InputBuffer::InputBuffer() : id(0) {} |
260 } | |
261 | 260 |
262 VaapiVideoDecodeAccelerator::InputBuffer::~InputBuffer() { | 261 VaapiVideoDecodeAccelerator::InputBuffer::~InputBuffer() { |
263 } | 262 } |
264 | 263 |
265 void VaapiVideoDecodeAccelerator::NotifyError(Error error) { | 264 void VaapiVideoDecodeAccelerator::NotifyError(Error error) { |
266 if (message_loop_ != base::MessageLoop::current()) { | 265 if (message_loop_ != base::MessageLoop::current()) { |
267 DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); | 266 DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); |
268 message_loop_->PostTask(FROM_HERE, base::Bind( | 267 message_loop_->PostTask(FROM_HERE, base::Bind( |
269 &VaapiVideoDecodeAccelerator::NotifyError, weak_this_, error)); | 268 &VaapiVideoDecodeAccelerator::NotifyError, weak_this_, error)); |
270 return; | 269 return; |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 | 439 |
441 void VaapiVideoDecodeAccelerator::MapAndQueueNewInputBuffer( | 440 void VaapiVideoDecodeAccelerator::MapAndQueueNewInputBuffer( |
442 const media::BitstreamBuffer& bitstream_buffer) { | 441 const media::BitstreamBuffer& bitstream_buffer) { |
443 DCHECK_EQ(message_loop_, base::MessageLoop::current()); | 442 DCHECK_EQ(message_loop_, base::MessageLoop::current()); |
444 TRACE_EVENT1("Video Decoder", "MapAndQueueNewInputBuffer", "input_id", | 443 TRACE_EVENT1("Video Decoder", "MapAndQueueNewInputBuffer", "input_id", |
445 bitstream_buffer.id()); | 444 bitstream_buffer.id()); |
446 | 445 |
447 DVLOG(4) << "Mapping new input buffer id: " << bitstream_buffer.id() | 446 DVLOG(4) << "Mapping new input buffer id: " << bitstream_buffer.id() |
448 << " size: " << (int)bitstream_buffer.size(); | 447 << " size: " << (int)bitstream_buffer.size(); |
449 | 448 |
450 scoped_ptr<base::SharedMemory> shm( | 449 scoped_ptr<SharedMemoryRegion> shm( |
451 new base::SharedMemory(bitstream_buffer.handle(), true)); | 450 new SharedMemoryRegion(bitstream_buffer, true)); |
452 RETURN_AND_NOTIFY_ON_FAILURE(shm->Map(bitstream_buffer.size()), | 451 RETURN_AND_NOTIFY_ON_FAILURE(shm->Map(), "Failed to map input buffer", |
453 "Failed to map input buffer", UNREADABLE_INPUT,); | 452 UNREADABLE_INPUT, ); |
454 | 453 |
455 base::AutoLock auto_lock(lock_); | 454 base::AutoLock auto_lock(lock_); |
456 | 455 |
457 // Set up a new input buffer and queue it for later. | 456 // Set up a new input buffer and queue it for later. |
458 linked_ptr<InputBuffer> input_buffer(new InputBuffer()); | 457 linked_ptr<InputBuffer> input_buffer(new InputBuffer()); |
459 input_buffer->shm.reset(shm.release()); | 458 input_buffer->shm.reset(shm.release()); |
460 input_buffer->id = bitstream_buffer.id(); | 459 input_buffer->id = bitstream_buffer.id(); |
461 input_buffer->size = bitstream_buffer.size(); | |
462 | 460 |
463 ++num_stream_bufs_at_decoder_; | 461 ++num_stream_bufs_at_decoder_; |
464 TRACE_COUNTER1("Video Decoder", "Stream buffers at decoder", | 462 TRACE_COUNTER1("Video Decoder", "Stream buffers at decoder", |
465 num_stream_bufs_at_decoder_); | 463 num_stream_bufs_at_decoder_); |
466 | 464 |
467 input_buffers_.push(input_buffer); | 465 input_buffers_.push(input_buffer); |
468 input_ready_.Signal(); | 466 input_ready_.Signal(); |
469 } | 467 } |
470 | 468 |
471 bool VaapiVideoDecodeAccelerator::GetInputBuffer_Locked() { | 469 bool VaapiVideoDecodeAccelerator::GetInputBuffer_Locked() { |
(...skipping 18 matching lines...) Expand all Loading... |
490 if (input_buffers_.empty()) | 488 if (input_buffers_.empty()) |
491 return false; | 489 return false; |
492 // else fallthrough | 490 // else fallthrough |
493 case kDecoding: | 491 case kDecoding: |
494 case kIdle: | 492 case kIdle: |
495 DCHECK(!input_buffers_.empty()); | 493 DCHECK(!input_buffers_.empty()); |
496 | 494 |
497 curr_input_buffer_ = input_buffers_.front(); | 495 curr_input_buffer_ = input_buffers_.front(); |
498 input_buffers_.pop(); | 496 input_buffers_.pop(); |
499 | 497 |
500 DVLOG(4) << "New current bitstream buffer, id: " | 498 DVLOG(4) << "New current bitstream buffer, id: " << curr_input_buffer_->id |
501 << curr_input_buffer_->id | 499 << " size: " << curr_input_buffer_->shm->size(); |
502 << " size: " << curr_input_buffer_->size; | |
503 | 500 |
504 decoder_->SetStream( | 501 decoder_->SetStream( |
505 static_cast<uint8_t*>(curr_input_buffer_->shm->memory()), | 502 static_cast<uint8_t*>(curr_input_buffer_->shm->memory()), |
506 curr_input_buffer_->size); | 503 curr_input_buffer_->shm->size()); |
507 return true; | 504 return true; |
508 | 505 |
509 default: | 506 default: |
510 // We got woken up due to being destroyed/reset, ignore any already | 507 // We got woken up due to being destroyed/reset, ignore any already |
511 // queued inputs. | 508 // queued inputs. |
512 return false; | 509 return false; |
513 } | 510 } |
514 } | 511 } |
515 | 512 |
516 void VaapiVideoDecodeAccelerator::ReturnCurrInputBuffer_Locked() { | 513 void VaapiVideoDecodeAccelerator::ReturnCurrInputBuffer_Locked() { |
(...skipping 1231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1748 return vaapi_pic->dec_surface(); | 1745 return vaapi_pic->dec_surface(); |
1749 } | 1746 } |
1750 | 1747 |
1751 // static | 1748 // static |
1752 media::VideoDecodeAccelerator::SupportedProfiles | 1749 media::VideoDecodeAccelerator::SupportedProfiles |
1753 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { | 1750 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { |
1754 return VaapiWrapper::GetSupportedDecodeProfiles(); | 1751 return VaapiWrapper::GetSupportedDecodeProfiles(); |
1755 } | 1752 } |
1756 | 1753 |
1757 } // namespace content | 1754 } // namespace content |
OLD | NEW |