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

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

Issue 5744002: Refactor PipelineImpl to use CompositeFilter to manage Filter state transitions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix CR nits & remove dead code. Created 9 years, 11 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/base/pipeline.h ('k') | media/base/pipeline_impl.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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // Implementation of Pipeline. 5 // Implementation of Pipeline.
6 6
7 #ifndef MEDIA_BASE_PIPELINE_IMPL_H_ 7 #ifndef MEDIA_BASE_PIPELINE_IMPL_H_
8 #define MEDIA_BASE_PIPELINE_IMPL_H_ 8 #define MEDIA_BASE_PIPELINE_IMPL_H_
9 9
10 #include <set> 10 #include <set>
11 #include <string> 11 #include <string>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/gtest_prod_util.h" 14 #include "base/gtest_prod_util.h"
15 #include "base/message_loop.h" 15 #include "base/message_loop.h"
16 #include "base/ref_counted.h" 16 #include "base/ref_counted.h"
17 #include "base/scoped_ptr.h" 17 #include "base/scoped_ptr.h"
18 #include "base/threading/thread.h" 18 #include "base/threading/thread.h"
19 #include "base/time.h" 19 #include "base/time.h"
20 #include "media/base/clock.h" 20 #include "media/base/clock.h"
21 #include "media/base/composite_filter.h"
21 #include "media/base/filter_host.h" 22 #include "media/base/filter_host.h"
22 #include "media/base/pipeline.h" 23 #include "media/base/pipeline.h"
23 24
24 namespace media { 25 namespace media {
25 26
26 27
27 // PipelineImpl runs the media pipeline. Filters are created and called on the 28 // PipelineImpl runs the media pipeline. Filters are created and called on the
28 // message loop injected into this object. PipelineImpl works like a state 29 // message loop injected into this object. PipelineImpl works like a state
29 // machine to perform asynchronous initialization, pausing, seeking and playing. 30 // machine to perform asynchronous initialization, pausing, seeking and playing.
30 // 31 //
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 kStopped, 113 kStopped,
113 kError, 114 kError,
114 }; 115 };
115 116
116 virtual ~PipelineImpl(); 117 virtual ~PipelineImpl();
117 118
118 // Reset the state of the pipeline object to the initial state. This method 119 // Reset the state of the pipeline object to the initial state. This method
119 // is used by the constructor, and the Stop() method. 120 // is used by the constructor, and the Stop() method.
120 void ResetState(); 121 void ResetState();
121 122
123 // Updates |state_|. All state transitions should use this call.
124 void set_state(State next_state);
125
122 // Simple method used to make sure the pipeline is running normally. 126 // Simple method used to make sure the pipeline is running normally.
123 bool IsPipelineOk(); 127 bool IsPipelineOk();
124 128
125 // Helper method to tell whether we are in the state of initializing. 129 // Helper method to tell whether we are in the state of initializing.
126 bool IsPipelineInitializing(); 130 bool IsPipelineInitializing();
127 131
128 // Helper method to tell whether we are stopped or in error. 132 // Helper method to tell whether we are stopped or in error.
129 bool IsPipelineStopped(); 133 bool IsPipelineStopped();
130 134
131 // Helper method to tell whether we are in transition to stop state. 135 // Helper method to tell whether we are in transition to stop state.
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 // Vector of major mime types that have been rendered by this pipeline. 350 // Vector of major mime types that have been rendered by this pipeline.
347 typedef std::set<std::string> RenderedMimeTypesSet; 351 typedef std::set<std::string> RenderedMimeTypesSet;
348 RenderedMimeTypesSet rendered_mime_types_; 352 RenderedMimeTypesSet rendered_mime_types_;
349 353
350 // The following data members are only accessed by tasks posted to 354 // The following data members are only accessed by tasks posted to
351 // |message_loop_|. 355 // |message_loop_|.
352 356
353 // Member that tracks the current state. 357 // Member that tracks the current state.
354 State state_; 358 State state_;
355 359
356 // For kPausing, kSeeking and kStarting, we need to track how many filters
357 // have completed transitioning to the destination state. When
358 // |remaining_transitions_| reaches 0 the pipeline can transition out
359 // of the current state.
360 size_t remaining_transitions_;
361
362 // For kSeeking we need to remember where we're seeking between filter 360 // For kSeeking we need to remember where we're seeking between filter
363 // replies. 361 // replies.
364 base::TimeDelta seek_timestamp_; 362 base::TimeDelta seek_timestamp_;
365 363
366 // For GetCurrentBytes()/SetCurrentBytes() we need to know what byte we are 364 // For GetCurrentBytes()/SetCurrentBytes() we need to know what byte we are
367 // currently reading. 365 // currently reading.
368 int64 current_bytes_; 366 int64 current_bytes_;
369 367
370 // Set to true in DisableAudioRendererTask(). 368 // Set to true in DisableAudioRendererTask().
371 bool audio_disabled_; 369 bool audio_disabled_;
372 370
373 // Keep track of the maximum buffered position so the buffering appears 371 // Keep track of the maximum buffered position so the buffering appears
374 // smooth. 372 // smooth.
375 // TODO(vrk): This is a hack. 373 // TODO(vrk): This is a hack.
376 base::TimeDelta max_buffered_time_; 374 base::TimeDelta max_buffered_time_;
377 375
378 // Filter collection as passed in by Start(). 376 // Filter collection as passed in by Start().
379 scoped_ptr<FilterCollection> filter_collection_; 377 scoped_ptr<FilterCollection> filter_collection_;
380 378
381 // URL for the data source as passed in by Start(). 379 // URL for the data source as passed in by Start().
382 std::string url_; 380 std::string url_;
383 381
384 // Callbacks for various pipeline operations. 382 // Callbacks for various pipeline operations.
385 scoped_ptr<PipelineCallback> seek_callback_; 383 scoped_ptr<PipelineCallback> seek_callback_;
386 scoped_ptr<PipelineCallback> stop_callback_; 384 scoped_ptr<PipelineCallback> stop_callback_;
387 scoped_ptr<PipelineCallback> ended_callback_; 385 scoped_ptr<PipelineCallback> ended_callback_;
388 scoped_ptr<PipelineCallback> error_callback_; 386 scoped_ptr<PipelineCallback> error_callback_;
389 scoped_ptr<PipelineCallback> network_callback_; 387 scoped_ptr<PipelineCallback> network_callback_;
390 388
391 // Vector of our filters and map maintaining the relationship between the 389 // Reference to the filter(s) that constitute the pipeline.
392 // FilterType and the filter itself. 390 scoped_refptr<Filter> pipeline_filter_;
393 typedef std::vector<scoped_refptr<Filter> > FilterVector;
394 FilterVector filters_;
395 391
396 // Renderer references used for setting the volume and determining 392 // Renderer references used for setting the volume and determining
397 // when playback has finished. 393 // when playback has finished.
398 scoped_refptr<AudioRenderer> audio_renderer_; 394 scoped_refptr<AudioRenderer> audio_renderer_;
399 scoped_refptr<VideoRenderer> video_renderer_; 395 scoped_refptr<VideoRenderer> video_renderer_;
400 396
401 // Vector of threads owned by the pipeline and being used by filters.
402 typedef std::vector<base::Thread*> FilterThreadVector;
403 FilterThreadVector filter_threads_;
404
405 // Helper class that stores filter references during pipeline 397 // Helper class that stores filter references during pipeline
406 // initialization. 398 // initialization.
407 class PipelineInitState; 399 class PipelineInitState;
408 scoped_ptr<PipelineInitState> pipeline_init_state_; 400 scoped_ptr<PipelineInitState> pipeline_init_state_;
409 401
410 FRIEND_TEST_ALL_PREFIXES(PipelineImplTest, GetBufferedTime); 402 FRIEND_TEST_ALL_PREFIXES(PipelineImplTest, GetBufferedTime);
411 FRIEND_TEST_ALL_PREFIXES(PipelineImplTest, AudioStreamShorterThanVideo); 403 FRIEND_TEST_ALL_PREFIXES(PipelineImplTest, AudioStreamShorterThanVideo);
412 404
413 DISALLOW_COPY_AND_ASSIGN(PipelineImpl); 405 DISALLOW_COPY_AND_ASSIGN(PipelineImpl);
414 }; 406 };
415 407
416 } // namespace media 408 } // namespace media
417 409
418 #endif // MEDIA_BASE_PIPELINE_IMPL_H_ 410 #endif // MEDIA_BASE_PIPELINE_IMPL_H_
OLDNEW
« no previous file with comments | « media/base/pipeline.h ('k') | media/base/pipeline_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698