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

Side by Side Diff: media/blink/webmediaplayer_impl.h

Issue 2696663002: Media Remoting: Don't auto suspend the media pipeline. (Closed)
Patch Set: Fix tests. Created 3 years, 10 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
« no previous file with comments | « media/base/media_observer.h ('k') | media/blink/webmediaplayer_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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_BLINK_WEBMEDIAPLAYER_IMPL_H_ 5 #ifndef MEDIA_BLINK_WEBMEDIAPLAYER_IMPL_H_
6 #define MEDIA_BLINK_WEBMEDIAPLAYER_IMPL_H_ 6 #define MEDIA_BLINK_WEBMEDIAPLAYER_IMPL_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 class WebAudioSourceProviderImpl; 81 class WebAudioSourceProviderImpl;
82 class WebMediaPlayerDelegate; 82 class WebMediaPlayerDelegate;
83 83
84 // The canonical implementation of blink::WebMediaPlayer that's backed by 84 // The canonical implementation of blink::WebMediaPlayer that's backed by
85 // Pipeline. Handles normal resource loading, Media Source, and 85 // Pipeline. Handles normal resource loading, Media Source, and
86 // Encrypted Media. 86 // Encrypted Media.
87 class MEDIA_BLINK_EXPORT WebMediaPlayerImpl 87 class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
88 : public NON_EXPORTED_BASE(blink::WebMediaPlayer), 88 : public NON_EXPORTED_BASE(blink::WebMediaPlayer),
89 public NON_EXPORTED_BASE(WebMediaPlayerDelegate::Observer), 89 public NON_EXPORTED_BASE(WebMediaPlayerDelegate::Observer),
90 public NON_EXPORTED_BASE(Pipeline::Client), 90 public NON_EXPORTED_BASE(Pipeline::Client),
91 public MediaObserverClient,
91 public base::SupportsWeakPtr<WebMediaPlayerImpl> { 92 public base::SupportsWeakPtr<WebMediaPlayerImpl> {
92 public: 93 public:
93 // Constructs a WebMediaPlayer implementation using Chromium's media stack. 94 // Constructs a WebMediaPlayer implementation using Chromium's media stack.
94 // |delegate| and |renderer_factory| must not be null. 95 // |delegate| and |renderer_factory| must not be null.
95 WebMediaPlayerImpl( 96 WebMediaPlayerImpl(
96 blink::WebLocalFrame* frame, 97 blink::WebLocalFrame* frame,
97 blink::WebMediaPlayerClient* client, 98 blink::WebMediaPlayerClient* client,
98 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, 99 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
99 WebMediaPlayerDelegate* delegate, 100 WebMediaPlayerDelegate* delegate,
100 std::unique_ptr<RendererFactory> renderer_factory, 101 std::unique_ptr<RendererFactory> renderer_factory,
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 void OnRemotePlaybackEnded(); 208 void OnRemotePlaybackEnded();
208 void OnDisconnectedFromRemoteDevice(double t); 209 void OnDisconnectedFromRemoteDevice(double t);
209 void SuspendForRemote(); 210 void SuspendForRemote();
210 void DisplayCastFrameAfterSuspend(const scoped_refptr<VideoFrame>& new_frame, 211 void DisplayCastFrameAfterSuspend(const scoped_refptr<VideoFrame>& new_frame,
211 PipelineStatus status); 212 PipelineStatus status);
212 gfx::Size GetCanvasSize() const; 213 gfx::Size GetCanvasSize() const;
213 void SetDeviceScaleFactor(float scale_factor); 214 void SetDeviceScaleFactor(float scale_factor);
214 void SetUseFallbackPath(bool use_fallback_path); 215 void SetUseFallbackPath(bool use_fallback_path);
215 #endif 216 #endif
216 217
218 // MediaObserverClient implementation.
219 void SwitchRenderer(bool disable_pipeline_auto_suspend) override;
220 void ActivateViewportIntersectionMonitoring(bool activate) override;
221
217 // Called from WebMediaPlayerCast. 222 // Called from WebMediaPlayerCast.
218 // TODO(hubbe): WMPI_CAST make private. 223 // TODO(hubbe): WMPI_CAST make private.
219 void OnPipelineSeeked(bool time_updated); 224 void OnPipelineSeeked(bool time_updated);
220 225
221 // Restart the player/pipeline as soon as possible. This will destroy the
222 // current renderer, if any, and create a new one via the RendererFactory; and
223 // then seek to resume playback at the current position.
224 void ScheduleRestart();
225
226 // Called when requests to activate monitoring changes on viewport
227 // intersection.
228 void ActivateViewportIntersectionMonitoring(bool activate);
229
230 // Distinct states that |delegate_| can be in. (Public for testing.) 226 // Distinct states that |delegate_| can be in. (Public for testing.)
231 enum class DelegateState { 227 enum class DelegateState {
232 GONE, 228 GONE,
233 PLAYING, 229 PLAYING,
234 PAUSED, 230 PAUSED,
235 }; 231 };
236 232
237 // Playback state variables computed together in UpdatePlayState(). 233 // Playback state variables computed together in UpdatePlayState().
238 // (Public for testing.) 234 // (Public for testing.)
239 struct PlayState { 235 struct PlayState {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 // necessary). 285 // necessary).
290 void OnSurfaceRequested(bool decoder_requires_restart_for_overlay, 286 void OnSurfaceRequested(bool decoder_requires_restart_for_overlay,
291 const SurfaceCreatedCB& surface_created_cb); 287 const SurfaceCreatedCB& surface_created_cb);
292 288
293 // Creates a Renderer via the |renderer_factory_|. 289 // Creates a Renderer via the |renderer_factory_|.
294 std::unique_ptr<Renderer> CreateRenderer(); 290 std::unique_ptr<Renderer> CreateRenderer();
295 291
296 // Finishes starting the pipeline due to a call to load(). 292 // Finishes starting the pipeline due to a call to load().
297 void StartPipeline(); 293 void StartPipeline();
298 294
295 // Restart the player/pipeline as soon as possible. This will destroy the
296 // current renderer, if any, and create a new one via the RendererFactory; and
297 // then seek to resume playback at the current position.
298 void ScheduleRestart();
299
299 // Helpers that set the network/ready state and notifies the client if 300 // Helpers that set the network/ready state and notifies the client if
300 // they've changed. 301 // they've changed.
301 void SetNetworkState(blink::WebMediaPlayer::NetworkState state); 302 void SetNetworkState(blink::WebMediaPlayer::NetworkState state);
302 void SetReadyState(blink::WebMediaPlayer::ReadyState state); 303 void SetReadyState(blink::WebMediaPlayer::ReadyState state);
303 304
304 // Returns the current video frame from |compositor_|. Blocks until the 305 // Returns the current video frame from |compositor_|. Blocks until the
305 // compositor can return the frame. 306 // compositor can return the frame.
306 scoped_refptr<VideoFrame> GetCurrentFrameFromCompositor(); 307 scoped_refptr<VideoFrame> GetCurrentFrameFromCompositor();
307 308
308 // Called when the demuxer encounters encrypted streams. 309 // Called when the demuxer encounters encrypted streams.
(...skipping 23 matching lines...) Expand all
332 // - hasVideo(), 333 // - hasVideo(),
333 // - delegate_->IsHidden(), 334 // - delegate_->IsHidden(),
334 // - network_state_, ready_state_, 335 // - network_state_, ready_state_,
335 // - is_idle_, must_suspend_, 336 // - is_idle_, must_suspend_,
336 // - paused_, ended_, 337 // - paused_, ended_,
337 // - pending_suspend_resume_cycle_, 338 // - pending_suspend_resume_cycle_,
338 void UpdatePlayState(); 339 void UpdatePlayState();
339 340
340 // Methods internal to UpdatePlayState(). 341 // Methods internal to UpdatePlayState().
341 PlayState UpdatePlayState_ComputePlayState(bool is_remote, 342 PlayState UpdatePlayState_ComputePlayState(bool is_remote,
342 bool is_streaming, 343 bool can_auto_suspend,
343 bool is_suspended, 344 bool is_suspended,
344 bool is_backgrounded); 345 bool is_backgrounded);
345 void SetDelegateState(DelegateState new_state, bool is_idle); 346 void SetDelegateState(DelegateState new_state, bool is_idle);
346 void SetMemoryReportingState(bool is_memory_reporting_enabled); 347 void SetMemoryReportingState(bool is_memory_reporting_enabled);
347 void SetSuspendState(bool is_suspended); 348 void SetSuspendState(bool is_suspended);
348 349
349 // Called at low frequency to tell external observers how much memory we're 350 // Called at low frequency to tell external observers how much memory we're
350 // using for video playback. Called by |memory_usage_reporting_timer_|. 351 // using for video playback. Called by |memory_usage_reporting_timer_|.
351 // Memory usage reporting is done in two steps, because |demuxer_| must be 352 // Memory usage reporting is done in two steps, because |demuxer_| must be
352 // accessed on the media thread. 353 // accessed on the media thread.
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 // immediately on memory pressure notification or during the next SourceBuffer 683 // immediately on memory pressure notification or during the next SourceBuffer
683 // append (slower, but MSE spec compliant). 684 // append (slower, but MSE spec compliant).
684 bool enable_instant_source_buffer_gc_ = false; 685 bool enable_instant_source_buffer_gc_ = false;
685 686
686 // Whether disabled the video track as an optimization. 687 // Whether disabled the video track as an optimization.
687 bool video_track_disabled_ = false; 688 bool video_track_disabled_ = false;
688 689
689 // Whether the pipeline is being resumed at the moment. 690 // Whether the pipeline is being resumed at the moment.
690 bool is_pipeline_resuming_ = false; 691 bool is_pipeline_resuming_ = false;
691 692
693 // When this is true, pipeline will not be auto suspended.
694 bool disable_pipeline_auto_suspend_ = false;
695
692 // Pipeline statistics overridden by tests. 696 // Pipeline statistics overridden by tests.
693 base::Optional<PipelineStatistics> pipeline_statistics_for_test_; 697 base::Optional<PipelineStatistics> pipeline_statistics_for_test_;
694 698
695 // Pipeline media duration overridden by tests. 699 // Pipeline media duration overridden by tests.
696 base::Optional<base::TimeDelta> pipeline_media_duration_for_test_; 700 base::Optional<base::TimeDelta> pipeline_media_duration_for_test_;
697 701
698 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); 702 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
699 }; 703 };
700 704
701 } // namespace media 705 } // namespace media
702 706
703 #endif // MEDIA_BLINK_WEBMEDIAPLAYER_IMPL_H_ 707 #endif // MEDIA_BLINK_WEBMEDIAPLAYER_IMPL_H_
OLDNEW
« no previous file with comments | « media/base/media_observer.h ('k') | media/blink/webmediaplayer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698