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

Side by Side Diff: content/common/gpu/media/vt_video_decode_accelerator.cc

Issue 753713002: Remove reliance on VideoToolbox frame ordering. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@vt_pic_order
Patch Set: Fix pointer dereference. Created 6 years 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
« no previous file with comments | « content/common/gpu/media/vt_video_decode_accelerator.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <algorithm> 5 #include <algorithm>
6 6
7 #include <CoreVideo/CoreVideo.h> 7 #include <CoreVideo/CoreVideo.h>
8 #include <OpenGL/CGLIOSurface.h> 8 #include <OpenGL/CGLIOSurface.h>
9 #include <OpenGL/gl.h> 9 #include <OpenGL/gl.h>
10 10
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 } else { 497 } else {
498 Frame* frame = reinterpret_cast<Frame*>(source_frame_refcon); 498 Frame* frame = reinterpret_cast<Frame*>(source_frame_refcon);
499 frame->image.reset(image_buffer, base::scoped_policy::RETAIN); 499 frame->image.reset(image_buffer, base::scoped_policy::RETAIN);
500 gpu_task_runner_->PostTask(FROM_HERE, base::Bind( 500 gpu_task_runner_->PostTask(FROM_HERE, base::Bind(
501 &VTVideoDecodeAccelerator::DecodeDone, weak_this_, frame)); 501 &VTVideoDecodeAccelerator::DecodeDone, weak_this_, frame));
502 } 502 }
503 } 503 }
504 504
505 void VTVideoDecodeAccelerator::DecodeDone(Frame* frame) { 505 void VTVideoDecodeAccelerator::DecodeDone(Frame* frame) {
506 DCHECK(gpu_thread_checker_.CalledOnValidThread()); 506 DCHECK(gpu_thread_checker_.CalledOnValidThread());
507 DCHECK_EQ(frame->bitstream_id, pending_frames_.front()->bitstream_id); 507 DCHECK_EQ(1u, pending_frames_.count(frame->bitstream_id));
508 Task task(TASK_FRAME); 508 Task task(TASK_FRAME);
509 task.frame = pending_frames_.front(); 509 task.frame = pending_frames_[frame->bitstream_id];
510 pending_frames_.pop(); 510 pending_frames_.erase(frame->bitstream_id);
511 task_queue_.push(task); 511 task_queue_.push(task);
512 ProcessWorkQueues(); 512 ProcessWorkQueues();
513 } 513 }
514 514
515 void VTVideoDecodeAccelerator::FlushTask(TaskType type) { 515 void VTVideoDecodeAccelerator::FlushTask(TaskType type) {
516 DCHECK(decoder_thread_.message_loop_proxy()->BelongsToCurrentThread()); 516 DCHECK(decoder_thread_.message_loop_proxy()->BelongsToCurrentThread());
517 FinishDelayedFrames(); 517 FinishDelayedFrames();
518 518
519 // Always queue a task, even if FinishDelayedFrames() fails, so that 519 // Always queue a task, even if FinishDelayedFrames() fails, so that
520 // destruction always completes. 520 // destruction always completes.
521 gpu_task_runner_->PostTask(FROM_HERE, base::Bind( 521 gpu_task_runner_->PostTask(FROM_HERE, base::Bind(
522 &VTVideoDecodeAccelerator::FlushDone, weak_this_, type)); 522 &VTVideoDecodeAccelerator::FlushDone, weak_this_, type));
523 } 523 }
524 524
525 void VTVideoDecodeAccelerator::FlushDone(TaskType type) { 525 void VTVideoDecodeAccelerator::FlushDone(TaskType type) {
526 DCHECK(gpu_thread_checker_.CalledOnValidThread()); 526 DCHECK(gpu_thread_checker_.CalledOnValidThread());
527 task_queue_.push(Task(type)); 527 task_queue_.push(Task(type));
528 ProcessWorkQueues(); 528 ProcessWorkQueues();
529 } 529 }
530 530
531 void VTVideoDecodeAccelerator::Decode(const media::BitstreamBuffer& bitstream) { 531 void VTVideoDecodeAccelerator::Decode(const media::BitstreamBuffer& bitstream) {
532 DCHECK(gpu_thread_checker_.CalledOnValidThread()); 532 DCHECK(gpu_thread_checker_.CalledOnValidThread());
533 DCHECK_EQ(assigned_bitstream_ids_.count(bitstream.id()), 0u); 533 DCHECK_EQ(0u, assigned_bitstream_ids_.count(bitstream.id()));
534 assigned_bitstream_ids_.insert(bitstream.id()); 534 assigned_bitstream_ids_.insert(bitstream.id());
535 Frame* frame = new Frame(bitstream.id()); 535 Frame* frame = new Frame(bitstream.id());
536 pending_frames_.push(make_linked_ptr(frame)); 536 pending_frames_[frame->bitstream_id] = make_linked_ptr(frame);
537 decoder_thread_.message_loop_proxy()->PostTask(FROM_HERE, base::Bind( 537 decoder_thread_.message_loop_proxy()->PostTask(FROM_HERE, base::Bind(
538 &VTVideoDecodeAccelerator::DecodeTask, base::Unretained(this), 538 &VTVideoDecodeAccelerator::DecodeTask, base::Unretained(this),
539 bitstream, frame)); 539 bitstream, frame));
540 } 540 }
541 541
542 void VTVideoDecodeAccelerator::AssignPictureBuffers( 542 void VTVideoDecodeAccelerator::AssignPictureBuffers(
543 const std::vector<media::PictureBuffer>& pictures) { 543 const std::vector<media::PictureBuffer>& pictures) {
544 DCHECK(gpu_thread_checker_.CalledOnValidThread()); 544 DCHECK(gpu_thread_checker_.CalledOnValidThread());
545 545
546 for (const media::PictureBuffer& picture : pictures) { 546 for (const media::PictureBuffer& picture : pictures) {
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 assigned_bitstream_ids_.clear(); 800 assigned_bitstream_ids_.clear();
801 state_ = STATE_DESTROYING; 801 state_ = STATE_DESTROYING;
802 QueueFlush(TASK_DESTROY); 802 QueueFlush(TASK_DESTROY);
803 } 803 }
804 804
805 bool VTVideoDecodeAccelerator::CanDecodeOnIOThread() { 805 bool VTVideoDecodeAccelerator::CanDecodeOnIOThread() {
806 return false; 806 return false;
807 } 807 }
808 808
809 } // namespace content 809 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/media/vt_video_decode_accelerator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698