kodi
PltMediaController.h
1 /*****************************************************************
2 |
3 | Platinum - AV Media Controller (Media Renderer Control Point)
4 |
5 | Copyright (c) 2004-2010, Plutinosoft, LLC.
6 | All rights reserved.
7 | http://www.plutinosoft.com
8 |
9 | This program is free software; you can redistribute it and/or
10 | modify it under the terms of the GNU General Public License
11 | as published by the Free Software Foundation; either version 2
12 | of the License, or (at your option) any later version.
13 |
14 | OEMs, ISVs, VARs and other distributors that combine and
15 | distribute commercially licensed software with Platinum software
16 | and do not wish to distribute the source code for the commercially
17 | licensed software under version 2, or (at your option) any later
18 | version, of the GNU General Public License (the "GPL") must enter
19 | into a commercial license agreement with Plutinosoft, LLC.
20 | licensing@plutinosoft.com
21 |
22 | This program is distributed in the hope that it will be useful,
23 | but WITHOUT ANY WARRANTY; without even the implied warranty of
24 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 | GNU General Public License for more details.
26 |
27 | You should have received a copy of the GNU General Public License
28 | along with this program; see the file LICENSE.txt. If not, write to
29 | the Free Software Foundation, Inc.,
30 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
31 | http://www.gnu.org/licenses/gpl-2.0.html
32 |
33 ****************************************************************/
34 
35 #ifndef _PLT_MEDIA_CONTROLLER_H_
36 #define _PLT_MEDIA_CONTROLLER_H_
37 
38 /*----------------------------------------------------------------------
39 | includes
40 +---------------------------------------------------------------------*/
41 #include "PltCtrlPoint.h"
42 #include "PltMediaItem.h"
43 
44 /*----------------------------------------------------------------------
45 | Defines
46 +---------------------------------------------------------------------*/
48 
49 typedef struct {
50  PLT_StringList play_media;
51  PLT_StringList rec_media;
52  PLT_StringList rec_quality_modes;
54 
55 typedef struct {
56  NPT_UInt32 num_tracks;
57  NPT_TimeStamp media_duration;
58  NPT_String cur_uri;
59  NPT_String cur_metadata;
60  NPT_String next_uri;
61  NPT_String next_metadata;
62  NPT_String play_medium;
63  NPT_String rec_medium;
64  NPT_String write_status;
66 
67 typedef struct {
68  NPT_UInt32 track;
69  NPT_TimeStamp track_duration;
70  NPT_String track_metadata;
71  NPT_String track_uri;
72  NPT_TimeStamp rel_time;
73  NPT_TimeStamp abs_time;
74  NPT_Int32 rel_count;
75  NPT_Int32 abs_count;
77 
78 typedef struct {
79  NPT_String cur_transport_state;
80  NPT_String cur_transport_status;
81  NPT_String cur_speed;
83 
84 typedef struct {
85  NPT_String play_mode;
86  NPT_String rec_quality_mode;
88 
89 typedef struct {
90  NPT_UInt32 rcs_id;
91  NPT_UInt32 avtransport_id;
92  NPT_String protocol_info;
93  NPT_String peer_connection_mgr;
94  NPT_UInt32 peer_connection_id;
95  NPT_String direction;
96  NPT_String status;
98 
99 /*----------------------------------------------------------------------
100 | PLT_MediaControllerDelegate
101 +---------------------------------------------------------------------*/
103 {
104 public:
105  virtual ~PLT_MediaControllerDelegate() {}
106 
107  virtual bool OnMRAdded(PLT_DeviceDataReference& /* device */) { return true; }
108  virtual void OnMRRemoved(PLT_DeviceDataReference& /* device */) {}
109  virtual void OnMRStateVariablesChanged(PLT_Service* /* service */,
110  NPT_List<PLT_StateVariable*>* /* vars */) {}
111 
112  // AVTransport
113  virtual void OnGetCurrentTransportActionsResult(
114  NPT_Result /* res */,
115  PLT_DeviceDataReference& /* device */,
116  PLT_StringList* /* actions */,
117  void* /* userdata */) {}
118 
119  virtual void OnGetDeviceCapabilitiesResult(
120  NPT_Result /* res */,
121  PLT_DeviceDataReference& /* device */,
122  PLT_DeviceCapabilities* /* capabilities */,
123  void* /* userdata */) {}
124 
125  virtual void OnGetMediaInfoResult(
126  NPT_Result /* res */,
127  PLT_DeviceDataReference& /* device */,
128  PLT_MediaInfo* /* info */,
129  void* /* userdata */) {}
130 
131  virtual void OnGetPositionInfoResult(
132  NPT_Result /* res */,
133  PLT_DeviceDataReference& /* device */,
134  PLT_PositionInfo* /* info */,
135  void* /* userdata */) {}
136 
137  virtual void OnGetTransportInfoResult(
138  NPT_Result /* res */,
139  PLT_DeviceDataReference& /* device */,
140  PLT_TransportInfo* /* info */,
141  void* /* userdata */) {}
142 
143  virtual void OnGetTransportSettingsResult(
144  NPT_Result /* res */,
145  PLT_DeviceDataReference& /* device */,
146  PLT_TransportSettings* /* settings */,
147  void* /* userdata */) {}
148 
149  virtual void OnNextResult(
150  NPT_Result /* res */,
151  PLT_DeviceDataReference& /* device */,
152  void* /* userdata */) {}
153 
154  virtual void OnPauseResult(
155  NPT_Result /* res */,
156  PLT_DeviceDataReference& /* device */,
157  void* /* userdata */) {}
158 
159  virtual void OnPlayResult(
160  NPT_Result /* res */,
161  PLT_DeviceDataReference& /* device */,
162  void* /* userdata */) {}
163 
164  virtual void OnPreviousResult(
165  NPT_Result /* res */,
166  PLT_DeviceDataReference& /* device */,
167  void* /* userdata */) {}
168 
169  virtual void OnSeekResult(
170  NPT_Result /* res */,
171  PLT_DeviceDataReference& /* device */,
172  void* /* userdata */) {}
173 
174  virtual void OnSetAVTransportURIResult(
175  NPT_Result /* res */,
176  PLT_DeviceDataReference& /* device */,
177  void* /* userdata */) {}
178 
179  virtual void OnSetNextAVTransportURIResult(
180  NPT_Result /* res */,
181  PLT_DeviceDataReference& /* device */,
182  void* /* userdata */) {}
183 
184  virtual void OnSetPlayModeResult(
185  NPT_Result /* res */,
186  PLT_DeviceDataReference& /* device */,
187  void* /* userdata */) {}
188 
189  virtual void OnStopResult(
190  NPT_Result /* res */,
191  PLT_DeviceDataReference& /* device */,
192  void* /* userdata */) {}
193 
194  // ConnectionManager
195  virtual void OnGetCurrentConnectionIDsResult(
196  NPT_Result /* res */,
197  PLT_DeviceDataReference& /* device */,
198  PLT_StringList* /* ids */,
199  void* /* userdata */) {}
200 
201  virtual void OnGetCurrentConnectionInfoResult(
202  NPT_Result /* res */,
203  PLT_DeviceDataReference& /* device */,
204  PLT_ConnectionInfo* /* info */,
205  void* /* userdata */) {}
206 
207  virtual void OnGetProtocolInfoResult(
208  NPT_Result /* res */,
209  PLT_DeviceDataReference& /* device */,
210  PLT_StringList* /* sources */,
211  PLT_StringList* /* sinks */,
212  void* /* userdata */) {}
213 
214  // RenderingControl
215  virtual void OnSetMuteResult(
216  NPT_Result /* res */,
217  PLT_DeviceDataReference& /* device */,
218  void* /* userdata */) {}
219 
220  virtual void OnGetMuteResult(
221  NPT_Result /* res */,
222  PLT_DeviceDataReference& /* device */,
223  const char* /* channel */,
224  bool /* mute */,
225  void* /* userdata */) {}
226 
227  virtual void OnSetVolumeResult(
228  NPT_Result /* res */,
229  PLT_DeviceDataReference& /* device */,
230  void* /* userdata */) {}
231 
232  virtual void OnGetVolumeResult(
233  NPT_Result /* res */,
234  PLT_DeviceDataReference& /* device */,
235  const char* /* channel */,
236  NPT_UInt32 /* volume */,
237  void* /* userdata */) {}
238 };
239 
240 /*----------------------------------------------------------------------
241 | PLT_MediaController
242 +---------------------------------------------------------------------*/
244 {
245 public:
247  PLT_MediaControllerDelegate* delegate = NULL);
248  ~PLT_MediaController() override;
249 
250  // public methods
251  virtual void SetDelegate(PLT_MediaControllerDelegate* delegate) {
252  m_Delegate = delegate;
253  }
254 
255  // PLT_CtrlPointListener methods
256  NPT_Result OnDeviceAdded(PLT_DeviceDataReference& device) override;
257  NPT_Result OnDeviceRemoved(PLT_DeviceDataReference& device) override;
258  NPT_Result OnActionResponse(NPT_Result res, PLT_ActionReference& action, void* userdata) override;
259  NPT_Result OnEventNotify(PLT_Service* service, NPT_List<PLT_StateVariable*>* vars) override;
260 
261  // AVTransport
262  NPT_Result GetCurrentTransportActions(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
263  NPT_Result GetDeviceCapabilities(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
264  NPT_Result GetMediaInfo(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
265  NPT_Result GetPositionInfo(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
266  NPT_Result GetTransportInfo(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
267  NPT_Result GetTransportSettings(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
268  NPT_Result Next(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
269  NPT_Result Pause(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
270  NPT_Result Play(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, NPT_String speed, void* userdata);
271  NPT_Result Previous(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
272  NPT_Result Seek(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, NPT_String unit, NPT_String target, void* userdata);
273  bool CanSetNextAVTransportURI(PLT_DeviceDataReference& device);
274  NPT_Result SetAVTransportURI(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, const char* uri, const char* metadata, void* userdata);
275  NPT_Result SetNextAVTransportURI(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, const char* next_uri, const char* next_metadata, void* userdata);
276  NPT_Result SetPlayMode(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, NPT_String new_play_mode, void* userdata);
277  NPT_Result Stop(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
278 
279  // ConnectionManager
280  NPT_Result GetCurrentConnectionIDs(PLT_DeviceDataReference& device, void* userdata);
281  NPT_Result GetCurrentConnectionInfo(PLT_DeviceDataReference& device, NPT_UInt32 connection_id, void* userdata);
282  NPT_Result GetProtocolInfo(PLT_DeviceDataReference& device, void* userdata);
283 
284  // RenderingControl
285  NPT_Result SetMute(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, const char* channel, bool mute, void* userdata);
286  NPT_Result GetMute(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, const char* channel, void* userdata);
287  NPT_Result SetVolume(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, const char* channel, int volume, void* userdata);
288  NPT_Result GetVolume(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, const char* channel, void* userdata);
289 
290  // VariableStates
291  virtual NPT_Result GetProtocolInfoSink(const NPT_String& device_uuid, NPT_List<NPT_String>& sinks);
292  virtual NPT_Result GetTransportState(const NPT_String& device_uuid, NPT_String& state);
293  virtual NPT_Result GetVolumeState(const NPT_String& device_uuid, NPT_UInt32& volume);
294 
295  // methods
296  virtual NPT_Result FindRenderer(const char* uuid, PLT_DeviceDataReference& device);
297  virtual NPT_Result FindMatchingProtocolInfo(NPT_List<NPT_String>& sinks, const char* protocol_info);
298  virtual NPT_Result FindBestResource(PLT_DeviceDataReference& device, PLT_MediaObject& item, NPT_Cardinal& resource_index);
299 
300 private:
301  NPT_Result InvokeActionWithInstance(PLT_ActionReference& action, NPT_UInt32 instance_id, void* userdata = NULL);
302 
303  NPT_Result OnGetCurrentTransportActionsResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
304  NPT_Result OnGetDeviceCapabilitiesResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
305  NPT_Result OnGetMediaInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
306  NPT_Result OnGetPositionInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
307  NPT_Result OnGetTransportInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
308  NPT_Result OnGetTransportSettingsResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
309 
310  NPT_Result OnGetCurrentConnectionIDsResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
311  NPT_Result OnGetCurrentConnectionInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
312  NPT_Result OnGetProtocolInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
313 
314  NPT_Result OnGetMuteResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
315  NPT_Result OnGetVolumeResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
316 
317 public:
318  static void ParseCSV(const char* csv, PLT_StringList& values) {
319  const char* start = csv;
320  const char* p = start;
321 
322  // look for the , character
323  while (*p) {
324  if (*p == ',') {
325  NPT_String val(start, (int)(p-start));
326  val.Trim(' ');
327  values.Add(val);
328  start = p + 1;
329  }
330  p++;
331  }
332 
333  // last one
334  NPT_String last(start, (int)(p-start));
335  last.Trim(' ');
336  if (last.GetLength()) {
337  values.Add(last);
338  }
339  }
340 
341 private:
342  PLT_CtrlPointReference m_CtrlPoint;
343  PLT_MediaControllerDelegate* m_Delegate;
344  NPT_Lock<PLT_DeviceDataReferenceList> m_MediaRenderers;
345 };
346 
348 
349 #endif /* _PLT_MEDIA_CONTROLLER_H_ */
Definition: PltMediaController.h:243
Definition: PltMediaController.h:84
UPnP ControlPoint.
UPnP AV Media Object reprensentation.
UPnP Service.
Definition: PltService.h:67
Definition: NptTime.h:50
Definition: PltMediaController.h:89
Definition: PltMediaController.h:78
The PLT_CtrlPointListener class is an interface used to receive notifications when devices are found ...
Definition: PltCtrlPoint.h:68
Definition: NptThreads.h:113
Definition: PltMediaController.h:67
Definition: PltMediaController.h:102
Definition: PltMediaController.h:55
The PLT_MediaObject class is any data entity that can be returned by a ContentDirectory Service from ...
Definition: PltMediaItem.h:217
Definition: NptStrings.h:57
Definition: PltMediaController.h:49
Definition: visualization.h:21