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

Side by Side Diff: media/renderers/video_renderer_impl.cc

Issue 1273943002: media: Make GpuMemoryBuffers VideoFrame copies asynchronous. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address reveman's and dalecurtis' comments. Disable GMB VideoFrames. Created 5 years, 4 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
« no previous file with comments | « media/renderers/video_renderer_impl.h ('k') | media/renderers/video_renderer_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/renderers/video_renderer_impl.h" 5 #include "media/renderers/video_renderer_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 26 matching lines...) Expand all
37 base::FieldTrialList::FindFullName("NewVideoRendererTrial"); 37 base::FieldTrialList::FindFullName("NewVideoRendererTrial");
38 const bool disabled_via_cli = 38 const bool disabled_via_cli =
39 base::CommandLine::ForCurrentProcess()->HasSwitch( 39 base::CommandLine::ForCurrentProcess()->HasSwitch(
40 switches::kDisableNewVideoRenderer); 40 switches::kDisableNewVideoRenderer);
41 return !disabled_via_cli && 41 return !disabled_via_cli &&
42 !base::StartsWith(group_name, "Disabled", 42 !base::StartsWith(group_name, "Disabled",
43 base::CompareCase::SENSITIVE); 43 base::CompareCase::SENSITIVE);
44 } 44 }
45 45
46 VideoRendererImpl::VideoRendererImpl( 46 VideoRendererImpl::VideoRendererImpl(
47 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 47 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
48 const scoped_refptr<base::TaskRunner>& worker_task_runner,
48 VideoRendererSink* sink, 49 VideoRendererSink* sink,
49 ScopedVector<VideoDecoder> decoders, 50 ScopedVector<VideoDecoder> decoders,
50 bool drop_frames, 51 bool drop_frames,
51 const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories, 52 const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories,
52 const scoped_refptr<MediaLog>& media_log) 53 const scoped_refptr<MediaLog>& media_log)
53 : task_runner_(task_runner), 54 : task_runner_(media_task_runner),
54 use_new_video_renderering_path_(ShouldUseVideoRenderingPath()), 55 use_new_video_renderering_path_(ShouldUseVideoRenderingPath()),
55 sink_(sink), 56 sink_(sink),
56 sink_started_(false), 57 sink_started_(false),
57 video_frame_stream_( 58 video_frame_stream_(
58 new VideoFrameStream(task_runner, decoders.Pass(), media_log)), 59 new VideoFrameStream(media_task_runner, decoders.Pass(), media_log)),
59 gpu_memory_buffer_pool_( 60 gpu_memory_buffer_pool_(
60 new GpuMemoryBufferVideoFramePool(task_runner, gpu_factories)), 61 new GpuMemoryBufferVideoFramePool(media_task_runner,
62 worker_task_runner,
63 gpu_factories)),
61 media_log_(media_log), 64 media_log_(media_log),
62 low_delay_(false), 65 low_delay_(false),
63 received_end_of_stream_(false), 66 received_end_of_stream_(false),
64 rendered_end_of_stream_(false), 67 rendered_end_of_stream_(false),
65 frame_available_(&lock_), 68 frame_available_(&lock_),
66 state_(kUninitialized), 69 state_(kUninitialized),
67 thread_(), 70 thread_(),
68 pending_read_(false), 71 pending_read_(false),
69 drop_frames_(drop_frames), 72 drop_frames_(drop_frames),
70 buffering_state_(BUFFERING_HAVE_NOTHING), 73 buffering_state_(BUFFERING_HAVE_NOTHING),
71 frames_decoded_(0), 74 frames_decoded_(0),
72 frames_dropped_(0), 75 frames_dropped_(0),
73 is_shutting_down_(false), 76 is_shutting_down_(false),
74 tick_clock_(new base::DefaultTickClock()), 77 tick_clock_(new base::DefaultTickClock()),
75 was_background_rendering_(false), 78 was_background_rendering_(false),
76 time_progressing_(false), 79 time_progressing_(false),
77 render_first_frame_and_stop_(false), 80 render_first_frame_and_stop_(false),
78 posted_maybe_stop_after_first_paint_(false), 81 posted_maybe_stop_after_first_paint_(false),
79 weak_factory_(this) { 82 weak_factory_(this) {}
80 }
81 83
82 VideoRendererImpl::~VideoRendererImpl() { 84 VideoRendererImpl::~VideoRendererImpl() {
83 DCHECK(task_runner_->BelongsToCurrentThread()); 85 DCHECK(task_runner_->BelongsToCurrentThread());
84 86
85 if (!use_new_video_renderering_path_) { 87 if (!use_new_video_renderering_path_) {
86 base::AutoLock auto_lock(lock_); 88 base::AutoLock auto_lock(lock_);
87 is_shutting_down_ = true; 89 is_shutting_down_ = true;
88 frame_available_.Signal(); 90 frame_available_.Signal();
89 } 91 }
90 92
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 last_media_time_ = ConvertMediaTimestamp(ready_frames_.front()->timestamp()); 469 last_media_time_ = ConvertMediaTimestamp(ready_frames_.front()->timestamp());
468 470
469 ready_frames_.pop_front(); 471 ready_frames_.pop_front();
470 frames_dropped_++; 472 frames_dropped_++;
471 473
472 task_runner_->PostTask( 474 task_runner_->PostTask(
473 FROM_HERE, 475 FROM_HERE,
474 base::Bind(&VideoRendererImpl::AttemptRead, weak_factory_.GetWeakPtr())); 476 base::Bind(&VideoRendererImpl::AttemptRead, weak_factory_.GetWeakPtr()));
475 } 477 }
476 478
479 void VideoRendererImpl::FrameReadyForCopyingToGpuMemoryBuffers(
480 VideoFrameStream::Status status,
481 const scoped_refptr<VideoFrame>& frame) {
482 if (status != VideoFrameStream::OK || start_timestamp_ > frame->timestamp()) {
483 VideoRendererImpl::FrameReady(status, frame);
484 return;
485 }
486
487 DCHECK(frame);
488 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
489 frame, base::Bind(&VideoRendererImpl::FrameReady,
490 weak_factory_.GetWeakPtr(), status));
491 }
492
477 void VideoRendererImpl::FrameReady(VideoFrameStream::Status status, 493 void VideoRendererImpl::FrameReady(VideoFrameStream::Status status,
478 const scoped_refptr<VideoFrame>& frame) { 494 const scoped_refptr<VideoFrame>& frame) {
479 DCHECK(task_runner_->BelongsToCurrentThread()); 495 DCHECK(task_runner_->BelongsToCurrentThread());
480 bool start_sink = false; 496 bool start_sink = false;
481 { 497 {
482 base::AutoLock auto_lock(lock_); 498 base::AutoLock auto_lock(lock_);
483 DCHECK_NE(state_, kUninitialized); 499 DCHECK_NE(state_, kUninitialized);
484 DCHECK_NE(state_, kFlushed); 500 DCHECK_NE(state_, kFlushed);
485 501
486 CHECK(pending_read_); 502 CHECK(pending_read_);
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 694
679 if (pending_read_ || received_end_of_stream_) 695 if (pending_read_ || received_end_of_stream_)
680 return; 696 return;
681 697
682 if (HaveReachedBufferingCap()) 698 if (HaveReachedBufferingCap())
683 return; 699 return;
684 700
685 switch (state_) { 701 switch (state_) {
686 case kPlaying: 702 case kPlaying:
687 pending_read_ = true; 703 pending_read_ = true;
688 video_frame_stream_->Read(base::Bind(&VideoRendererImpl::FrameReady, 704
689 weak_factory_.GetWeakPtr())); 705 video_frame_stream_->Read(
706 base::Bind(&VideoRendererImpl::FrameReady,
707 weak_factory_.GetWeakPtr()));
690 return; 708 return;
691 709
692 case kUninitialized: 710 case kUninitialized:
693 case kInitializing: 711 case kInitializing:
694 case kFlushing: 712 case kFlushing:
695 case kFlushed: 713 case kFlushed:
696 return; 714 return;
697 } 715 }
698 } 716 }
699 717
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 base::TimeTicks VideoRendererImpl::ConvertMediaTimestamp( 822 base::TimeTicks VideoRendererImpl::ConvertMediaTimestamp(
805 base::TimeDelta media_time) { 823 base::TimeDelta media_time) {
806 std::vector<base::TimeDelta> media_times(1, media_time); 824 std::vector<base::TimeDelta> media_times(1, media_time);
807 std::vector<base::TimeTicks> wall_clock_times; 825 std::vector<base::TimeTicks> wall_clock_times;
808 if (!wall_clock_time_cb_.Run(media_times, &wall_clock_times)) 826 if (!wall_clock_time_cb_.Run(media_times, &wall_clock_times))
809 return base::TimeTicks(); 827 return base::TimeTicks();
810 return wall_clock_times[0]; 828 return wall_clock_times[0];
811 } 829 }
812 830
813 } // namespace media 831 } // namespace media
OLDNEW
« no previous file with comments | « media/renderers/video_renderer_impl.h ('k') | media/renderers/video_renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698