diff deps/Platinum/Source/Devices/MediaRenderer/PltMediaController.h @ 0:3425707ddbf6

Initial import (hopefully this mercurial stuff works...)
author fraserofthenight
date Mon, 06 Jul 2009 08:06:28 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deps/Platinum/Source/Devices/MediaRenderer/PltMediaController.h	Mon Jul 06 08:06:28 2009 -0700
@@ -0,0 +1,305 @@
+/*****************************************************************
+|
+|   Platinum - AV Media Controller (Media Renderer Control Point)
+|
+| Copyright (c) 2004-2008, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and 
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| 
+| This program 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 General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc., 
+| 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+#ifndef _PLT_MEDIA_CONTROLLER_H_
+#define _PLT_MEDIA_CONTROLLER_H_
+
+/*----------------------------------------------------------------------
+|   includes
++---------------------------------------------------------------------*/
+#include "PltCtrlPoint.h"
+
+/*----------------------------------------------------------------------
+|   Defines
++---------------------------------------------------------------------*/
+typedef NPT_List<NPT_String> PLT_StringList;
+
+struct PLT_DeviceCapabilities {
+    PLT_StringList play_media;
+    PLT_StringList rec_media;
+    PLT_StringList rec_quality_modes;
+};
+
+struct PLT_MediaInfo {
+    NPT_UInt32    num_tracks;
+    NPT_TimeStamp media_duration;
+    NPT_String    cur_uri;
+    NPT_String    cur_metadata;
+    NPT_String    next_uri;
+    NPT_String    next_metadata;
+    NPT_String    play_medium;
+    NPT_String    rec_medium;
+    NPT_String    write_status;
+};
+
+struct PLT_PositionInfo {
+    NPT_UInt32    track;
+    NPT_TimeStamp track_duration;
+    NPT_String    track_metadata;
+    NPT_String    track_uri;
+    NPT_TimeStamp rel_time;
+    NPT_TimeStamp abs_time;
+    NPT_Int32     rel_count;
+    NPT_Int32     abs_count;
+};
+
+struct PLT_TransportInfo {
+    NPT_String cur_transport_state;
+    NPT_String cur_transport_status;
+    NPT_String cur_speed;
+};
+
+struct PLT_TransportSettings {
+    NPT_String play_mode;
+    NPT_String rec_quality_mode;
+};
+
+struct PLT_ConnectionInfo {
+    NPT_UInt32 rcs_id;
+    NPT_UInt32 avtransport_id;
+    NPT_String protocol_info;
+    NPT_String peer_connection_mgr;
+    NPT_UInt32 peer_connection_id;
+    NPT_String direction;
+    NPT_String status;
+};
+
+/*----------------------------------------------------------------------
+|   PLT_MediaControllerDelegate class
++---------------------------------------------------------------------*/
+class PLT_MediaControllerDelegate
+{
+public:
+    virtual ~PLT_MediaControllerDelegate() {}
+
+    virtual bool OnMRAdded(PLT_DeviceDataReference& /* device */) { return true; }
+    virtual void OnMRRemoved(PLT_DeviceDataReference& /* device */) {}
+    virtual void OnMRStateVariablesChanged(PLT_Service*                  /* service */, 
+                                           NPT_List<PLT_StateVariable*>* /* vars */) {}
+
+    // AVTransport
+    virtual void OnGetCurrentTransportActionsResult(
+        NPT_Result               /* res */, 
+        PLT_DeviceDataReference& /* device */,
+        PLT_StringList*          /* actions */, 
+        void*                    /* userdata */) {}
+
+    virtual void OnGetDeviceCapabilitiesResult(
+        NPT_Result               /* res */, 
+        PLT_DeviceDataReference& /* device */,
+        PLT_DeviceCapabilities*  /* capabilities */,
+        void*                    /* userdata */) {}
+
+    virtual void OnGetMediaInfoResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        PLT_MediaInfo*           /* info */,
+        void*                    /* userdata */) {}
+
+    virtual void OnGetPositionInfoResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        PLT_PositionInfo*        /* info */,
+        void*                    /* userdata */) {}
+
+    virtual void OnGetTransportInfoResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        PLT_TransportInfo*       /* info */,
+        void*                    /* userdata */) {}
+
+    virtual void OnGetTransportSettingsResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        PLT_TransportSettings*   /* settings */,
+        void*                    /* userdata */) {}
+
+    virtual void OnNextResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}
+
+    virtual void OnPauseResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}  
+
+    virtual void OnPlayResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}
+
+    virtual void OnPreviousResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}
+
+    virtual void OnSeekResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}
+
+    virtual void OnSetAVTransportURIResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}
+
+    virtual void OnSetPlayModeResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}
+
+    virtual void OnStopResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        void*                    /* userdata */) {}
+
+    // ConnectionManager
+    virtual void OnGetCurrentConnectionIDsResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        PLT_StringList*          /* ids */,
+        void*                    /* userdata */) {}
+
+    virtual void OnGetCurrentConnectionInfoResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        PLT_ConnectionInfo*      /* info */,
+        void*                    /* userdata */) {}
+
+    virtual void OnGetProtocolInfoResult(
+        NPT_Result               /* res */,
+        PLT_DeviceDataReference& /* device */,
+        PLT_StringList*          /* sources */,
+        PLT_StringList*          /* sinks */,
+        void*                    /* userdata */) {}
+};
+
+/*----------------------------------------------------------------------
+|   PLT_MediaController class
++---------------------------------------------------------------------*/
+class PLT_MediaController : public PLT_CtrlPointListener
+{
+public:
+    PLT_MediaController(PLT_CtrlPointReference&      ctrl_point, 
+                        PLT_MediaControllerDelegate* delegate = NULL);
+    virtual ~PLT_MediaController();
+
+    // public methods
+    virtual void SetDelegate(PLT_MediaControllerDelegate* delegate) {
+        m_Delegate = delegate;
+    }
+
+    // PLT_CtrlPointListener methods
+    virtual NPT_Result OnDeviceAdded(PLT_DeviceDataReference& device);
+    virtual NPT_Result OnDeviceRemoved(PLT_DeviceDataReference& device);
+    virtual NPT_Result OnActionResponse(NPT_Result res, PLT_ActionReference& action, void* userdata);
+    virtual NPT_Result OnEventNotify(PLT_Service* service, NPT_List<PLT_StateVariable*>* vars);
+
+    // AVTransport
+    NPT_Result GetCurrentTransportActions(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result GetDeviceCapabilities(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result GetMediaInfo(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result GetPositionInfo(PLT_DeviceDataReference& device,  NPT_UInt32 instance_id, void* userdata);
+    NPT_Result GetTransportInfo(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result GetTransportSettings(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result Next(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result Pause(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result Play(PLT_DeviceDataReference&  device, NPT_UInt32 instance_id, NPT_String speed, void* userdata);
+    NPT_Result Previous(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+    NPT_Result Seek(PLT_DeviceDataReference&  device, NPT_UInt32 instance_id, NPT_String unit, NPT_String target, void* userdata);
+    NPT_Result SetAVTransportURI(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, const char* uri, const char* metadata, void* userdata);
+    NPT_Result SetPlayMode(PLT_DeviceDataReference&  device, NPT_UInt32 instance_id, NPT_String new_play_mode, void* userdata);
+    NPT_Result Stop(PLT_DeviceDataReference& device, NPT_UInt32 instance_id, void* userdata);
+
+    // ConnectionManager
+    NPT_Result GetCurrentConnectionIDs(PLT_DeviceDataReference& device, void* userdata);
+    NPT_Result GetCurrentConnectionInfo(PLT_DeviceDataReference& device, NPT_UInt32 connection_id, void* userdata);
+    NPT_Result GetProtocolInfo(PLT_DeviceDataReference& device, void* userdata);
+
+private:
+    NPT_Result FindActionDesc(PLT_DeviceDataReference& device, 
+        const char*              service_type,
+        const char*              action_name,
+        PLT_ActionDesc*&         action_desc);
+
+    NPT_Result CreateAction(PLT_DeviceDataReference& device, 
+        const char*              service_type,
+        const char*              action_name,
+        PLT_ActionReference&     action);
+
+    NPT_Result CallAVTransportAction(PLT_ActionReference& action,
+        NPT_UInt32               instance_id,
+        void*                    userdata = NULL);
+
+    NPT_Result OnGetCurrentTransportActionsResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+    NPT_Result OnGetDeviceCapabilitiesResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+    NPT_Result OnGetMediaInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+    NPT_Result OnGetPositionInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+    NPT_Result OnGetTransportInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+    NPT_Result OnGetTransportSettingsResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+
+    NPT_Result OnGetCurrentConnectionIDsResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+    NPT_Result OnGetCurrentConnectionInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+    NPT_Result OnGetProtocolInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata);
+
+    static void ParseCSV(const char* csv, PLT_StringList& values) {
+        const char* start = csv;
+        const char* p = start;
+
+        // look for the , character
+        while (*p) {
+            if (*p == ',') {
+                NPT_String val(start, (int)(p-start));
+                val.Trim(' ');
+                values.Add(val);
+                start = p + 1;
+            }
+            p++;
+        }
+
+        // last one
+        NPT_String last(start, (int)(p-start));
+        last.Trim(' ');
+        if (last.GetLength()) {
+            values.Add(last);
+        }
+    }
+
+private:
+    PLT_CtrlPointReference            m_CtrlPoint;
+    PLT_MediaControllerDelegate*      m_Delegate;
+    NPT_List<PLT_DeviceDataReference> m_MediaRenderers;
+};
+
+#endif /* _PLT_MEDIA_CONTROLLER_H_ */