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

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

Issue 10535101: Replace Pipeline::SetNetworkActivity() with BufferedDataSource -> WebMediaPlayerImpl callback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 6 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_demuxer_host.h ('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"
(...skipping 17 matching lines...) Expand all
28 28
29 class AudioDecoder; 29 class AudioDecoder;
30 class AudioRenderer; 30 class AudioRenderer;
31 class Clock; 31 class Clock;
32 class Filter; 32 class Filter;
33 class FilterCollection; 33 class FilterCollection;
34 class MediaLog; 34 class MediaLog;
35 class VideoDecoder; 35 class VideoDecoder;
36 class VideoRenderer; 36 class VideoRenderer;
37 37
38 enum NetworkEvent {
39 DOWNLOAD_CONTINUED,
40 DOWNLOAD_PAUSED,
41 CAN_PLAY_THROUGH
42 };
43
44 // Callback that executes when a network event occurs.
45 // The parameter specifies the type of event that is being signalled.
46 typedef base::Callback<void(NetworkEvent)> NetworkEventCB;
47
48 // Adapter for using asynchronous Pipeline methods in code that wants to run 38 // Adapter for using asynchronous Pipeline methods in code that wants to run
49 // synchronously. To use, construct an instance of this class and pass the 39 // synchronously. To use, construct an instance of this class and pass the
50 // |Callback()| to the Pipeline method requiring a callback. Then Wait() for 40 // |Callback()| to the Pipeline method requiring a callback. Then Wait() for
51 // the callback to get fired and call status() to see what the callback's 41 // the callback to get fired and call status() to see what the callback's
52 // argument was. This object is for one-time use; call |Callback()| exactly 42 // argument was. This object is for one-time use; call |Callback()| exactly
53 // once. 43 // once.
54 class MEDIA_EXPORT PipelineStatusNotification { 44 class MEDIA_EXPORT PipelineStatusNotification {
55 public: 45 public:
56 PipelineStatusNotification(); 46 PipelineStatusNotification();
57 ~PipelineStatusNotification(); 47 ~PipelineStatusNotification();
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 109
120 // Build a pipeline to using the given filter collection to construct a filter 110 // Build a pipeline to using the given filter collection to construct a filter
121 // chain. 111 // chain.
122 // 112 //
123 // Pipeline initialization is an inherently asynchronous process. Clients can 113 // Pipeline initialization is an inherently asynchronous process. Clients can
124 // either poll the IsInitialized() method (discouraged) or optionally pass in 114 // either poll the IsInitialized() method (discouraged) or optionally pass in
125 // |start_cb|, which will be executed when initialization completes. 115 // |start_cb|, which will be executed when initialization completes.
126 // 116 //
127 // The following permanent callbacks will be executed as follows: 117 // The following permanent callbacks will be executed as follows:
128 // |start_cb_| will be executed when Start is done (successfully or not). 118 // |start_cb_| will be executed when Start is done (successfully or not).
129 // |network_cb_| will be executed whenever there's a network activity.
130 // |ended_cb| will be executed whenever the media reaches the end. 119 // |ended_cb| will be executed whenever the media reaches the end.
131 // |error_cb_| will be executed whenever an error occurs but hasn't 120 // |error_cb_| will be executed whenever an error occurs but hasn't
132 // been reported already through another callback. 121 // been reported already through another callback.
133 // 122 //
134 // These callbacks are only executed after Start() has been called and until 123 // These callbacks are only executed after Start() has been called and until
135 // Stop() has completed. 124 // Stop() has completed.
136 // 125 //
137 // It is an error to call this method after the pipeline has already started. 126 // It is an error to call this method after the pipeline has already started.
138 // 127 //
139 // TODO(scherkus): remove IsInitialized() and force clients to use callbacks. 128 // TODO(scherkus): remove IsInitialized() and force clients to use callbacks.
140 void Start(scoped_ptr<FilterCollection> filter_collection, 129 void Start(scoped_ptr<FilterCollection> filter_collection,
141 const PipelineStatusCB& ended_cb, 130 const PipelineStatusCB& ended_cb,
142 const PipelineStatusCB& error_cb, 131 const PipelineStatusCB& error_cb,
143 const NetworkEventCB& network_cb,
144 const PipelineStatusCB& start_cb); 132 const PipelineStatusCB& start_cb);
145 133
146 // Asynchronously stops the pipeline and resets it to an uninitialized state. 134 // Asynchronously stops the pipeline and resets it to an uninitialized state.
147 // 135 //
148 // If provided, |stop_cb| will be executed when the pipeline has been 136 // If provided, |stop_cb| will be executed when the pipeline has been
149 // completely torn down and reset to an uninitialized state. It is acceptable 137 // completely torn down and reset to an uninitialized state. It is acceptable
150 // to call Start() again once the callback has finished executing. 138 // to call Start() again once the callback has finished executing.
151 // 139 //
152 // Stop() must be called before destroying the pipeline. Clients can 140 // Stop() must be called before destroying the pipeline. Clients can
153 // determine whether Stop() must be called by checking IsRunning(). 141 // determine whether Stop() must be called by checking IsRunning().
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // Returns true if the given state is one that transitions to a new state 281 // Returns true if the given state is one that transitions to a new state
294 // after iterating through each filter. 282 // after iterating through each filter.
295 static bool TransientState(State state); 283 static bool TransientState(State state);
296 284
297 // Given the current state, returns the next state. 285 // Given the current state, returns the next state.
298 State FindNextState(State current); 286 State FindNextState(State current);
299 287
300 // DataSourceHost (by way of DemuxerHost) implementation. 288 // DataSourceHost (by way of DemuxerHost) implementation.
301 virtual void SetTotalBytes(int64 total_bytes) OVERRIDE; 289 virtual void SetTotalBytes(int64 total_bytes) OVERRIDE;
302 virtual void AddBufferedByteRange(int64 start, int64 end) OVERRIDE; 290 virtual void AddBufferedByteRange(int64 start, int64 end) OVERRIDE;
303 virtual void SetNetworkActivity(bool is_downloading_data) OVERRIDE;
304 291
305 // DemuxerHost implementaion. 292 // DemuxerHost implementaion.
306 virtual void SetDuration(base::TimeDelta duration) OVERRIDE; 293 virtual void SetDuration(base::TimeDelta duration) OVERRIDE;
307 virtual void OnDemuxerError(PipelineStatus error) OVERRIDE; 294 virtual void OnDemuxerError(PipelineStatus error) OVERRIDE;
308 295
309 // FilterHost implementation. 296 // FilterHost implementation.
310 virtual void SetError(PipelineStatus error) OVERRIDE; 297 virtual void SetError(PipelineStatus error) OVERRIDE;
311 virtual base::TimeDelta GetTime() const OVERRIDE; 298 virtual base::TimeDelta GetTime() const OVERRIDE;
312 virtual base::TimeDelta GetDuration() const OVERRIDE; 299 virtual base::TimeDelta GetDuration() const OVERRIDE;
313 virtual void SetNaturalVideoSize(const gfx::Size& size) OVERRIDE; 300 virtual void SetNaturalVideoSize(const gfx::Size& size) OVERRIDE;
(...skipping 20 matching lines...) Expand all
334 321
335 // Callback executed by video renderer to update clock time. 322 // Callback executed by video renderer to update clock time.
336 void OnVideoTimeUpdate(base::TimeDelta max_time); 323 void OnVideoTimeUpdate(base::TimeDelta max_time);
337 324
338 // The following "task" methods correspond to the public methods, but these 325 // The following "task" methods correspond to the public methods, but these
339 // methods are run as the result of posting a task to the PipelineInternal's 326 // methods are run as the result of posting a task to the PipelineInternal's
340 // message loop. 327 // message loop.
341 void StartTask(scoped_ptr<FilterCollection> filter_collection, 328 void StartTask(scoped_ptr<FilterCollection> filter_collection,
342 const PipelineStatusCB& ended_cb, 329 const PipelineStatusCB& ended_cb,
343 const PipelineStatusCB& error_cb, 330 const PipelineStatusCB& error_cb,
344 const NetworkEventCB& network_cb,
345 const PipelineStatusCB& start_cb); 331 const PipelineStatusCB& start_cb);
346 332
347 // InitializeTask() performs initialization in multiple passes. It is executed 333 // InitializeTask() performs initialization in multiple passes. It is executed
348 // as a result of calling Start() or InitializationComplete() that advances 334 // as a result of calling Start() or InitializationComplete() that advances
349 // initialization to the next state. It works as a hub of state transition for 335 // initialization to the next state. It works as a hub of state transition for
350 // initialization. One stage communicates its status to the next through 336 // initialization. One stage communicates its status to the next through
351 // |last_stage_status|. 337 // |last_stage_status|.
352 void InitializeTask(PipelineStatus last_stage_status); 338 void InitializeTask(PipelineStatus last_stage_status);
353 339
354 // Stops and destroys all filters, placing the pipeline in the kStopped state. 340 // Stops and destroys all filters, placing the pipeline in the kStopped state.
355 void StopTask(const base::Closure& stop_cb); 341 void StopTask(const base::Closure& stop_cb);
356 342
357 // Carries out stopping and destroying all filters, placing the pipeline in 343 // Carries out stopping and destroying all filters, placing the pipeline in
358 // the kError state. 344 // the kError state.
359 void ErrorChangedTask(PipelineStatus error); 345 void ErrorChangedTask(PipelineStatus error);
360 346
361 // Carries out notifying filters that the playback rate has changed. 347 // Carries out notifying filters that the playback rate has changed.
362 void PlaybackRateChangedTask(float playback_rate); 348 void PlaybackRateChangedTask(float playback_rate);
363 349
364 // Carries out notifying filters that the volume has changed. 350 // Carries out notifying filters that the volume has changed.
365 void VolumeChangedTask(float volume); 351 void VolumeChangedTask(float volume);
366 352
367 // Carries out notifying filters that we are seeking to a new timestamp. 353 // Carries out notifying filters that we are seeking to a new timestamp.
368 void SeekTask(base::TimeDelta time, const PipelineStatusCB& seek_cb); 354 void SeekTask(base::TimeDelta time, const PipelineStatusCB& seek_cb);
369 355
370 // Carries out handling a notification from a filter that it has ended. 356 // Carries out handling a notification from a filter that it has ended.
371 void NotifyEndedTask(); 357 void NotifyEndedTask();
372 358
373 // Carries out handling a notification of network event.
374 void NotifyNetworkEventTask(NetworkEvent type);
375
376 // Carries out disabling the audio renderer. 359 // Carries out disabling the audio renderer.
377 void DisableAudioRendererTask(); 360 void DisableAudioRendererTask();
378 361
379 // Carries out advancing to the next filter during Play()/Pause()/Seek(). 362 // Carries out advancing to the next filter during Play()/Pause()/Seek().
380 void FilterStateTransitionTask(); 363 void FilterStateTransitionTask();
381 364
382 // Carries out advancing to the next teardown operation. 365 // Carries out advancing to the next teardown operation.
383 void TeardownStateTransitionTask(); 366 void TeardownStateTransitionTask();
384 367
385 // Carries out stopping filter threads, deleting filters, running 368 // Carries out stopping filter threads, deleting filters, running
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 bool audio_disabled_; 521 bool audio_disabled_;
539 522
540 // Filter collection as passed in by Start(). 523 // Filter collection as passed in by Start().
541 scoped_ptr<FilterCollection> filter_collection_; 524 scoped_ptr<FilterCollection> filter_collection_;
542 525
543 // Callbacks for various pipeline operations. 526 // Callbacks for various pipeline operations.
544 PipelineStatusCB seek_cb_; 527 PipelineStatusCB seek_cb_;
545 base::Closure stop_cb_; 528 base::Closure stop_cb_;
546 PipelineStatusCB ended_cb_; 529 PipelineStatusCB ended_cb_;
547 PipelineStatusCB error_cb_; 530 PipelineStatusCB error_cb_;
548 NetworkEventCB network_cb_;
549 531
550 // Reference to the filter(s) that constitute the pipeline. 532 // Reference to the filter(s) that constitute the pipeline.
551 scoped_refptr<Filter> pipeline_filter_; 533 scoped_refptr<Filter> pipeline_filter_;
552 534
553 // Decoder reference used for signalling imminent shutdown. 535 // Decoder reference used for signalling imminent shutdown.
554 // This is a HACK necessary because WebMediaPlayerImpl::Destroy() holds the 536 // This is a HACK necessary because WebMediaPlayerImpl::Destroy() holds the
555 // renderer thread loop hostage for until PipelineImpl::Stop() calls its 537 // renderer thread loop hostage for until PipelineImpl::Stop() calls its
556 // callback. 538 // callback.
557 // This reference should only be used for this hack and no other purposes. 539 // This reference should only be used for this hack and no other purposes.
558 // http://crbug.com/110228 tracks removing this hack. 540 // http://crbug.com/110228 tracks removing this hack.
(...skipping 17 matching lines...) Expand all
576 // Time of pipeline creation; is non-zero only until the pipeline first 558 // Time of pipeline creation; is non-zero only until the pipeline first
577 // reaches "kStarted", at which point it is used & zeroed out. 559 // reaches "kStarted", at which point it is used & zeroed out.
578 base::Time creation_time_; 560 base::Time creation_time_;
579 561
580 DISALLOW_COPY_AND_ASSIGN(Pipeline); 562 DISALLOW_COPY_AND_ASSIGN(Pipeline);
581 }; 563 };
582 564
583 } // namespace media 565 } // namespace media
584 566
585 #endif // MEDIA_BASE_PIPELINE_H_ 567 #endif // MEDIA_BASE_PIPELINE_H_
OLDNEW
« no previous file with comments | « media/base/mock_demuxer_host.h ('k') | media/base/pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698