1 // Copyright 2014 Samsung Electronics Inc. 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.
5 #ifndef CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_MEDIA_PLAYER_MANAGER_EFL_H_
6 #define CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_MEDIA_PLAYER_MANAGER_EFL_H_
8 #include <unordered_map>
10 #include "base/containers/scoped_ptr_hash_map.h"
11 #include "content/common/media/media_player_messages_enums_efl.h"
12 #include "content/public/browser/browser_message_filter.h"
13 #include "content/public/browser/render_frame_host.h"
14 #include "content/public/browser/web_contents_observer.h"
15 #include "media/base/tizen/media_player_interface_efl.h"
16 #include "media/base/tizen/media_player_manager_efl.h"
17 #include "media/base/tizen/media_capability_manager.h"
18 #include "media/base/tizen/longest_conflict_strategy.h"
19 #include "third_party/WebKit/public/platform/WebMediaPlayer.h"
21 #if defined(TIZEN_EXTERNAL_MEDIA_EVENT)
22 #include "base/external_device/external_input_device_controller_tizen.h"
25 #if defined(TIZEN_VIDEO_HOLE)
34 // This class manages all the MediaPlayerEfl objects. It receives
35 // control operations from the the render process, and forwards
36 // them to corresponding MediaPlayerEfl object. Callbacks from
37 // MediaPlayerEfl objects are converted to IPCs and then sent to the
39 class CONTENT_EXPORT BrowserMediaPlayerManagerEfl
40 : public media::MediaPlayerManager {
42 // Returns a new instance using the registered factory if available.
43 static BrowserMediaPlayerManagerEfl* GetInstance();
44 ~BrowserMediaPlayerManagerEfl() override;
46 // media::MediaPlayerManager implementation.
47 media::MediaPlayerInterfaceEfl* GetPlayer(int player_id) override;
48 void OnTimeChanged(int player_id) override;
49 void OnTimeUpdate(int player_id, base::TimeDelta current_time) override;
50 void OnPauseStateChange(int player_id, bool state) override;
51 void OnSeekComplete(int player_id) override;
52 void OnRequestSeek(int player_id, base::TimeDelta seek_time) override;
53 void OnBufferUpdate(int player_id, int percentage) override;
54 void OnDurationChange(int player_id, base::TimeDelta duration) override;
55 void OnReadyStateChange(int player_id,
56 blink::WebMediaPlayer::ReadyState state) override;
57 void OnNetworkStateChange(int player_id,
58 blink::WebMediaPlayer::NetworkState state) override;
59 void OnMediaDataChange(int player_id,
63 void OnNewFrameAvailable(int player_id,
64 base::SharedMemoryHandle foreign_memory_handle,
66 base::TimeDelta timestamp) override;
68 #if defined(TIZEN_TBM_SUPPORT)
69 void OnNewTbmBufferAvailable(int player_id,
70 gfx::TbmBufferHandle tbm_handle,
71 base::TimeDelta timestamp) override;
74 #if defined(OS_TIZEN_TV_PRODUCT)
75 #if defined(TIZEN_TBM_SUPPORT)
76 void OnNotifyVideoTexturing(int player_id);
78 void OnAddAudioTrack(int player_id,
79 const std::string& kind,
80 const std::string& language,
81 const std::string& id,
82 bool selected) override;
83 void OnAddVideoTrack(int player_id,
84 const std::string& kind,
85 const std::string& language,
86 const std::string& id,
87 bool selected) override;
88 void OnAddTextTrack(int player_id,
89 const std::string& label,
90 const std::string& language,
91 const std::string& id) override;
92 void OnSeekableTimeChange(int player_id,
93 base::TimeDelta min_time,
94 base::TimeDelta max_time) override;
95 void OnDrmError(int player_id) override;
98 #if defined(TIZEN_EXTERNAL_MEDIA_EVENT)
99 void ReleaseKeyGrab(int player_id) override;
100 void AcquireKeyGrab(int player_id) override;
103 // Helper function to handle IPC from RenderMediaPlayerManagerEfl.
104 void OnPlay(RenderFrameHost* render_frame_host, int player_id);
105 void OnPause(RenderFrameHost* render_frame_host,
107 bool is_media_related_action);
108 void OnSetVolume(RenderFrameHost* render_frame_host,
112 RenderFrameHost* render_frame_host, int player_id, double rate);
113 void OnInitialize(RenderFrameHost* render_frame_host,
115 MediaPlayerHostMsg_Initialize_Type type,
117 const std::string& mime_type,
118 int demuxer_client_id);
119 void OnDestroy(RenderFrameHost* render_frame_host, int player_id);
121 RenderFrameHost* render_frame_host, int player_id, base::TimeDelta time);
122 void OnSuspend(RenderFrameHost* render_frame_host, int player_id);
123 void OnResume(RenderFrameHost* render_frame_host,
125 bool is_last_played_player);
126 void OnActivate(RenderFrameHost* render_frame_host, int player_id);
127 void OnDeactivate(RenderFrameHost* render_frame_host, int player_id);
129 #if defined(TIZEN_MULTIMEDIA_SUPPORT)
130 void OnLaunchSystemVolumeController(RenderFrameHost* render_frame_host,
134 #if defined(TIZEN_VIDEO_HOLE)
135 gfx::Rect GetViewportRect() const override;
136 void OnSetGeometry(int player_id, const gfx::RectF& rect);
137 void OnWebViewMoved();
140 #if defined(OS_TIZEN_TV_PRODUCT)
141 void OnInbandEventTextTrack(int player_id, const std::string& info) override;
142 void OnInbandEventTextCue(int player_id,
143 const std::string& info,
145 long long int start_time,
146 long long int end_time) override;
148 // Notify the playing video dimension for floating Video feature
149 void NotifyPlayingVideoRect(int player_id, const gfx::RectF& rect);
152 void CleanUpBelongToRenderFrameHost(RenderFrameHost* render_frame_host);
154 void OnEnteredFullscreen(int player_id);
155 void OnExitedFullscreen(int player_id);
156 WebContents* GetWebContents(int player_id) override;
158 #if defined(TIZEN_EXTERNAL_MEDIA_EVENT)
159 // Handles play/pause events from bluetooth or headphones.
160 void OnMediaKeyDownEvent(int player_id, const char* keyname);
163 void OnGetStartDate(int player_id, double* start_date);
166 // Clients must use Create() or subclass constructor.
167 BrowserMediaPlayerManagerEfl();
169 void AddPlayer(int player_id, media::MediaPlayerInterfaceEfl* player);
170 void RemovePlayer(int player_id);
172 // To continue initializing of other players in queue.
173 void OnInitComplete(int player_id, bool success) override;
175 // To manage resumed/suspended player id.
176 void OnResumeComplete(int player_id) override;
177 void OnSuspendComplete(int player_id) override;
179 // Helper function to send messages to RenderFrameObserver.
180 bool Send(int player_id, IPC::Message* msg);
182 RenderFrameHost* GetRenderFrameHostFromPlayerID(int player_id) const;
183 int GetRoutingID(int player_id) const;
185 void OnPlayerSuspendRequest(int player_id) override;
187 #if defined(TIZEN_MULTIMEDIA_SUPPORT)
188 void OnSystemVolumeChange(int player_id, int volume) override;
192 friend struct base::DefaultSingletonTraits<BrowserMediaPlayerManagerEfl>;
194 void PauseOtherPlayers(int player_id);
196 // MediaCapabilityManager graph traversing API
197 bool ActivatePlayer(media::MediaPlayerInterfaceEfl* player);
198 void Activate(media::MediaPlayerInterfaceEfl* player);
199 void Deactivate(media::MediaPlayerInterfaceEfl* player);
200 void Show(media::MediaPlayerInterfaceEfl* player);
201 void Hide(media::MediaPlayerInterfaceEfl* player);
202 void SuspendPlayer(media::MediaPlayerInterfaceEfl* player, bool preempted);
203 std::function<bool(media::MediaPlayerInterfaceEfl*)> PreemptPlayerCb();
204 #if defined(OS_TIZEN_TV_PRODUCT)
205 double getAmplifiedVolume(double volume);
207 #if defined(TIZEN_EXTERNAL_MEDIA_EVENT)
208 Ecore_Wl_Window* GetEvasObject(RenderFrameHost* render_frame_host);
211 // An array of managed players.
212 base::ScopedPtrHashMap<int, std::unique_ptr<media::MediaPlayerInterfaceEfl>>
215 typedef std::unordered_map<int, RenderFrameHost*> RenderFrameHostMap;
216 RenderFrameHostMap render_frame_host_map_;
218 media::MediaCapabilityManager<media::LongestConflictStrategy>
219 media_capability_manager_;
221 #if defined(TIZEN_EXTERNAL_MEDIA_EVENT)
222 base::ExternalInputDeviceController* external_event_controller_ = nullptr;
225 DISALLOW_COPY_AND_ASSIGN(BrowserMediaPlayerManagerEfl);
228 } // namespace content
230 #endif // CONTENT_BROWSER_MEDIA_TIZEN_BROWSER_MEDIA_PLAYER_MANAGER_EFL_H_