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

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

Issue 9860027: Remove DemuxerFactory and URL parameter from Pipeline. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: again Created 8 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/base/mock_filters.cc ('k') | 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"
11 #include "base/synchronization/condition_variable.h" 11 #include "base/synchronization/condition_variable.h"
12 #include "base/synchronization/lock.h" 12 #include "base/synchronization/lock.h"
13 #include "media/base/demuxer.h" 13 #include "media/base/demuxer.h"
14 #include "media/base/download_rate_monitor.h" 14 #include "media/base/download_rate_monitor.h"
15 #include "media/base/filter_host.h" 15 #include "media/base/filter_host.h"
16 #include "media/base/media_export.h" 16 #include "media/base/media_export.h"
17 #include "media/base/pipeline_status.h" 17 #include "media/base/pipeline_status.h"
18 #include "media/base/preload.h"
19 #include "ui/gfx/size.h" 18 #include "ui/gfx/size.h"
20 19
21 class MessageLoop; 20 class MessageLoop;
22 21
23 namespace base { 22 namespace base {
24 class TimeDelta; 23 class TimeDelta;
25 } 24 }
26 25
27 namespace media { 26 namespace media {
28 27
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 // from any state. If Stop() is ever called, this object will transition to 109 // from any state. If Stop() is ever called, this object will transition to
111 // "Stopped" state. 110 // "Stopped" state.
112 class MEDIA_EXPORT Pipeline 111 class MEDIA_EXPORT Pipeline
113 : public base::RefCountedThreadSafe<Pipeline>, 112 : public base::RefCountedThreadSafe<Pipeline>,
114 public FilterHost, 113 public FilterHost,
115 public DemuxerHost { 114 public DemuxerHost {
116 public: 115 public:
117 // Constructs a media pipeline that will execute on |message_loop|. 116 // Constructs a media pipeline that will execute on |message_loop|.
118 Pipeline(MessageLoop* message_loop, MediaLog* media_log); 117 Pipeline(MessageLoop* message_loop, MediaLog* media_log);
119 118
120 // Build a pipeline to render the given URL using the given filter collection 119 // Build a pipeline to using the given filter collection to construct a filter
121 // to construct a filter chain. 120 // chain.
122 // 121 //
123 // Pipeline initialization is an inherently asynchronous process. Clients can 122 // Pipeline initialization is an inherently asynchronous process. Clients can
124 // either poll the IsInitialized() method (discouraged) or optionally pass in 123 // either poll the IsInitialized() method (discouraged) or optionally pass in
125 // |start_cb|, which will be executed when initialization completes. 124 // |start_cb|, which will be executed when initialization completes.
126 // 125 //
127 // The following permanent callbacks will be executed as follows: 126 // The following permanent callbacks will be executed as follows:
128 // |start_cb_| will be executed when Start is done (successfully or not). 127 // |start_cb_| will be executed when Start is done (successfully or not).
129 // |network_cb_| will be executed whenever there's a network activity. 128 // |network_cb_| will be executed whenever there's a network activity.
130 // |ended_cb| will be executed whenever the media reaches the end. 129 // |ended_cb| will be executed whenever the media reaches the end.
131 // |error_cb_| will be executed whenever an error occurs but hasn't 130 // |error_cb_| will be executed whenever an error occurs but hasn't
132 // been reported already through another callback. 131 // been reported already through another callback.
133 // 132 //
134 // These callbacks are only executed after Start() has been called and until 133 // These callbacks are only executed after Start() has been called and until
135 // Stop() has completed. 134 // Stop() has completed.
136 // 135 //
137 // It is an error to call this method after the pipeline has already started. 136 // It is an error to call this method after the pipeline has already started.
138 // 137 //
139 // TODO(scherkus): remove IsInitialized() and force clients to use callbacks. 138 // TODO(scherkus): remove IsInitialized() and force clients to use callbacks.
140 void Start(scoped_ptr<FilterCollection> filter_collection, 139 void Start(scoped_ptr<FilterCollection> filter_collection,
141 const std::string& url,
142 const PipelineStatusCB& ended_cb, 140 const PipelineStatusCB& ended_cb,
143 const PipelineStatusCB& error_cb, 141 const PipelineStatusCB& error_cb,
144 const NetworkEventCB& network_cb, 142 const NetworkEventCB& network_cb,
145 const PipelineStatusCB& start_cb); 143 const PipelineStatusCB& start_cb);
146 144
147 // Asynchronously stops the pipeline and resets it to an uninitialized state. 145 // Asynchronously stops the pipeline and resets it to an uninitialized state.
148 // 146 //
149 // If provided, |stop_cb| will be executed when the pipeline has been 147 // If provided, |stop_cb| will be executed when the pipeline has been
150 // completely torn down and reset to an uninitialized state. It is acceptable 148 // completely torn down and reset to an uninitialized state. It is acceptable
151 // to call Start() again once the callback has finished executing. 149 // to call Start() again once the callback has finished executing.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // Gets the current volume setting being used by the audio renderer. When 198 // Gets the current volume setting being used by the audio renderer. When
201 // the pipeline is started, this value will be 1.0f. Valid values range 199 // the pipeline is started, this value will be 1.0f. Valid values range
202 // from 0.0f to 1.0f. 200 // from 0.0f to 1.0f.
203 float GetVolume() const; 201 float GetVolume() const;
204 202
205 // Attempt to set the volume of the audio renderer. Valid values for volume 203 // Attempt to set the volume of the audio renderer. Valid values for volume
206 // range from 0.0f (muted) to 1.0f (full volume). This value affects all 204 // range from 0.0f (muted) to 1.0f (full volume). This value affects all
207 // channels proportionately for multi-channel audio streams. 205 // channels proportionately for multi-channel audio streams.
208 void SetVolume(float volume); 206 void SetVolume(float volume);
209 207
210 // Set the preload value for the pipeline.
211 void SetPreload(Preload preload);
212
213 // Gets the current pipeline time. For a pipeline "time" progresses from 0 to 208 // Gets the current pipeline time. For a pipeline "time" progresses from 0 to
214 // the end of the media. 209 // the end of the media.
215 base::TimeDelta GetCurrentTime() const; 210 base::TimeDelta GetCurrentTime() const;
216 211
217 // Get the approximate amount of playable data buffered so far in micro- 212 // Get the approximate amount of playable data buffered so far in micro-
218 // seconds. 213 // seconds.
219 base::TimeDelta GetBufferedTime(); 214 base::TimeDelta GetBufferedTime();
220 215
221 // Get the duration of the media in microseconds. If the duration has not 216 // Get the duration of the media in microseconds. If the duration has not
222 // been determined yet, then returns 0. 217 // been determined yet, then returns 0.
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 // Callback executed by audio renderer to update clock time. 342 // Callback executed by audio renderer to update clock time.
348 void OnAudioTimeUpdate(base::TimeDelta time, base::TimeDelta max_time); 343 void OnAudioTimeUpdate(base::TimeDelta time, base::TimeDelta max_time);
349 344
350 // Callback executed by video renderer to update clock time. 345 // Callback executed by video renderer to update clock time.
351 void OnVideoTimeUpdate(base::TimeDelta max_time); 346 void OnVideoTimeUpdate(base::TimeDelta max_time);
352 347
353 // The following "task" methods correspond to the public methods, but these 348 // The following "task" methods correspond to the public methods, but these
354 // methods are run as the result of posting a task to the PipelineInternal's 349 // methods are run as the result of posting a task to the PipelineInternal's
355 // message loop. 350 // message loop.
356 void StartTask(scoped_ptr<FilterCollection> filter_collection, 351 void StartTask(scoped_ptr<FilterCollection> filter_collection,
357 const std::string& url,
358 const PipelineStatusCB& ended_cb, 352 const PipelineStatusCB& ended_cb,
359 const PipelineStatusCB& error_cb, 353 const PipelineStatusCB& error_cb,
360 const NetworkEventCB& network_cb, 354 const NetworkEventCB& network_cb,
361 const PipelineStatusCB& start_cb); 355 const PipelineStatusCB& start_cb);
362 356
363 // InitializeTask() performs initialization in multiple passes. It is executed 357 // InitializeTask() performs initialization in multiple passes. It is executed
364 // as a result of calling Start() or InitializationComplete() that advances 358 // as a result of calling Start() or InitializationComplete() that advances
365 // initialization to the next state. It works as a hub of state transition for 359 // initialization to the next state. It works as a hub of state transition for
366 // initialization. One stage communicates its status to the next through 360 // initialization. One stage communicates its status to the next through
367 // |last_stage_status|. 361 // |last_stage_status|.
368 void InitializeTask(PipelineStatus last_stage_status); 362 void InitializeTask(PipelineStatus last_stage_status);
369 363
370 // Stops and destroys all filters, placing the pipeline in the kStopped state. 364 // Stops and destroys all filters, placing the pipeline in the kStopped state.
371 void StopTask(const base::Closure& stop_cb); 365 void StopTask(const base::Closure& stop_cb);
372 366
373 // Carries out stopping and destroying all filters, placing the pipeline in 367 // Carries out stopping and destroying all filters, placing the pipeline in
374 // the kError state. 368 // the kError state.
375 void ErrorChangedTask(PipelineStatus error); 369 void ErrorChangedTask(PipelineStatus error);
376 370
377 // Carries out notifying filters that the playback rate has changed. 371 // Carries out notifying filters that the playback rate has changed.
378 void PlaybackRateChangedTask(float playback_rate); 372 void PlaybackRateChangedTask(float playback_rate);
379 373
380 // Carries out notifying filters that the volume has changed. 374 // Carries out notifying filters that the volume has changed.
381 void VolumeChangedTask(float volume); 375 void VolumeChangedTask(float volume);
382 376
383 // Returns media preload value.
384 virtual Preload GetPreload() const;
385
386 // Carries out notifying filters that the preload value has changed.
387 void PreloadChangedTask(Preload preload);
388
389 // Carries out notifying filters that we are seeking to a new timestamp. 377 // Carries out notifying filters that we are seeking to a new timestamp.
390 void SeekTask(base::TimeDelta time, const PipelineStatusCB& seek_cb); 378 void SeekTask(base::TimeDelta time, const PipelineStatusCB& seek_cb);
391 379
392 // Carries out handling a notification from a filter that it has ended. 380 // Carries out handling a notification from a filter that it has ended.
393 void NotifyEndedTask(); 381 void NotifyEndedTask();
394 382
395 // Carries out handling a notification of network event. 383 // Carries out handling a notification of network event.
396 void NotifyNetworkEventTask(NetworkEvent type); 384 void NotifyNetworkEventTask(NetworkEvent type);
397 385
398 // Carries out disabling the audio renderer. 386 // Carries out disabling the audio renderer.
399 void DisableAudioRendererTask(); 387 void DisableAudioRendererTask();
400 388
401 // Carries out advancing to the next filter during Play()/Pause()/Seek(). 389 // Carries out advancing to the next filter during Play()/Pause()/Seek().
402 void FilterStateTransitionTask(); 390 void FilterStateTransitionTask();
403 391
404 // Carries out advancing to the next teardown operation. 392 // Carries out advancing to the next teardown operation.
405 void TeardownStateTransitionTask(); 393 void TeardownStateTransitionTask();
406 394
407 // Carries out stopping filter threads, deleting filters, running 395 // Carries out stopping filter threads, deleting filters, running
408 // appropriate callbacks, and setting the appropriate pipeline state 396 // appropriate callbacks, and setting the appropriate pipeline state
409 // depending on whether we performing Stop() or SetError(). 397 // depending on whether we performing Stop() or SetError().
410 // Called after all filters have been stopped. 398 // Called after all filters have been stopped.
411 void FinishDestroyingFiltersTask(); 399 void FinishDestroyingFiltersTask();
412 400
413 // Internal methods used in the implementation of the pipeline thread. All 401 // Internal methods used in the implementation of the pipeline thread. All
414 // of these methods are only called on the pipeline thread. 402 // of these methods are only called on the pipeline thread.
415 403
416 // The following initialize methods are used to select a specific type of 404 // The following initialize methods are used to select a specific type of
417 // Filter object from FilterCollection and initialize it asynchronously. 405 // object from FilterCollection and initialize it asynchronously.
418 void InitializeDemuxer(); 406 void InitializeDemuxer();
419 void OnDemuxerBuilt(PipelineStatus status, Demuxer* demuxer); 407 void OnDemuxerInitialized(PipelineStatus status);
420 408
421 // Returns true if the asynchronous action of creating decoder has started. 409 // Returns true if the asynchronous action of creating decoder has started.
422 // Returns false if this method did nothing because the corresponding 410 // Returns false if this method did nothing because the corresponding
423 // audio/video stream does not exist. 411 // audio/video stream does not exist.
424 bool InitializeAudioDecoder(const scoped_refptr<Demuxer>& demuxer); 412 bool InitializeAudioDecoder(const scoped_refptr<Demuxer>& demuxer);
425 bool InitializeVideoDecoder(const scoped_refptr<Demuxer>& demuxer); 413 bool InitializeVideoDecoder(const scoped_refptr<Demuxer>& demuxer);
426 414
427 // Initializes a renderer and connects it with decoder. Returns true if the 415 // Initializes a renderer and connects it with decoder. Returns true if the
428 // asynchronous action of creating renderer has started. Returns 416 // asynchronous action of creating renderer has started. Returns
429 // false if this method did nothing because the corresponding audio/video 417 // false if this method did nothing because the corresponding audio/video
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 508
521 // Indicates whether the data source is local, such as a local media file 509 // Indicates whether the data source is local, such as a local media file
522 // from disk or a local webcam stream. 510 // from disk or a local webcam stream.
523 bool local_source_; 511 bool local_source_;
524 512
525 // Current volume level (from 0.0f to 1.0f). This value is set immediately 513 // Current volume level (from 0.0f to 1.0f). This value is set immediately
526 // via SetVolume() and a task is dispatched on the message loop to notify the 514 // via SetVolume() and a task is dispatched on the message loop to notify the
527 // filters. 515 // filters.
528 float volume_; 516 float volume_;
529 517
530 // Current value of preload attribute. This value is set immediately via
531 // SetPreload() and a task is dispatched on the message loop to notify the
532 // filters.
533 Preload preload_;
534
535 // Current playback rate (>= 0.0f). This value is set immediately via 518 // Current playback rate (>= 0.0f). This value is set immediately via
536 // SetPlaybackRate() and a task is dispatched on the message loop to notify 519 // SetPlaybackRate() and a task is dispatched on the message loop to notify
537 // the filters. 520 // the filters.
538 float playback_rate_; 521 float playback_rate_;
539 522
540 // Playback rate to set when the current seek has finished. 523 // Playback rate to set when the current seek has finished.
541 float pending_playback_rate_; 524 float pending_playback_rate_;
542 525
543 // Reference clock. Keeps track of current playback time. Uses system 526 // Reference clock. Keeps track of current playback time. Uses system
544 // clock and linear interpolation, but can have its time manually set 527 // clock and linear interpolation, but can have its time manually set
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 bool audio_disabled_; 564 bool audio_disabled_;
582 565
583 // Keep track of the maximum buffered position so the buffering appears 566 // Keep track of the maximum buffered position so the buffering appears
584 // smooth. 567 // smooth.
585 // TODO(vrk): This is a hack. 568 // TODO(vrk): This is a hack.
586 base::TimeDelta max_buffered_time_; 569 base::TimeDelta max_buffered_time_;
587 570
588 // Filter collection as passed in by Start(). 571 // Filter collection as passed in by Start().
589 scoped_ptr<FilterCollection> filter_collection_; 572 scoped_ptr<FilterCollection> filter_collection_;
590 573
591 // URL for the data source as passed in by Start().
592 std::string url_;
593
594 // Callbacks for various pipeline operations. 574 // Callbacks for various pipeline operations.
595 PipelineStatusCB seek_cb_; 575 PipelineStatusCB seek_cb_;
596 base::Closure stop_cb_; 576 base::Closure stop_cb_;
597 PipelineStatusCB ended_cb_; 577 PipelineStatusCB ended_cb_;
598 PipelineStatusCB error_cb_; 578 PipelineStatusCB error_cb_;
599 NetworkEventCB network_cb_; 579 NetworkEventCB network_cb_;
600 580
601 // Reference to the filter(s) that constitute the pipeline. 581 // Reference to the filter(s) that constitute the pipeline.
602 scoped_refptr<Filter> pipeline_filter_; 582 scoped_refptr<Filter> pipeline_filter_;
603 583
(...skipping 29 matching lines...) Expand all
633 613
634 // True if the pipeline is actively downloading bytes, false otherwise. 614 // True if the pipeline is actively downloading bytes, false otherwise.
635 bool is_downloading_data_; 615 bool is_downloading_data_;
636 616
637 DISALLOW_COPY_AND_ASSIGN(Pipeline); 617 DISALLOW_COPY_AND_ASSIGN(Pipeline);
638 }; 618 };
639 619
640 } // namespace media 620 } // namespace media
641 621
642 #endif // MEDIA_BASE_PIPELINE_H_ 622 #endif // MEDIA_BASE_PIPELINE_H_
OLDNEW
« no previous file with comments | « media/base/mock_filters.cc ('k') | media/base/pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698