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 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
27 internal delegate void ServerUpdatedCallback(string serverName, MediaControllerNativeServerState serverState,
30 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
31 internal delegate void PlaybackUpdatedCallback(string serverName, IntPtr playback, IntPtr userData);
33 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
34 internal delegate void ShuffleModeUpdatedCallback(string serverName, MediaControllerNativeShuffleMode shuffleMode,
37 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
38 internal delegate void RepeatModeUpdatedCallback(string serverName, MediaControllerNativeRepeatMode repeatMode, IntPtr userData);
40 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
41 internal delegate bool ActivatedServerCallback(string serverName, IntPtr userData);
43 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
44 internal delegate void CommandCompletedCallback(string serverName, string requestId, MediaControllerError result,
45 IntPtr bundleHandle, IntPtr userData);
47 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
48 internal delegate void CustomCommandReceivedCallback(string serverName, string requestId, string customEvent, IntPtr bundleHandle, IntPtr userData);
51 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_create")]
52 internal static extern MediaControllerError Create(out MediaControllerClientHandle handle);
54 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy")]
55 internal static extern MediaControllerError Destroy(IntPtr handle);
57 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_server_updated_cb")]
58 internal static extern MediaControllerError SetServerUpdatedCb(MediaControllerClientHandle handle,
59 ServerUpdatedCallback callback, IntPtr userData = default(IntPtr));
61 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_server_updated_cb")]
62 internal static extern MediaControllerError UnsetServerUpdatedCb(MediaControllerClientHandle handle);
64 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_updated_cb")]
65 internal static extern MediaControllerError SetPlaybackUpdatedCb(MediaControllerClientHandle handle,
66 PlaybackUpdatedCallback callback, IntPtr userData = default(IntPtr));
68 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_updated_cb")]
69 internal static extern MediaControllerError UnsetPlaybackUpdatedCb(MediaControllerClientHandle handle);
71 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_shuffle_mode_updated_cb")]
72 internal static extern MediaControllerError SetShuffleModeUpdatedCb(MediaControllerClientHandle handle,
73 ShuffleModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
75 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_mode_updated_cb")]
76 internal static extern MediaControllerError UnsetShuffleModeUpdatedCb(MediaControllerClientHandle handle);
78 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_repeat_mode_updated_cb")]
79 internal static extern MediaControllerError SetRepeatModeUpdatedCb(MediaControllerClientHandle handle,
80 RepeatModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
82 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_mode_updated_cb")]
83 internal static extern MediaControllerError UnsetRepeatModeUpdatedCb(MediaControllerClientHandle handle);
85 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_cmd_reply_received_cb")]
86 internal static extern MediaControllerError SetCommandCompletedCb(MediaControllerClientHandle handle,
87 CommandCompletedCallback callback, IntPtr userData = default(IntPtr));
89 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_cmd_reply_received_cb")]
90 internal static extern MediaControllerError UnsetCommandCompletedCb(MediaControllerClientHandle handle);
92 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_custom_event_received_cb")]
93 internal static extern MediaControllerError SetCustomEventCb(MediaControllerClientHandle handle,
94 CustomCommandReceivedCallback callback, IntPtr userData = default(IntPtr));
96 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_custom_event_received_cb")]
97 internal static extern MediaControllerError UnsetCustomEventCb(MediaControllerClientHandle handle);
99 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_state")]
100 internal static extern MediaControllerError GetPlaybackState(IntPtr playback, out MediaControllerNativePlaybackState state);
102 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_position")]
103 internal static extern MediaControllerError GetPlaybackPosition(IntPtr playback, out ulong position);
105 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy_playback")]
106 internal static extern MediaControllerError DestroyPlayback(IntPtr playback);
108 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_latest_server_info")]
109 internal static extern MediaControllerError GetLatestServer(MediaControllerClientHandle handle,
110 out IntPtr serverName, out MediaControllerNativeServerState serverState);
112 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_info")]
113 internal static extern MediaControllerError GetServerPlayback(MediaControllerClientHandle handle,
114 string serverName, out IntPtr playback);
116 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_shuffle_mode")]
117 internal static extern MediaControllerError GetServerShuffleMode(MediaControllerClientHandle handle,
118 string serverName, out MediaControllerNativeShuffleMode mode);
120 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_repeat_mode")]
121 internal static extern MediaControllerError GetServerRepeatMode(MediaControllerClientHandle handle,
122 string serverName, out MediaControllerNativeRepeatMode mode);
124 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_state_command")]
125 internal static extern MediaControllerError SendPlaybackStateCommand(MediaControllerClientHandle handle,
126 string serverName, MediaControllerNativePlaybackAction command);
128 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
129 internal static extern MediaControllerError SendCustomCommandBundle(MediaControllerClientHandle handle,
130 string serverName, string command, SafeBundleHandle bundleHandle, out string requestId);
132 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
133 internal static extern MediaControllerError SendCustomCommand(MediaControllerClientHandle handle,
134 string serverName, string command, IntPtr bundleHandle, out string requestId);
136 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_action_cmd")]
137 internal static extern MediaControllerError SendPlaybackActionCommand(MediaControllerClientHandle handle,
138 string serverName, MediaControllerNativePlaybackAction action, out string requestId);
140 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_position_cmd")]
141 internal static extern MediaControllerError SendPlaybackPositionCommand(MediaControllerClientHandle handle,
142 string serverName, ulong playbackPosition, out string requestId);
144 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_shuffle_mode_cmd")]
145 internal static extern MediaControllerError SendShuffleModeCommand(MediaControllerClientHandle handle,
146 string serverName, MediaControllerNativeShuffleMode mode, out string requestId);
148 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_repeat_mode_cmd")]
149 internal static extern MediaControllerError SendRepeatModeCommand(MediaControllerClientHandle handle,
150 string serverName, MediaControllerNativeRepeatMode mode, out string requestId);
152 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playlist_cmd")]
153 internal static extern MediaControllerError SendPlaylistCommand(MediaControllerClientHandle handle,
154 string serverName, string playlistName, string index, MediaControllerNativePlaybackAction mode,
155 ulong position, out string requestId);
157 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_search_cmd")]
158 internal static extern MediaControllerError SendSearchCommand(MediaControllerClientHandle handle,
159 string serverName, IntPtr searchHandle, out string requestId);
161 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
162 internal static extern MediaControllerError SendCustomEventReply(MediaControllerClientHandle handle,
163 string serverName, string requestId, int result, IntPtr bundleHandle);
164 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
165 internal static extern MediaControllerError SendCustomEventReplyBundle(MediaControllerClientHandle handle,
166 string serverName, string requestId, int result, SafeBundleHandle bundleHandle);
169 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server")]
170 internal static extern MediaControllerError ForeachActivatedServer(MediaControllerClientHandle handle,
171 ActivatedServerCallback callback, IntPtr userData);
173 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_age_rating")]
174 internal static extern MediaControllerError GetAgeRating(IntPtr playbackHandle, out int rating);
177 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
178 internal delegate void PlaybackCapabilityUpdatedCallback(string serverName, IntPtr capaHandle,
179 IntPtr userData = default(IntPtr));
181 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
182 internal delegate void ShuffleCapabilityUpdatedCallback(string serverName, MediaControlCapabilitySupport support,
183 IntPtr userData = default(IntPtr));
185 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
186 internal delegate void RepeatCapabilityUpdatedCallback(string serverName, MediaControlCapabilitySupport support,
187 IntPtr userData = default(IntPtr));
190 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_content_type")]
191 internal static extern MediaControllerError GetPlaybackContentType(IntPtr playbackHandle,
192 out MediaControlContentType type);
194 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_icon")]
195 internal static extern MediaControllerError GetServerIcon(MediaControllerClientHandle clientHandle,
196 string serverName, out string uri);
198 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_ability")]
199 internal static extern MediaControllerError GetPlaybackCapabilityHandle(MediaControllerClientHandle clientHandle,
200 string serverName, out IntPtr capaHandle);
202 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_shuffle_ability_support")]
203 internal static extern MediaControllerError GetShuffleCapability(MediaControllerClientHandle clientHandle,
204 string serverName, out MediaControlCapabilitySupport type);
206 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_repeat_ability_support")]
207 internal static extern MediaControllerError GetRepeatCapability(MediaControllerClientHandle clientHandle,
208 string serverName, out MediaControlCapabilitySupport type);
210 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_ability_updated_cb")]
211 internal static extern MediaControllerError SetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
212 PlaybackCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
214 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_ability_updated_cb")]
215 internal static extern MediaControllerError UnsetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
217 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_shuffle_ability_updated_cb")]
218 internal static extern MediaControllerError SetShuffleCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
219 ShuffleCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
221 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_ability_updated_cb")]
222 internal static extern MediaControllerError UnsetShuffleCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
224 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_repeat_ability_updated_cb")]
225 internal static extern MediaControllerError SetRepeatCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
226 RepeatCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
228 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_ability_updated_cb")]
229 internal static extern MediaControllerError UnsetRepeatCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
231 [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_clone")]
232 internal static extern MediaControllerError CloneCapability(IntPtr capaSrcHandle, out IntPtr capaDstHandle);
234 [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_destroy")]
235 internal static extern MediaControllerError DestroyCapability(IntPtr capaHandle);
237 [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_action_is_supported")]
238 internal static extern MediaControllerError IsCapabilitySupported(IntPtr capaHandle,
239 MediaControllerNativePlaybackAction action, out MediaControlCapabilitySupport support);
240 #endregion Capability
243 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_create")]
244 internal static extern MediaControllerError CreateSearchHandle(out IntPtr searchHandle);
246 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
247 internal static extern MediaControllerError SetSearchCondition(IntPtr searchHandle,
248 MediaControlContentType type, MediaControlSearchCategory category, string keyword, IntPtr bundle);
250 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
251 internal static extern MediaControllerError SetSearchConditionBundle(IntPtr searchHandle,
252 MediaControlContentType type, MediaControlSearchCategory category, string keyword, SafeBundleHandle bundle);
254 [DllImport(Libraries.MediaController, EntryPoint = "mc_search_destroy")]
255 internal static extern MediaControllerError DestroySearchHandle(IntPtr searchHandle);
259 internal class MediaControllerClientHandle : SafeHandle
261 protected MediaControllerClientHandle() : base(IntPtr.Zero, true)
265 public override bool IsInvalid => handle == IntPtr.Zero;
267 protected override bool ReleaseHandle()
269 var ret = MediaControllerClient.Destroy(handle);
270 if (ret != MediaControllerError.None)
272 Tizen.Log.Debug(GetType().FullName, $"Failed to release native {GetType().Name}");