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

Side by Side Diff: media/filters/video_renderer_base.cc

Issue 14348007: Reland: Remove reference counting from media::VideoDecoder and friends. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixes Created 7 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 | Annotate | Revision Log
« no previous file with comments | « media/filters/video_renderer_base.h ('k') | media/filters/video_renderer_base_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 (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 "media/filters/video_renderer_base.h" 5 #include "media/filters/video_renderer_base.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/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/threading/platform_thread.h" 11 #include "base/threading/platform_thread.h"
12 #include "media/base/buffers.h" 12 #include "media/base/buffers.h"
13 #include "media/base/limits.h" 13 #include "media/base/limits.h"
14 #include "media/base/pipeline.h" 14 #include "media/base/pipeline.h"
15 #include "media/base/video_frame.h" 15 #include "media/base/video_frame.h"
16 #include "media/filters/decrypting_demuxer_stream.h" 16 #include "media/filters/decrypting_demuxer_stream.h"
17 17
18 namespace media { 18 namespace media {
19 19
20 base::TimeDelta VideoRendererBase::kMaxLastFrameDuration() { 20 base::TimeDelta VideoRendererBase::kMaxLastFrameDuration() {
21 return base::TimeDelta::FromMilliseconds(250); 21 return base::TimeDelta::FromMilliseconds(250);
22 } 22 }
23 23
24 VideoRendererBase::VideoRendererBase( 24 VideoRendererBase::VideoRendererBase(
25 const scoped_refptr<base::MessageLoopProxy>& message_loop, 25 const scoped_refptr<base::MessageLoopProxy>& message_loop,
26 ScopedVector<VideoDecoder> decoders,
26 const SetDecryptorReadyCB& set_decryptor_ready_cb, 27 const SetDecryptorReadyCB& set_decryptor_ready_cb,
27 const PaintCB& paint_cb, 28 const PaintCB& paint_cb,
28 const SetOpaqueCB& set_opaque_cb, 29 const SetOpaqueCB& set_opaque_cb,
29 bool drop_frames) 30 bool drop_frames)
30 : message_loop_(message_loop), 31 : message_loop_(message_loop),
31 weak_factory_(this), 32 weak_factory_(this),
32 video_frame_stream_(new VideoFrameStream(message_loop, 33 video_frame_stream_(new VideoFrameStream(
33 set_decryptor_ready_cb)), 34 message_loop, decoders.Pass(), set_decryptor_ready_cb)),
34 received_end_of_stream_(false), 35 received_end_of_stream_(false),
35 frame_available_(&lock_), 36 frame_available_(&lock_),
36 state_(kUninitialized), 37 state_(kUninitialized),
37 thread_(base::kNullThreadHandle), 38 thread_(base::kNullThreadHandle),
38 pending_read_(false), 39 pending_read_(false),
39 drop_frames_(drop_frames), 40 drop_frames_(drop_frames),
40 playback_rate_(0), 41 playback_rate_(0),
41 paint_cb_(paint_cb), 42 paint_cb_(paint_cb),
42 set_opaque_cb_(set_opaque_cb), 43 set_opaque_cb_(set_opaque_cb),
43 last_timestamp_(kNoTimestamp()) { 44 last_timestamp_(kNoTimestamp()) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 DCHECK(!cb.is_null()); 130 DCHECK(!cb.is_null());
130 DCHECK(preroll_cb_.is_null()); 131 DCHECK(preroll_cb_.is_null());
131 132
132 state_ = kPrerolling; 133 state_ = kPrerolling;
133 preroll_cb_ = cb; 134 preroll_cb_ = cb;
134 preroll_timestamp_ = time; 135 preroll_timestamp_ = time;
135 AttemptRead_Locked(); 136 AttemptRead_Locked();
136 } 137 }
137 138
138 void VideoRendererBase::Initialize(const scoped_refptr<DemuxerStream>& stream, 139 void VideoRendererBase::Initialize(const scoped_refptr<DemuxerStream>& stream,
139 const VideoDecoderList& decoders,
140 const PipelineStatusCB& init_cb, 140 const PipelineStatusCB& init_cb,
141 const StatisticsCB& statistics_cb, 141 const StatisticsCB& statistics_cb,
142 const TimeCB& max_time_cb, 142 const TimeCB& max_time_cb,
143 const NaturalSizeChangedCB& size_changed_cb, 143 const NaturalSizeChangedCB& size_changed_cb,
144 const base::Closure& ended_cb, 144 const base::Closure& ended_cb,
145 const PipelineStatusCB& error_cb, 145 const PipelineStatusCB& error_cb,
146 const TimeDeltaCB& get_time_cb, 146 const TimeDeltaCB& get_time_cb,
147 const TimeDeltaCB& get_duration_cb) { 147 const TimeDeltaCB& get_duration_cb) {
148 DCHECK(message_loop_->BelongsToCurrentThread()); 148 DCHECK(message_loop_->BelongsToCurrentThread());
149 base::AutoLock auto_lock(lock_); 149 base::AutoLock auto_lock(lock_);
150 DCHECK(stream); 150 DCHECK(stream);
151 DCHECK(!decoders.empty());
152 DCHECK_EQ(stream->type(), DemuxerStream::VIDEO); 151 DCHECK_EQ(stream->type(), DemuxerStream::VIDEO);
153 DCHECK(!init_cb.is_null()); 152 DCHECK(!init_cb.is_null());
154 DCHECK(!statistics_cb.is_null()); 153 DCHECK(!statistics_cb.is_null());
155 DCHECK(!max_time_cb.is_null()); 154 DCHECK(!max_time_cb.is_null());
156 DCHECK(!size_changed_cb.is_null()); 155 DCHECK(!size_changed_cb.is_null());
157 DCHECK(!ended_cb.is_null()); 156 DCHECK(!ended_cb.is_null());
158 DCHECK(!get_time_cb.is_null()); 157 DCHECK(!get_time_cb.is_null());
159 DCHECK(!get_duration_cb.is_null()); 158 DCHECK(!get_duration_cb.is_null());
160 DCHECK_EQ(kUninitialized, state_); 159 DCHECK_EQ(kUninitialized, state_);
161 160
162 weak_this_ = weak_factory_.GetWeakPtr(); 161 weak_this_ = weak_factory_.GetWeakPtr();
163 init_cb_ = init_cb; 162 init_cb_ = init_cb;
164 statistics_cb_ = statistics_cb; 163 statistics_cb_ = statistics_cb;
165 max_time_cb_ = max_time_cb; 164 max_time_cb_ = max_time_cb;
166 size_changed_cb_ = size_changed_cb; 165 size_changed_cb_ = size_changed_cb;
167 ended_cb_ = ended_cb; 166 ended_cb_ = ended_cb;
168 error_cb_ = error_cb; 167 error_cb_ = error_cb;
169 get_time_cb_ = get_time_cb; 168 get_time_cb_ = get_time_cb;
170 get_duration_cb_ = get_duration_cb; 169 get_duration_cb_ = get_duration_cb;
171 state_ = kInitializing; 170 state_ = kInitializing;
172 171
173 video_frame_stream_->Initialize( 172 video_frame_stream_->Initialize(
174 stream, 173 stream,
175 decoders,
176 statistics_cb, 174 statistics_cb,
177 base::Bind(&VideoRendererBase::OnVideoFrameStreamInitialized, 175 base::Bind(&VideoRendererBase::OnVideoFrameStreamInitialized,
178 weak_this_)); 176 weak_this_));
179 } 177 }
180 178
181 void VideoRendererBase::OnVideoFrameStreamInitialized(bool success, 179 void VideoRendererBase::OnVideoFrameStreamInitialized(bool success,
182 bool has_alpha) { 180 bool has_alpha) {
183 DCHECK(message_loop_->BelongsToCurrentThread()); 181 DCHECK(message_loop_->BelongsToCurrentThread());
184 base::AutoLock auto_lock(lock_); 182 base::AutoLock auto_lock(lock_);
185 183
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 // Because we might remain in the prerolled state for an undetermined amount 530 // Because we might remain in the prerolled state for an undetermined amount
533 // of time (e.g., we seeked while paused), we'll paint the first prerolled 531 // of time (e.g., we seeked while paused), we'll paint the first prerolled
534 // frame. 532 // frame.
535 if (!ready_frames_.empty()) 533 if (!ready_frames_.empty())
536 PaintNextReadyFrame_Locked(); 534 PaintNextReadyFrame_Locked();
537 535
538 base::ResetAndReturn(&preroll_cb_).Run(PIPELINE_OK); 536 base::ResetAndReturn(&preroll_cb_).Run(PIPELINE_OK);
539 } 537 }
540 538
541 } // namespace media 539 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/video_renderer_base.h ('k') | media/filters/video_renderer_base_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698