2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Runtime.InteropServices;
19 using Tizen.Applications;
20 using Tizen.Multimedia.Remoting;
22 internal static partial class Interop
24 internal static partial class MediaControllerClient
26 #region Callback delegate
27 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
28 internal delegate bool ActivatedServerCallback(string serverName, IntPtr userData);
32 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
33 internal delegate void ServerUpdatedCallback(string serverName, MediaControllerNativeServerState serverState,
36 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
37 internal delegate void PlaybackUpdatedCallback(string serverName, IntPtr playback, IntPtr userData);
39 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
40 internal delegate void ShuffleModeUpdatedCallback(string serverName, MediaControllerNativeShuffleMode shuffleMode,
43 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
44 internal delegate void RepeatModeUpdatedCallback(string serverName, MediaControllerNativeRepeatMode repeatMode,
47 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
48 internal delegate void DisplayModeUpdatedCallback(string serverName, MediaControlNativeDisplayMode isEnabned, IntPtr userData);
50 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
51 internal delegate void DisplayRotationUpdatedCallback(string serverName, MediaControlNativeDisplayRotation isEnabned, IntPtr userData);
53 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
54 internal delegate void BoolAttributeUpdatedCallback(string serverName, bool isEnabled, IntPtr userData);
57 // Capability updated callbacks
58 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
59 internal delegate void PlaybackCapabilityUpdatedCallback(string serverName, IntPtr capaHandle, IntPtr userData);
61 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
62 internal delegate void CategoryAttributeCapabilityUpdatedCallback(string serverName, uint updatedItem,
65 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
66 internal delegate void SimpleCapabilityUpdatedCallback(string serverName, MediaControlNativeCapabilityCategory category,
67 MediaControlCapabilitySupport support, IntPtr userData);
71 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
72 internal delegate void CommandCompletedCallback(string serverName, string requestId, MediaControllerError result,
73 IntPtr bundleHandle, IntPtr userData);
75 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
76 internal delegate void CustomCommandReceivedCallback(string serverName, string requestId, string customEvent, IntPtr bundleHandle, IntPtr userData);
77 #endregion Callback delegate
80 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_create")]
81 internal static extern MediaControllerError Create(out MediaControllerClientHandle handle);
83 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy")]
84 internal static extern MediaControllerError Destroy(IntPtr handle);
86 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy_playback")]
87 internal static extern MediaControllerError DestroyPlayback(IntPtr playback);
89 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server")]
90 internal static extern MediaControllerError ForeachActivatedServer(MediaControllerClientHandle handle,
91 ActivatedServerCallback callback, IntPtr userData);
94 #region Get information
95 // Playback information
96 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_info")]
97 internal static extern MediaControllerError GetServerPlaybackHandle(MediaControllerClientHandle handle,
98 string serverName, out IntPtr playback);
100 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_state")]
101 internal static extern MediaControllerError GetPlaybackState(IntPtr playbackHandle, out MediaControllerNativePlaybackState state);
103 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_position")]
104 internal static extern MediaControllerError GetPlaybackPosition(IntPtr playbackHandle, out ulong position);
106 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_age_rating")]
107 internal static extern MediaControllerError GetAgeRating(IntPtr playbackHandle, out int rating);
109 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_content_type")]
110 internal static extern MediaControllerError GetPlaybackContentType(IntPtr playbackHandle,
111 out MediaControlContentType type);
113 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_latest_server_info")]
114 internal static extern MediaControllerError GetLatestServer(MediaControllerClientHandle handle,
115 out IntPtr serverName, out MediaControllerNativeServerState serverState);
117 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_shuffle_mode")]
118 internal static extern MediaControllerError GetServerShuffleMode(MediaControllerClientHandle handle,
119 string serverName, out MediaControllerNativeShuffleMode mode);
121 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_repeat_mode")]
122 internal static extern MediaControllerError GetServerRepeatMode(MediaControllerClientHandle handle,
123 string serverName, out MediaControllerNativeRepeatMode mode);
125 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_icon")]
126 internal static extern MediaControllerError GetServerIcon(MediaControllerClientHandle clientHandle,
127 string serverName, out string uri);
129 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_subtitles_enabled")]
130 internal static extern MediaControllerError IsSubtitleEnabled(MediaControllerClientHandle clientHandle,
131 string serverName, out bool isEnabled);
133 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_360_mode_enabled")]
134 internal static extern MediaControllerError IsMode360Enabled(MediaControllerClientHandle clientHandle,
135 string serverName, out bool isEnabled);
137 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_mode")]
138 internal static extern MediaControllerError GetDisplayMode(MediaControllerClientHandle clientHandle,
139 string serverName, out MediaControlNativeDisplayMode mode);
141 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_rotation")]
142 internal static extern MediaControllerError GetDisplayRotation(MediaControllerClientHandle clientHandle,
143 string serverName, out MediaControlNativeDisplayRotation mode);
144 #endregion Get information
147 #region Updated callback
148 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_server_updated_cb")]
149 internal static extern MediaControllerError SetServerUpdatedCb(MediaControllerClientHandle handle,
150 ServerUpdatedCallback callback, IntPtr userData = default(IntPtr));
152 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_server_updated_cb")]
153 internal static extern MediaControllerError UnsetServerUpdatedCb(MediaControllerClientHandle handle);
155 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_updated_cb")]
156 internal static extern MediaControllerError SetPlaybackUpdatedCb(MediaControllerClientHandle handle,
157 PlaybackUpdatedCallback callback, IntPtr userData = default(IntPtr));
159 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_updated_cb")]
160 internal static extern MediaControllerError UnsetPlaybackUpdatedCb(MediaControllerClientHandle handle);
162 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_shuffle_mode_updated_cb")]
163 internal static extern MediaControllerError SetShuffleModeUpdatedCb(MediaControllerClientHandle handle,
164 ShuffleModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
166 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_mode_updated_cb")]
167 internal static extern MediaControllerError UnsetShuffleModeUpdatedCb(MediaControllerClientHandle handle);
169 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_repeat_mode_updated_cb")]
170 internal static extern MediaControllerError SetRepeatModeUpdatedCb(MediaControllerClientHandle handle,
171 RepeatModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
173 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_mode_updated_cb")]
174 internal static extern MediaControllerError UnsetRepeatModeUpdatedCb(MediaControllerClientHandle handle);
176 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_subtitles_updated_cb")]
177 internal static extern MediaControllerError SetSubtitleUpdatedCb(MediaControllerClientHandle handle,
178 BoolAttributeUpdatedCallback callback, IntPtr userData = default(IntPtr));
180 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_360_mode_updated_cb")]
181 internal static extern MediaControllerError SetMode360UpdatedCb(MediaControllerClientHandle handle,
182 BoolAttributeUpdatedCallback callback, IntPtr userData = default(IntPtr));
184 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_mode_updated_cb")]
185 internal static extern MediaControllerError SetDisplayModeUpdatedCb(MediaControllerClientHandle handle,
186 DisplayModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
188 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_rotation_updated_cb")]
189 internal static extern MediaControllerError SetDisplayRotationUpdatedCb(MediaControllerClientHandle handle,
190 DisplayRotationUpdatedCallback callback, IntPtr userData = default(IntPtr));
191 #endregion Updated callback
195 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_ability")]
196 internal static extern MediaControllerError GetPlaybackCapabilityHandle(MediaControllerClientHandle clientHandle,
197 string serverName, out IntPtr capaHandle);
199 [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_action_is_supported")]
200 internal static extern MediaControllerError GetPlaybackCapability(IntPtr capaHandle,
201 MediaControllerNativePlaybackAction action, out MediaControlCapabilitySupport support);
203 [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_destroy")]
204 internal static extern MediaControllerError DestroyCapability(IntPtr capaHandle);
206 [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_clone")]
207 internal static extern MediaControllerError CloneCapability(IntPtr capaSrcHandle, out IntPtr capaDstHandle);
209 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_mode_ability")]
210 internal static extern MediaControllerError GetDisplayModeCapability(MediaControllerClientHandle clientHandle,
211 string serverName, out uint support);
213 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_rotation_ability")]
214 internal static extern MediaControllerError GetDisplayRotationCapability(MediaControllerClientHandle clientHandle,
215 string serverName, out uint support);
218 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_ability_support")]
219 internal static extern MediaControllerError GetSimpleCapability(MediaControllerClientHandle clientHandle,
220 string serverName, MediaControlNativeCapabilityCategory category, out MediaControlCapabilitySupport type);
221 #endregion Capability
224 #region Capability updated callback
225 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_ability_updated_cb")]
226 internal static extern MediaControllerError SetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
227 PlaybackCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
229 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_ability_updated_cb")]
230 internal static extern MediaControllerError UnsetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
232 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_mode_ability_updated_cb")]
233 internal static extern MediaControllerError SetDisplayModeCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
234 CategoryAttributeCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
236 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_rotation_ability_updated_cb")]
237 internal static extern MediaControllerError SetDisplayRotationCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
238 CategoryAttributeCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
241 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_ability_support_updated_cb")]
242 internal static extern MediaControllerError SetCategoryCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
243 SimpleCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
244 #endregion Capability updated callback
248 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_create")]
249 internal static extern MediaControllerError CreateSearchHandle(out IntPtr searchHandle);
251 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
252 internal static extern MediaControllerError SetSearchCondition(IntPtr searchHandle,
253 MediaControlContentType type, MediaControlSearchCategory category, string keyword, IntPtr bundle);
255 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
256 internal static extern MediaControllerError SetSearchConditionBundle(IntPtr searchHandle,
257 MediaControlContentType type, MediaControlSearchCategory category, string keyword, SafeBundleHandle bundle);
259 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_destroy")]
260 internal static extern MediaControllerError DestroySearchHandle(IntPtr searchHandle);
265 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_action_cmd")]
266 internal static extern MediaControllerError SendPlaybackActionCommand(MediaControllerClientHandle handle,
267 string serverName, MediaControllerNativePlaybackAction action, out string requestId);
269 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_action_cmd")]
270 internal static extern MediaControllerError SendPlaybackActionCommandWithoutReqId(MediaControllerClientHandle handle,
271 string serverName, MediaControllerNativePlaybackAction action, string requestId = default(string));
273 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_position_cmd")]
274 internal static extern MediaControllerError SendPlaybackPositionCommand(MediaControllerClientHandle handle,
275 string serverName, ulong playbackPosition, out string requestId);
277 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_shuffle_mode_cmd")]
278 internal static extern MediaControllerError SendShuffleModeCommand(MediaControllerClientHandle handle,
279 string serverName, MediaControllerNativeShuffleMode mode, out string requestId);
281 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_repeat_mode_cmd")]
282 internal static extern MediaControllerError SendRepeatModeCommand(MediaControllerClientHandle handle,
283 string serverName, MediaControllerNativeRepeatMode mode, out string requestId);
285 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playlist_cmd")]
286 internal static extern MediaControllerError SendPlaylistCommand(MediaControllerClientHandle handle,
287 string serverName, string playlistName, string index, MediaControllerNativePlaybackAction mode,
288 ulong position, out string requestId);
290 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_search_cmd")]
291 internal static extern MediaControllerError SendSearchCommand(MediaControllerClientHandle handle,
292 string serverName, IntPtr searchHandle, out string requestId);
294 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_subtitles_cmd")]
295 internal static extern MediaControllerError SendSubtitleModeCommand(MediaControllerClientHandle handle,
296 string serverName, bool isEnabled, out string requestId);
298 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_360_mode_cmd")]
299 internal static extern MediaControllerError SendMode360Command(MediaControllerClientHandle handle,
300 string serverName, bool isEnabled, out string requestId);
302 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_display_mode_cmd")]
303 internal static extern MediaControllerError SendDisplayModeCommand(MediaControllerClientHandle handle,
304 string serverName, MediaControlNativeDisplayMode mode, out string requestId);
306 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_display_rotation_cmd")]
307 internal static extern MediaControllerError SendDisplayRotationCommand(MediaControllerClientHandle handle,
308 string serverName, MediaControlNativeDisplayRotation mode, out string requestId);
310 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
311 internal static extern MediaControllerError SendCustomCommandBundle(MediaControllerClientHandle handle,
312 string serverName, string command, SafeBundleHandle bundleHandle, out string requestId);
314 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
315 internal static extern MediaControllerError SendCustomCommand(MediaControllerClientHandle handle,
316 string serverName, string command, IntPtr bundleHandle, out string requestId);
318 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_cmd_reply_received_cb")]
319 internal static extern MediaControllerError SetCommandCompletedCb(MediaControllerClientHandle handle,
320 CommandCompletedCallback callback, IntPtr userData = default(IntPtr));
322 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_cmd_reply_received_cb")]
323 internal static extern MediaControllerError UnsetCommandCompletedCb(MediaControllerClientHandle handle);
328 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_custom_event_received_cb")]
329 internal static extern MediaControllerError SetCustomEventCb(MediaControllerClientHandle handle,
330 CustomCommandReceivedCallback callback, IntPtr userData = default(IntPtr));
332 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_custom_event_received_cb")]
333 internal static extern MediaControllerError UnsetCustomEventCb(MediaControllerClientHandle handle);
335 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
336 internal static extern MediaControllerError SendCustomEventReply(MediaControllerClientHandle handle,
337 string serverName, string requestId, int result, IntPtr bundleHandle);
338 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
339 internal static extern MediaControllerError SendCustomEventReplyBundle(MediaControllerClientHandle handle,
340 string serverName, string requestId, int result, SafeBundleHandle bundleHandle);
344 internal class MediaControllerClientHandle : SafeHandle
346 protected MediaControllerClientHandle() : base(IntPtr.Zero, true)
350 public override bool IsInvalid => handle == IntPtr.Zero;
352 protected override bool ReleaseHandle()
354 var ret = MediaControllerClient.Destroy(handle);
355 if (ret != MediaControllerError.None)
357 Tizen.Log.Debug(GetType().FullName, $"Failed to release native {GetType().Name}");