2 * Copyright (c) 2018 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 MediaControllerPlaylist
26 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
27 internal delegate void MetadataUpdatedCallback(string serverName, IntPtr metadata, IntPtr userData);
29 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
30 internal delegate void PlaylistUpdatedCallback(string serverName, MediaControlPlaylistMode repeatMode, string playlist,
31 IntPtr handle, IntPtr userData);
33 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
34 internal delegate bool PlaylistCallback(IntPtr handle, IntPtr userData);
36 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
37 internal delegate bool PlaylistItemCallback(string index, IntPtr handle, IntPtr userData);
40 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_metadata_updated_cb")]
41 internal static extern MediaControllerError SetMetadataUpdatedCb(MediaControllerClientHandle handle,
42 MetadataUpdatedCallback callback, IntPtr userData = default(IntPtr));
44 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_metadata_updated_cb")]
45 internal static extern MediaControllerError UnsetMetadataUpdatedCb(MediaControllerClientHandle handle);
47 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playlist_updated_cb")]
48 internal static extern MediaControllerError SetPlaylistModeUpdatedCb(MediaControllerClientHandle handle,
49 PlaylistUpdatedCallback callback, IntPtr userData = default(IntPtr));
51 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playlist_updated_cb")]
52 internal static extern MediaControllerError UnsetPlaylistModeUpdatedCb(MediaControllerClientHandle handle);
54 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_get")]
55 private static extern MediaControllerError GetMetadata(IntPtr metadata, MediaControllerNativeAttribute attribute,
58 internal static string GetMetadata(IntPtr handle, MediaControllerNativeAttribute attr)
60 IntPtr valuePtr = IntPtr.Zero;
64 GetMetadata(handle, attr, out valuePtr).ThrowIfError($"Failed to get value for {attr}.");
65 return Marshal.PtrToStringAnsi(valuePtr);
69 Marshal.FreeHGlobal(valuePtr);
73 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_clone")]
74 internal static extern MediaControllerError CloneMetadata();
76 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_destroy")]
77 internal static extern MediaControllerError DestroyMetadata(IntPtr metadata);
79 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_metadata")]
80 internal static extern MediaControllerError GetServerMetadata(MediaControllerClientHandle handle,
81 string serverName, out IntPtr metadata);
83 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_encode_season")]
84 internal static extern MediaControllerError EncodeSeason(int number, string title, out string encoded);
86 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_encode_episode")]
87 internal static extern MediaControllerError EncodeEpisode(int number, string title, out string encoded);
89 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_encode_resolution")]
90 internal static extern MediaControllerError EncodeResolution(uint width, uint height, out string encoded);
92 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_decode_season")]
93 internal static extern MediaControllerError DecodeSeason(string season, out int number, out string title);
95 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_decode_episode")]
96 internal static extern MediaControllerError DecodeEpisode(string episode, out int number, out string title);
99 [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_decode_resolution")]
100 internal static extern MediaControllerError DecodeResolution(string episode, out uint width, out uint height);
102 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_create")]
103 internal static extern MediaControllerError CreatePlaylist(string name, out IntPtr handle);
105 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_destroy")]
106 internal static extern MediaControllerError DestroyPlaylist(IntPtr handle);
108 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_get_playlist")]
109 internal static extern MediaControllerError GetPlaylistHandle(string name, string playlistName, out IntPtr playlistHandle);
111 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_clone")]
112 internal static extern MediaControllerError ClonePlaylist(IntPtr source, IntPtr destination);
114 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_update_item")]
115 internal static extern MediaControllerError UpdatePlaylist(IntPtr handle, string index,
116 MediaControllerNativeAttribute attribute, string value);
118 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_foreach_playlist")]
119 internal static extern MediaControllerError ForeachPlaylist(string serverName, PlaylistCallback callback, IntPtr userData);
121 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_get_playlist")]
122 internal static extern MediaControllerError GetPlaylistHandle(string serverName, string playlistName, IntPtr handle);
124 [Obsolete("Please do not use! This will be deprecated in level 6. Please use ForeachPlaylist instead.")]
125 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server_playlist")]
126 internal static extern MediaControllerError ForeachServerPlaylist(MediaControllerClientHandle handle,
127 string serverName, PlaylistCallback callback, IntPtr userData);
129 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playlist_item_index")]
130 private static extern MediaControllerError GetPlaylistIndex(IntPtr playbackHandle, out IntPtr index);
132 [Obsolete("Please do not use! This will be deprecated. Please use GetPlaylistInfo instead.")]
133 internal static string GetPlaylistIndex(IntPtr playbackHandle)
135 IntPtr valuePtr = IntPtr.Zero;
139 GetPlaylistIndex(playbackHandle, out valuePtr).ThrowIfError($"Failed to get playlist.");
140 return Marshal.PtrToStringAnsi(valuePtr);
144 Marshal.FreeHGlobal(valuePtr);
148 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playlist_item_info")]
149 internal static extern MediaControllerError GetPlaylistInfo(IntPtr playbackHandle, out IntPtr playlistName, out IntPtr index);
151 internal static (string name, string index) GetPlaylistInfo(IntPtr playbackHandle)
153 IntPtr playlistName = IntPtr.Zero;
154 IntPtr index = IntPtr.Zero;
158 GetPlaylistInfo(playbackHandle, out playlistName, out index).ThrowIfError($"Failed to get playlist info.");
160 return (Marshal.PtrToStringAnsi(playlistName), Marshal.PtrToStringAnsi(index));
164 Marshal.FreeHGlobal(playlistName);
165 Marshal.FreeHGlobal(index);
169 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_get_name")]
170 private static extern MediaControllerError GetPlaylistName(IntPtr handle, out IntPtr name);
172 // It will be added next commit. Native Fw is not ready yet.
173 //[DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_set_name")]
174 //internal static extern MediaControllerError SetPlaylistName(IntPtr handle, string name);
176 internal static string GetPlaylistName(IntPtr handle)
178 IntPtr valuePtr = IntPtr.Zero;
182 GetPlaylistName(handle, out valuePtr).ThrowIfError($"Failed to get playlist name.");
183 return Marshal.PtrToStringAnsi(valuePtr);
187 Marshal.FreeHGlobal(valuePtr);
191 [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_foreach_item")]
192 internal static extern MediaControllerError ForeachPlaylistItem(IntPtr handle,
193 PlaylistItemCallback callback, IntPtr userData);