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

Side by Side Diff: content/renderer/media/media_factory.h

Issue 2905613003: Extract media code from RenderFrameImpl (Closed)
Patch Set: Feedback Created 3 years, 7 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
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_FACTORY_H_
6 #define CONTENT_RENDERER_MEDIA_MEDIA_FACTORY_H_
7
8 #include <memory>
9
10 #include "base/memory/linked_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "build/buildflag.h"
13 #include "media/base/renderer_factory_selector.h"
14 #include "media/base/routing_token_callback.h"
15 #include "media/blink/url_index.h"
16 #include "media/media_features.h"
17 #include "media/mojo/features.h"
18 #include "media/mojo/interfaces/remoting.mojom.h"
19 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h"
20 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
21 #include "third_party/WebKit/public/platform/WebSetSinkIdCallbacks.h"
22 #include "third_party/WebKit/public/platform/WebString.h"
23 #include "url/gurl.h"
24
25 namespace blink {
26 class WebContentDecryptionModule;
27 class WebEncryptedMediaClient;
28 class WebLocalFrame;
29 class WebMediaPlayer;
30 class WebMediaPlayerClient;
31 class WebMediaPlayerEncryptedMediaClient;
32 }
33
34 namespace media {
35 class CdmFactory;
36 class DecoderFactory;
37 class MediaLog;
38 class MediaObserver;
39 class RendererWebMediaPlayerDelegate;
40 class SurfaceManager;
41 class WebEncryptedMediaClientImpl;
42 #if defined(OS_ANDROID)
43 class RendererMediaPlayerManager;
44 #endif
45 namespace remoting {
46 class SinkAvailabilityObserver;
47 }
48 }
49
50 namespace service_manager {
51 class InterfaceProvider;
52 namespace mojom {
53 class InterfaceProvider;
54 }
55 }
56
57 namespace content {
58
59 class RenderFrameImpl;
60 class MediaInterfaceProvider;
61 class MediaStreamRendererFactory;
62
63 #if defined(OS_ANDROID)
64 class RendererMediaPlayerManager;
65 #endif
66
67 // Assist to RenderFrameImpl in creating various media clients.
68 class MediaFactory {
69 public:
70 // Create a MediaFactory to assist the |render_frame| with media tasks.
71 // |request_routing_token_cb| bound to |render_frame| IPC functions for
72 // obtaining overlay tokens.
73 MediaFactory(RenderFrameImpl* render_frame,
74 media::RequestRoutingTokenCallback request_routing_token_cb);
75 ~MediaFactory();
76
77 // Instruct MediaFactory to establish Mojo channels as needed to perform its
78 // factory duties. This should be called by RenderFrameImpl as soon as its own
79 // interface provider is bound.
80 void SetupMojo();
81
82 // Creates a new WebMediaPlayer for the given |source| (either a stream or
83 // URL). All pointers other than |initial_cdm| are required to be non-null.
84 // The created player serves and is directed by the |client| (e.g.
85 // HTMLMediaElement). The |encrypted_client| will be used to establish
86 // means of decryption for encrypted content. |initial_cdm| should point
87 // to a ContentDecryptionModule if MediaKeys have been provided to the
88 // |encrypted_client| (otherwise null). |sink_id|, when not empty, identifies
89 // the audio sink to use for this player (see HTMLMediaElement.sinkId).
90 blink::WebMediaPlayer* CreateMediaPlayer(
91 const blink::WebMediaPlayerSource& source,
92 blink::WebMediaPlayerClient* client,
93 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
94 blink::WebContentDecryptionModule* initial_cdm,
95 const blink::WebString& sink_id);
96
97 // Provides an EncryptedMediaClient to connect blink's EME layer to media's
98 // implementation of requestMediaKeySystemAccess. Will always return the same
99 // client who's lifetime is tied to this Factory (same as the RenderFrame).
xhwang 2017/05/27 00:25:52 nit: whose
chcunningham 2017/05/27 01:38:47 Done.
100 blink::WebEncryptedMediaClient* EncryptedMediaClient();
101
102 private:
103 std::unique_ptr<media::RendererFactorySelector> CreateRendererFactorySelector(
104 media::MediaLog* media_log,
105 bool use_media_player,
106 media::DecoderFactory* decoder_factory,
107 base::WeakPtr<media::MediaObserver>* out_media_observer);
108
109 blink::WebMediaPlayer* CreateWebMediaPlayerForMediaStream(
110 blink::WebMediaPlayerClient* client,
111 const blink::WebString& sink_id,
112 const blink::WebSecurityOrigin& security_origin,
113 blink::WebLocalFrame* frame);
114
115 // Returns the media delegate for WebMediaPlayer usage. If
116 // |media_player_delegate_| is NULL, one is created.
117 media::RendererWebMediaPlayerDelegate* GetWebMediaPlayerDelegate();
118
119 // Creates a MediaStreamRendererFactory used for creating audio and video
120 // renderers for WebMediaPlayerMS.
121 std::unique_ptr<MediaStreamRendererFactory>
122 CreateMediaStreamRendererFactory();
123
124 media::DecoderFactory* GetDecoderFactory();
125
126 #if defined(OS_ANDROID)
127 RendererMediaPlayerManager* GetMediaPlayerManager();
128 #endif
129
130 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
131 media::mojom::RemoterFactory* GetRemoterFactory();
132 #endif
133
134 bool AreSecureCodecsSupported();
135
136 media::CdmFactory* GetCdmFactory();
137
138 #if BUILDFLAG(ENABLE_MOJO_MEDIA)
139 service_manager::mojom::InterfaceProvider* GetMediaInterfaceProvider();
140
141 // The media interface provider attached to this frame, lazily initialized.
142 std::unique_ptr<MediaInterfaceProvider> media_interface_provider_;
143 #endif
144
145 // The render frame we're helping. RenderFrameImpl owns this factory, so the
146 // pointer will always be valid.
147 RenderFrameImpl* render_frame_;
148
149 // Injected callback for requesting overlay routing tokens.
150 media::RequestRoutingTokenCallback request_routing_token_cb_;
151
152 // Handy pointer to RenderFrame's remote interfaces. Null until SetupMojo().
153 // Lifetime matches that of the owning |render_frame_|. Will always be valid
154 // once assigned.
155 service_manager::InterfaceProvider* remote_interfaces_;
xhwang 2017/05/27 00:25:52 = nullptr?
chcunningham 2017/05/27 01:38:47 Done.
156
157 #if defined(OS_ANDROID)
158 // Manages media players and sessions in this render frame for communicating
159 // with the real media player and sessions in the browser process.
160 // Lifetime is tied to the RenderFrame via the RenderFrameObserver interface.
161 // NOTE: This currently only being used in the case where we are casting. See
162 // also WebMediaPlayerCast (renderer side) and RemoteMediaPlayerManager
163 // (browser side).
164 RendererMediaPlayerManager* media_player_manager_ = nullptr;
165 #endif
166
167 // Handles requests for SurfaceViews for MediaPlayers.
168 // Lifetime is tied to the RenderFrame via the RenderFrameObserver interface.
169 media::SurfaceManager* media_surface_manager_ = nullptr;
170
171 // Manages play, pause notifications for WebMediaPlayer implementations; its
172 // lifetime is tied to the RenderFrame via the RenderFrameObserver interface.
173 media::RendererWebMediaPlayerDelegate* media_player_delegate_ = nullptr;
174
175 // The CDM and decoder factory attached to this frame, lazily initialized.
176 std::unique_ptr<media::DecoderFactory> decoder_factory_;
177 std::unique_ptr<media::CdmFactory> cdm_factory_;
178
179 // Media resource cache, lazily initialized.
180 linked_ptr<media::UrlIndex> url_index_;
181
182 // EncryptedMediaClient attached to this frame; lazily initialized.
183 std::unique_ptr<media::WebEncryptedMediaClientImpl>
184 web_encrypted_media_client_;
185
186 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
187 // Lazy-bound pointer to the RemoterFactory service in the browser
188 // process. Always use the GetRemoterFactory() accessor instead of this.
189 media::mojom::RemoterFactoryPtr remoter_factory_;
190
191 // An observer for the remoting sink availability that is used by
192 // media::RemotingCdmFactory to initialize media::RemotingSourceImpl. Created
193 // in the constructor of RenderFrameImpl to make sure
194 // media::RemotingSourceImpl be intialized with correct availability info.
195 // Own by media::RemotingCdmFactory after it is created.
196 std::unique_ptr<media::remoting::SinkAvailabilityObserver>
197 remoting_sink_observer_;
198 #endif
199 };
200
201 } // namespace content
202
203 #endif // CONTENT_RENDERER_MEDIA_MEDIA_FACTORY_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698