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

Unified Diff: media/filters/remoting_controller.h

Issue 2204673004: WIP - WebMediaPlayer switch media renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Some revision. Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: media/filters/remoting_controller.h
diff --git a/media/filters/remoting_controller.h b/media/filters/remoting_controller.h
new file mode 100644
index 0000000000000000000000000000000000000000..1972b8e441fd32aecad161910d2dd32358eb167a
--- /dev/null
+++ b/media/filters/remoting_controller.h
@@ -0,0 +1,70 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_FILTERS_REMOTING_CONTROLLER_H_
+#define MEDIA_FILTERS_REMOTING_CONTROLLER_H_
+
+// This class does the following:
+// 1) Receive notification from Remoter;
+// 3) Make decision and notify the WebMediaPlayerImpl when to switch the
+// media renderer.
+//
+// It is own by media::PipelineController, and may be created in two places:
+// 1) In CdmSessionAdapter::CreateCdm(). Its ownership is passed to
+// media::PopelineController later.
+// TODO(xjz): The implementation for encrypted content case will be added in a
+// soon-upcoming change.
+// 2) In media::PipelineController if is not created before.
+//
+// TODO(xjz): Mojo service bindings will be added in a soon-upcoming change.
+namespace media {
+
+class PipelineController;
+
+class RemotingController {
+ public:
+ RemotingController();
+ // |pipeline_controller| outlives this class.
+ explicit RemotingController(PipelineController* pipeline_controller);
+ ~RemotingController();
+
+ // Notification of the remoting sink availability from Remoter.
+ void OnSinkAvailable();
+ void OnSinkGone();
+
+ // Setters.
+ void SetFullscreenMode(bool is_fullscreen);
+ void SetIsEncryptedContent();
+ void SetPipelineController(PipelineController* pipeline_controller);
+
+ // Starts/Stops remoting according to |use_remoting_renderer_|, and returns
+ // whether to use remoting renderer. This is used to tell PipelineController
+ // which renderer should be used.
+ bool ShouldUseRemotingRenderer();
+
+ private:
+ bool isVideoDecoderSupported();
+ bool isAudioDecoderSupported();
+
+ // Makes decision on which renderer should be used.
+ void Update();
+
+ // Indicates whether this media element or its ancestor enters full screen.
+ bool is_fullscreen_;
+
+ // Indicates whether WebMediaPlayerImpl encounters encrypted content.
+ bool is_encrypted_content_;
+
+ // Indicates the remoting sink availablity.
+ bool is_sink_available_;
+
+ // Indicates whether we should use remoting renderer.
+ bool use_remoting_renderer_;
+
+ PipelineController* pipeline_controller_;
+};
+
+} // namespace media
+
+#endif // MEDIA_FILTERS_REMOTING_CONTROLLER_H_

Powered by Google App Engine
This is Rietveld 408576698