[MediaPlayer] add APIs for controlling an audio pitch (#783)
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.Remoting / Interop / Interop.MediaControllerPlaylist.cs
1 /*
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 using System;
18 using System.Runtime.InteropServices;
19 using Tizen.Applications;
20 using Tizen.Multimedia.Remoting;
21
22 internal static partial class Interop
23 {
24     internal static partial class MediaControllerPlaylist
25     {
26         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
27         internal delegate void MetadataUpdatedCallback(string serverName, IntPtr metadata, IntPtr userData);
28
29         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
30         internal delegate void PlaylistUpdatedCallback(string serverName, MediaControlPlaylistMode repeatMode, string playlist,
31             IntPtr handle, IntPtr userData);
32
33         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
34         internal delegate bool PlaylistCallback(IntPtr handle, IntPtr userData);
35
36         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
37         internal delegate bool PlaylistItemCallback(string index, IntPtr handle, IntPtr userData);
38
39
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));
43
44         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_metadata_updated_cb")]
45         internal static extern MediaControllerError UnsetMetadataUpdatedCb(MediaControllerClientHandle handle);
46
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));
50
51         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playlist_updated_cb")]
52         internal static extern MediaControllerError UnsetPlaylistModeUpdatedCb(MediaControllerClientHandle handle);
53
54         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_get")]
55         private static extern MediaControllerError GetMetadata(IntPtr metadata, MediaControllerNativeAttribute attribute,
56             out IntPtr value);
57
58         internal static string GetMetadata(IntPtr handle, MediaControllerNativeAttribute attr)
59         {
60             IntPtr valuePtr = IntPtr.Zero;
61
62             try
63             {
64                 GetMetadata(handle, attr, out valuePtr).ThrowIfError($"Failed to get value for {attr}.");
65                 return Marshal.PtrToStringAnsi(valuePtr);
66             }
67             finally
68             {
69                 Tizen.Multimedia.LibcSupport.Free(valuePtr);
70             }
71         }
72
73         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_clone")]
74         internal static extern MediaControllerError CloneMetadata();
75
76         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_destroy")]
77         internal static extern MediaControllerError DestroyMetadata(IntPtr metadata);
78
79         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_metadata")]
80         internal static extern MediaControllerError GetServerMetadata(MediaControllerClientHandle handle,
81             string serverName, out IntPtr metadata);
82
83         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_encode_season")]
84         internal static extern MediaControllerError EncodeSeason(int number, string title, out string encoded);
85
86         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_encode_episode")]
87         internal static extern MediaControllerError EncodeEpisode(int number, string title, out string encoded);
88
89         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_encode_resolution")]
90         internal static extern MediaControllerError EncodeResolution(uint width, uint height, out string encoded);
91
92         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_decode_season")]
93         internal static extern MediaControllerError DecodeSeason(string season, out int number, out string title);
94
95         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_decode_episode")]
96         internal static extern MediaControllerError DecodeEpisode(string episode, out int number, out string title);
97
98
99         [DllImport(Libraries.MediaController, EntryPoint = "mc_metadata_decode_resolution")]
100         internal static extern MediaControllerError DecodeResolution(string episode, out uint width, out uint height);
101
102         [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_create")]
103         internal static extern MediaControllerError CreatePlaylist(string name, out IntPtr handle);
104
105         [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_destroy")]
106         internal static extern MediaControllerError DestroyPlaylist(IntPtr handle);
107
108         [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_get_playlist")]
109         internal static extern MediaControllerError GetPlaylistHandle(string name, string playlistName, out IntPtr playlistHandle);
110
111         [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_clone")]
112         internal static extern MediaControllerError ClonePlaylist(IntPtr source, IntPtr destination);
113
114         [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_update_item")]
115         internal static extern MediaControllerError UpdatePlaylist(IntPtr handle, string index,
116             MediaControllerNativeAttribute attribute, string value);
117
118         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server_playlist")]
119         internal static extern MediaControllerError ForeachServerPlaylist(MediaControllerClientHandle handle,
120             string serverName, PlaylistCallback callback, IntPtr userData);
121
122         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playlist_item_index")]
123         private static extern MediaControllerError GetPlaylistIndex(IntPtr playbackHandle, out IntPtr index);
124
125         [Obsolete("Please do not use! This will be deprecated. Please use GetPlaylistInfo instead.")]
126         internal static string GetPlaylistIndex(IntPtr playbackHandle)
127         {
128             IntPtr valuePtr = IntPtr.Zero;
129
130             try
131             {
132                 GetPlaylistIndex(playbackHandle, out valuePtr).ThrowIfError($"Failed to get playlist.");
133                 return Marshal.PtrToStringAnsi(valuePtr);
134             }
135             finally
136             {
137                 Tizen.Multimedia.LibcSupport.Free(valuePtr);
138             }
139         }
140
141         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playlist_item_info")]
142         internal static extern MediaControllerError GetPlaylistInfo(IntPtr playbackHandle, out IntPtr playlistName, out IntPtr index);
143
144         internal static (string name, string index) GetPlaylistInfo(IntPtr playbackHandle)
145         {
146             IntPtr playlistName = IntPtr.Zero;
147             IntPtr index = IntPtr.Zero;
148
149             try
150             {
151                 GetPlaylistInfo(playbackHandle, out playlistName, out index).ThrowIfError($"Failed to get playlist info.");
152
153                 return (Marshal.PtrToStringAnsi(playlistName), Marshal.PtrToStringAnsi(index));
154             }
155             finally
156             {
157                 Tizen.Multimedia.LibcSupport.Free(playlistName);
158                 Tizen.Multimedia.LibcSupport.Free(index);
159             }
160         }
161
162         [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_get_name")]
163         private static extern MediaControllerError GetPlaylistName(IntPtr handle, out IntPtr name);
164
165         // It will be added next commit. Native Fw is not ready yet.
166         //[DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_set_name")]
167         //internal static extern MediaControllerError SetPlaylistName(IntPtr handle, string name);
168
169         internal static string GetPlaylistName(IntPtr handle)
170         {
171             IntPtr valuePtr = IntPtr.Zero;
172
173             try
174             {
175                 GetPlaylistName(handle, out valuePtr).ThrowIfError($"Failed to get playlist name.");
176                 return Marshal.PtrToStringAnsi(valuePtr);
177             }
178             finally
179             {
180                 Tizen.Multimedia.LibcSupport.Free(valuePtr);
181             }
182         }
183
184         [DllImport(Libraries.MediaController, EntryPoint = "mc_playlist_foreach_item")]
185         internal static extern MediaControllerError ForeachPlaylistItem(IntPtr handle,
186             PlaylistItemCallback callback, IntPtr userData);
187     }
188 }