| /* | |
| * GPAC - Multimedia Framework C SDK | |
| * | |
| * Authors: Jean Le Feuvre | |
| * Copyright (c) Telecom ParisTech 2009-2012 | |
| * All rights reserved | |
| * | |
| * This file is part of GPAC / Platinum UPnP module | |
| * | |
| * GPAC is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU Lesser General Public License as published by | |
| * the Free Software Foundation; either version 2, or (at your option) | |
| * any later version. | |
| * | |
| * GPAC is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; see the file COPYING. If not, write to | |
| * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
| * | |
| * | |
| * ---------------------------------------------------------------------------------- | |
| * PLATINUM IS LICENSED UNDER GPL or commercial agreement - cf platinum license | |
| * ---------------------------------------------------------------------------------- | |
| * | |
| */ | |
| #ifndef _GPAC_MEDIA_CONTROLLER_H_ | |
| #define _GPAC_MEDIA_CONTROLLER_H_ | |
| #include "PltMediaServer.h" | |
| #include "PltMediaController.h" | |
| #include "PltMediaBrowser.h" | |
| #include "NptMap.h" | |
| #include "NptStack.h" | |
| #include <gpac/thread.h> | |
| typedef struct { | |
| NPT_SharedVariable shared_var; | |
| NPT_Result res; | |
| PLT_BrowseInfo info; | |
| } GPAC_BrowseData; | |
| /*basic class to hold each media renderer*/ | |
| class GPAC_MediaRendererItem | |
| { | |
| public: | |
| GPAC_MediaRendererItem(PLT_DeviceDataReference device, NPT_String uuid) : m_device(device), m_UUID(uuid) { } | |
| PLT_DeviceDataReference m_device; | |
| NPT_String m_UUID; | |
| }; | |
| /*basic class to hold each media server*/ | |
| class GPAC_MediaServerItem | |
| { | |
| public: | |
| GPAC_MediaServerItem(PLT_DeviceDataReference device, NPT_String uuid) : m_device(device), m_UUID(uuid) , m_BrowseResults(NULL) { } | |
| PLT_DeviceDataReference m_device; | |
| NPT_String m_UUID; | |
| /*results of the last browse request on this server*/ | |
| PLT_MediaObjectListReference m_BrowseResults; | |
| /*parent directory stack*/ | |
| NPT_Stack<NPT_String> m_ParentDirectories; | |
| }; | |
| typedef NPT_Reference<GPAC_BrowseData> GPAC_BrowseDataReference; | |
| class GF_UPnP; | |
| class GPAC_MediaController : public PLT_CtrlPointListener, | |
| public PLT_MediaControllerDelegate, | |
| public PLT_MediaBrowserDelegate | |
| { | |
| public: | |
| GPAC_MediaController(PLT_CtrlPointReference& ctrlPoint, GF_UPnP *upnp); | |
| ~GPAC_MediaController(); | |
| virtual NPT_Result OnDeviceAdded(PLT_DeviceDataReference& device) | |
| { | |
| return NPT_SUCCESS; | |
| } | |
| virtual NPT_Result OnDeviceRemoved(PLT_DeviceDataReference& device) | |
| { | |
| return NPT_SUCCESS; | |
| } | |
| virtual NPT_Result OnActionResponse(NPT_Result res, | |
| PLT_ActionReference& action, | |
| void* userdata); | |
| virtual NPT_Result OnEventNotify(PLT_Service* service, NPT_List<PLT_StateVariable*>* vars); | |
| // PLT_MediaControllerDelegate | |
| virtual bool OnMRAdded(PLT_DeviceDataReference& device); | |
| virtual void OnMRRemoved(PLT_DeviceDataReference& device); | |
| virtual void OnMRStateVariablesChanged(PLT_Service* /* service */, NPT_List<PLT_StateVariable*>* /* vars */); | |
| //PLT_MediaBrowserDelegate | |
| virtual bool OnMSAdded(PLT_DeviceDataReference& device); | |
| virtual void OnMSRemoved(PLT_DeviceDataReference& device); | |
| virtual void OnMSStateVariablesChanged(PLT_Service *service, NPT_List<PLT_StateVariable*>* vars); | |
| virtual void OnBrowseResult(NPT_Result res, | |
| PLT_DeviceDataReference& device, | |
| PLT_BrowseInfo* info, | |
| void* userdata); | |
| NPT_Result Browse(GPAC_MediaServerItem *server, const char *id, const char *filter); | |
| GF_List *m_MediaRenderers; | |
| GF_List *m_MediaServers; | |
| /* The UPnP MediaRenderer control point. */ | |
| PLT_MediaController* m_MediaController; | |
| /* The UPnP MediaServer control point. */ | |
| PLT_MediaBrowser *m_MediaBrowser; | |
| protected: | |
| NPT_Result Browse(GPAC_BrowseDataReference& browse_data, | |
| PLT_DeviceDataReference& device, | |
| const char* object_id, | |
| NPT_Int32 index, | |
| NPT_Int32 count, | |
| bool browse_metadata = false, | |
| const char* filter = "*", | |
| const char* sort = ""); | |
| private: | |
| NPT_Result WaitForResponse(NPT_SharedVariable& shared_var); | |
| GF_UPnP *m_pUPnP; | |
| GF_Mutex *m_ControlPointLock; | |
| }; | |
| #endif /* _GPAC_MEDIA_CONTROLLER_H_ */ | |