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

Side by Side Diff: media/base/pipeline.h

Issue 10823261: Remove Pipeline::IsInitialized() and replace stop_pending_ with checks for stop_cb_. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: fix .h Created 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | media/base/pipeline.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 #ifndef MEDIA_BASE_PIPELINE_H_ 5 #ifndef MEDIA_BASE_PIPELINE_H_
6 #define MEDIA_BASE_PIPELINE_H_ 6 #define MEDIA_BASE_PIPELINE_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/gtest_prod_util.h" 10 #include "base/gtest_prod_util.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 // [ Seeking (for each filter) ] <--------[ Flushing (for each filter) ] 76 // [ Seeking (for each filter) ] <--------[ Flushing (for each filter) ]
77 // | if Seek ^ 77 // | if Seek ^
78 // V | 78 // V |
79 // [ Starting (for each filter) ] | 79 // [ Starting (for each filter) ] |
80 // | | 80 // | |
81 // V Seek()/Stop() | 81 // V Seek()/Stop() |
82 // [ Started ] -------------------------> [ Pausing (for each filter) ] 82 // [ Started ] -------------------------> [ Pausing (for each filter) ]
83 // ^ SetError() 83 // ^ SetError()
84 // | 84 // |
85 // [ Any State Other Than InitXXX ] 85 // [ Any State Other Than InitXXX ]
86
87 // 86 //
88 // Initialization is a series of state transitions from "Created" through each 87 // Initialization is a series of state transitions from "Created" through each
89 // filter initialization state. When all filter initialization states have 88 // filter initialization state. When all filter initialization states have
90 // completed, we are implicitly in a "Paused" state. At that point we simulate 89 // completed, we are implicitly in a "Paused" state. At that point we simulate
91 // a Seek() to the beginning of the media to give filters a chance to preroll. 90 // a Seek() to the beginning of the media to give filters a chance to preroll.
92 // From then on the normal Seek() transitions are carried out and we start 91 // From then on the normal Seek() transitions are carried out and we start
93 // playing the media. 92 // playing the media.
94 // 93 //
95 // If any error ever happens, this object will transition to the "Error" state 94 // If any error ever happens, this object will transition to the "Error" state
96 // from any state. If Stop() is ever called, this object will transition to 95 // from any state. If Stop() is ever called, this object will transition to
97 // "Stopped" state. 96 // "Stopped" state.
98 class MEDIA_EXPORT Pipeline 97 class MEDIA_EXPORT Pipeline
99 : public base::RefCountedThreadSafe<Pipeline>, 98 : public base::RefCountedThreadSafe<Pipeline>,
100 public DemuxerHost { 99 public DemuxerHost {
101 public: 100 public:
102 // Constructs a media pipeline that will execute on |message_loop|. 101 // Constructs a media pipeline that will execute on |message_loop|.
103 Pipeline(MessageLoop* message_loop, MediaLog* media_log); 102 Pipeline(MessageLoop* message_loop, MediaLog* media_log);
104 103
105 // Build a pipeline to using the given filter collection to construct a filter 104 // Build a pipeline to using the given filter collection to construct a filter
106 // chain. 105 // chain, executing |start_cb| when initialization has completed.
107 // 106 //
108 // Pipeline initialization is an inherently asynchronous process. Clients can 107 // The following permanent callbacks will be executed as follows up until
109 // either poll the IsInitialized() method (discouraged) or optionally pass in 108 // Stop() has completed:
Ami GONE FROM CHROMIUM 2012/08/09 20:46:23 I thought error during Stop() doesn't fire error_c
scherkus (not reviewing) 2012/08/09 21:02:59 You are correct but as discussed offline this is a
110 // |start_cb|, which will be executed when initialization completes.
111 //
112 // The following permanent callbacks will be executed as follows:
113 // |start_cb_| will be executed when Start is done (successfully or not).
114 // |ended_cb| will be executed whenever the media reaches the end. 109 // |ended_cb| will be executed whenever the media reaches the end.
115 // |error_cb_| will be executed whenever an error occurs but hasn't 110 // |error_cb| will be executed whenever an error occurs but hasn't
116 // been reported already through another callback. 111 // been reported already through another callback.
117 // 112 //
118 // These callbacks are only executed after Start() has been called and until
119 // Stop() has completed.
120 //
121 // It is an error to call this method after the pipeline has already started. 113 // It is an error to call this method after the pipeline has already started.
122 //
123 // TODO(scherkus): remove IsInitialized() and force clients to use callbacks.
124 void Start(scoped_ptr<FilterCollection> filter_collection, 114 void Start(scoped_ptr<FilterCollection> filter_collection,
125 const PipelineStatusCB& ended_cb, 115 const PipelineStatusCB& ended_cb,
126 const PipelineStatusCB& error_cb, 116 const PipelineStatusCB& error_cb,
127 const PipelineStatusCB& start_cb); 117 const PipelineStatusCB& start_cb);
128 118
129 // Asynchronously stops the pipeline and resets it to an uninitialized state. 119 // Asynchronously stops the pipeline and resets it to an uninitialized state.
130 // 120 //
131 // If provided, |stop_cb| will be executed when the pipeline has been 121 // If provided, |stop_cb| will be executed when the pipeline has been
132 // completely torn down and reset to an uninitialized state. It is acceptable 122 // completely torn down and reset to an uninitialized state. It is acceptable
133 // to call Start() again once the callback has finished executing. 123 // to call Start() again once the callback has finished executing.
(...skipping 14 matching lines...) Expand all
148 // succeeded. 138 // succeeded.
149 // 139 //
150 // It is an error to call this method if the pipeline has not started. 140 // It is an error to call this method if the pipeline has not started.
151 void Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb); 141 void Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb);
152 142
153 // Returns true if the pipeline has been started via Start(). If IsRunning() 143 // Returns true if the pipeline has been started via Start(). If IsRunning()
154 // returns true, it is expected that Stop() will be called before destroying 144 // returns true, it is expected that Stop() will be called before destroying
155 // the pipeline. 145 // the pipeline.
156 bool IsRunning() const; 146 bool IsRunning() const;
157 147
158 // Returns true if the pipeline has been started and fully initialized to a
159 // point where playback controls will be respected. Note that it is possible
160 // for a pipeline to be started but not initialized (i.e., an error occurred).
161 bool IsInitialized() const;
162
163 // Returns true if the media has audio. 148 // Returns true if the media has audio.
164 bool HasAudio() const; 149 bool HasAudio() const;
165 150
166 // Returns true if the media has video. 151 // Returns true if the media has video.
167 bool HasVideo() const; 152 bool HasVideo() const;
168 153
169 // Gets the current playback rate of the pipeline. When the pipeline is 154 // Gets the current playback rate of the pipeline. When the pipeline is
170 // started, the playback rate will be 0.0f. A rate of 1.0f indicates 155 // started, the playback rate will be 0.0f. A rate of 1.0f indicates
171 // that the pipeline is rendering the media at the standard rate. Valid 156 // that the pipeline is rendering the media at the standard rate. Valid
172 // values for playback rate are >= 0.0f. 157 // values for playback rate are >= 0.0f.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 // be 0. 194 // be 0.
210 void GetNaturalVideoSize(gfx::Size* out_size) const; 195 void GetNaturalVideoSize(gfx::Size* out_size) const;
211 196
212 // Return true if loading progress has been made since the last time this 197 // Return true if loading progress has been made since the last time this
213 // method was called. 198 // method was called.
214 bool DidLoadingProgress() const; 199 bool DidLoadingProgress() const;
215 200
216 // Gets the current pipeline statistics. 201 // Gets the current pipeline statistics.
217 PipelineStatistics GetStatistics() const; 202 PipelineStatistics GetStatistics() const;
218 203
204 // TODO(scherkus): Remove IsInitializedForTesting() after stop/error teardown
205 // paths are sane, see http://crbug.com/110228
206 bool IsInitializedForTesting();
scherkus (not reviewing) 2012/08/09 19:27:10 FYI this gets removed in follow-up CL http://coder
219 void SetClockForTesting(Clock* clock); 207 void SetClockForTesting(Clock* clock);
220 void SetErrorForTesting(PipelineStatus status); 208 void SetErrorForTesting(PipelineStatus status);
221 209
222 private: 210 private:
223 FRIEND_TEST_ALL_PREFIXES(PipelineTest, GetBufferedTimeRanges); 211 FRIEND_TEST_ALL_PREFIXES(PipelineTest, GetBufferedTimeRanges);
224 FRIEND_TEST_ALL_PREFIXES(PipelineTest, DisableAudioRenderer); 212 FRIEND_TEST_ALL_PREFIXES(PipelineTest, DisableAudioRenderer);
225 FRIEND_TEST_ALL_PREFIXES(PipelineTest, DisableAudioRendererDuringInit); 213 FRIEND_TEST_ALL_PREFIXES(PipelineTest, DisableAudioRendererDuringInit);
226 FRIEND_TEST_ALL_PREFIXES(PipelineTest, EndedCallback); 214 FRIEND_TEST_ALL_PREFIXES(PipelineTest, EndedCallback);
227 FRIEND_TEST_ALL_PREFIXES(PipelineTest, AudioStreamShorterThanVideo); 215 FRIEND_TEST_ALL_PREFIXES(PipelineTest, AudioStreamShorterThanVideo);
228 friend class MediaLog; 216 friend class MediaLog;
(...skipping 25 matching lines...) Expand all
254 242
255 // Simple method used to make sure the pipeline is running normally. 243 // Simple method used to make sure the pipeline is running normally.
256 bool IsPipelineOk(); 244 bool IsPipelineOk();
257 245
258 // Helper method to tell whether we are stopped or in error. 246 // Helper method to tell whether we are stopped or in error.
259 bool IsPipelineStopped(); 247 bool IsPipelineStopped();
260 248
261 // Helper method to tell whether we are in transition to stop state. 249 // Helper method to tell whether we are in transition to stop state.
262 bool IsPipelineTearingDown(); 250 bool IsPipelineTearingDown();
263 251
264 // We could also be delayed by a transition during seek is performed.
265 bool IsPipelineStopPending();
266
267 // Helper method to tell whether we are in transition to seek state. 252 // Helper method to tell whether we are in transition to seek state.
268 bool IsPipelineSeeking(); 253 bool IsPipelineSeeking();
269 254
270 // Helper method to execute callback from Start() and reset 255 // Helper method to execute callback from Start() and reset
271 // |filter_collection_|. Called when initialization completes 256 // |filter_collection_|. Called when initialization completes
272 // normally or when pipeline is stopped or error occurs during 257 // normally or when pipeline is stopped or error occurs during
273 // initialization. 258 // initialization.
274 void FinishInitialization(); 259 void FinishInitialization();
275 260
276 // Returns true if the given state is one that transitions to a new state 261 // Returns true if the given state is one that transitions to a new state
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 425
441 // Lock used to serialize access for the following data members. 426 // Lock used to serialize access for the following data members.
442 mutable base::Lock lock_; 427 mutable base::Lock lock_;
443 428
444 // Whether or not the pipeline is running. 429 // Whether or not the pipeline is running.
445 bool running_; 430 bool running_;
446 431
447 // Whether or not the pipeline is in transition for a seek operation. 432 // Whether or not the pipeline is in transition for a seek operation.
448 bool seek_pending_; 433 bool seek_pending_;
449 434
450 // Whether or not the pipeline is pending a stop operation.
451 bool stop_pending_;
452
453 // Whether or not the pipeline is perform a stop operation. 435 // Whether or not the pipeline is perform a stop operation.
454 bool tearing_down_; 436 bool tearing_down_;
455 437
456 // Whether or not an error triggered the teardown. 438 // Whether or not an error triggered the teardown.
457 bool error_caused_teardown_; 439 bool error_caused_teardown_;
458 440
459 // Whether or not a playback rate change should be done once seeking is done. 441 // Whether or not a playback rate change should be done once seeking is done.
460 bool playback_rate_change_pending_; 442 bool playback_rate_change_pending_;
461 443
462 // Amount of available buffered data. Set by filters. 444 // Amount of available buffered data. Set by filters.
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 base::Time creation_time_; 545 base::Time creation_time_;
564 546
565 scoped_ptr<SerialRunner> pending_callbacks_; 547 scoped_ptr<SerialRunner> pending_callbacks_;
566 548
567 DISALLOW_COPY_AND_ASSIGN(Pipeline); 549 DISALLOW_COPY_AND_ASSIGN(Pipeline);
568 }; 550 };
569 551
570 } // namespace media 552 } // namespace media
571 553
572 #endif // MEDIA_BASE_PIPELINE_H_ 554 #endif // MEDIA_BASE_PIPELINE_H_
OLDNEW
« no previous file with comments | « no previous file | media/base/pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698