summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h')
-rw-r--r--lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
new file mode 100644
index 0000000..b74ed0f
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Devices/MediaServer/PltDidl.h
@@ -0,0 +1,197 @@
+/*****************************************************************
+|
+| Platinum - DIDL handling
+|
+| Copyright (c) 2004-2010, 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.
+| licensing@plutinosoft.com
+|
+| 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
+|
+****************************************************************/
+
+/** @file
+ UPnP AV Didl
+ */
+
+#ifndef _PLT_DIDL_H_
+#define _PLT_DIDL_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "PltMediaItem.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define PLT_FILTER_MASK_ALL NPT_UINT64_C(0xFFFFFFFFFFFFFFFF)
+
+#define PLT_FILTER_MASK_CREATOR NPT_UINT64_C(0x0000000000000001)
+#define PLT_FILTER_MASK_ARTIST NPT_UINT64_C(0x0000000000000002)
+#define PLT_FILTER_MASK_ALBUM NPT_UINT64_C(0x0000000000000004)
+#define PLT_FILTER_MASK_GENRE NPT_UINT64_C(0x0000000000000008)
+#define PLT_FILTER_MASK_ALBUMARTURI NPT_UINT64_C(0x0000000000000010)
+#define PLT_FILTER_MASK_DESCRIPTION NPT_UINT64_C(0x0000000000000020)
+#define PLT_FILTER_MASK_SEARCHABLE NPT_UINT64_C(0x0000000000000040)
+#define PLT_FILTER_MASK_CHILDCOUNT NPT_UINT64_C(0x0000000000000080)
+#define PLT_FILTER_MASK_ORIGINALTRACK NPT_UINT64_C(0x0000000000000100)
+#define PLT_FILTER_MASK_ACTOR NPT_UINT64_C(0x0000000000000200)
+#define PLT_FILTER_MASK_AUTHOR NPT_UINT64_C(0x0000000000000400)
+#define PLT_FILTER_MASK_DIRECTOR NPT_UINT64_C(0x0000000000000800)
+#define PLT_FILTER_MASK_DATE NPT_UINT64_C(0x0000000000001000)
+#define PLT_FILTER_MASK_PROGRAMTITLE NPT_UINT64_C(0x0000000000002000)
+#define PLT_FILTER_MASK_SERIESTITLE NPT_UINT64_C(0x0000000000004000)
+#define PLT_FILTER_MASK_EPISODE NPT_UINT64_C(0x0000000000008000)
+#define PLT_FILTER_MASK_TITLE NPT_UINT64_C(0x0000000000010000)
+
+#define PLT_FILTER_MASK_RES NPT_UINT64_C(0x0000000000020000)
+#define PLT_FILTER_MASK_RES_DURATION NPT_UINT64_C(0x0000000000040000)
+#define PLT_FILTER_MASK_RES_SIZE NPT_UINT64_C(0x0000000000080000)
+#define PLT_FILTER_MASK_RES_PROTECTION NPT_UINT64_C(0x0000000000100000)
+#define PLT_FILTER_MASK_RES_RESOLUTION NPT_UINT64_C(0x0000000000200000)
+#define PLT_FILTER_MASK_RES_BITRATE NPT_UINT64_C(0x0000000000400000)
+#define PLT_FILTER_MASK_RES_BITSPERSAMPLE NPT_UINT64_C(0x0000000000800000)
+#define PLT_FILTER_MASK_RES_NRAUDIOCHANNELS NPT_UINT64_C(0x0000000001000000)
+#define PLT_FILTER_MASK_RES_SAMPLEFREQUENCY NPT_UINT64_C(0x0000000002000000)
+
+#define PLT_FILTER_MASK_LONGDESCRIPTION NPT_UINT64_C(0x0000000004000000)
+#define PLT_FILTER_MASK_ICON NPT_UINT64_C(0x0000000008000000)
+#define PLT_FILTER_MASK_RATING NPT_UINT64_C(0x0000000010000000)
+
+#define PLT_FILTER_MASK_TOC NPT_UINT64_C(0x0000000020000000)
+#define PLT_FILTER_MASK_SEARCHCLASS NPT_UINT64_C(0x0000000040000000)
+#define PLT_FILTER_MASK_REFID NPT_UINT64_C(0x0000000080000000)
+
+#define PLT_FILTER_MASK_LASTPOSITION NPT_UINT64_C(0x0000000100000000)
+#define PLT_FILTER_MASK_LASTPLAYBACK NPT_UINT64_C(0x0000000200000000)
+#define PLT_FILTER_MASK_PLAYCOUNT NPT_UINT64_C(0x0000000400000000)
+
+#define PLT_FILTER_MASK_PUBLISHER NPT_UINT64_C(0x0000000800000000)
+
+#define PLT_FILTER_MASK_EPISODE_COUNT NPT_UINT64_C(0x0000001000000000)
+#define PLT_FILTER_MASK_EPISODE_SEASON NPT_UINT64_C(0x0000002000000000)
+
+#define PLT_FILTER_MASK_XBMC_DATEADDED NPT_UINT64_C(0x0000100000000000)
+#define PLT_FILTER_MASK_XBMC_RATING NPT_UINT64_C(0x0000200000000000)
+#define PLT_FILTER_MASK_XBMC_VOTES NPT_UINT64_C(0x0000400000000000)
+#define PLT_FILTER_MASK_XBMC_ARTWORK NPT_UINT64_C(0x0000800000000000)
+#define PLT_FILTER_MASK_XBMC_UNIQUE_IDENTIFIER NPT_UINT64_C(0x0001000000000000)
+#define PLT_FILTER_MASK_XBMC_COUNTRY NPT_UINT64_C(0x0002000000000000)
+#define PLT_FILTER_MASK_XBMC_USERRATING NPT_UINT64_C(0x0004000000000000)
+#define PLT_FILTER_MASK_XBMC_LASTPLAYERSTATE NPT_UINT64_C(0x0008000000000000)
+
+#define PLT_FILTER_FIELD_TITLE "dc:title"
+#define PLT_FILTER_FIELD_CREATOR "dc:creator"
+#define PLT_FILTER_FIELD_DATE "dc:date"
+#define PLT_FILTER_FIELD_ARTIST "upnp:artist"
+#define PLT_FILTER_FIELD_ACTOR "upnp:actor"
+#define PLT_FILTER_FIELD_AUTHOR "upnp:author"
+#define PLT_FILTER_FIELD_DIRECTOR "upnp:director"
+#define PLT_FILTER_FIELD_ALBUM "upnp:album"
+#define PLT_FILTER_FIELD_GENRE "upnp:genre"
+#define PLT_FILTER_FIELD_ALBUMARTURI "upnp:albumArtURI"
+#define PLT_FILTER_FIELD_ALBUMARTURI_DLNAPROFILEID "upnp:albumArtURI@dlna:profileID"
+#define PLT_FILTER_FIELD_DESCRIPTION "dc:description"
+#define PLT_FILTER_FIELD_LONGDESCRIPTION "upnp:longDescription"
+#define PLT_FILTER_FIELD_ICON "upnp:icon"
+#define PLT_FILTER_FIELD_RATING "upnp:rating"
+#define PLT_FILTER_FIELD_ORIGINALTRACK "upnp:originalTrackNumber"
+#define PLT_FILTER_FIELD_PROGRAMTITLE "upnp:programTitle"
+#define PLT_FILTER_FIELD_SERIESTITLE "upnp:seriesTitle"
+#define PLT_FILTER_FIELD_EPISODE "upnp:episodeNumber"
+#define PLT_FILTER_FIELD_LASTPOSITION "upnp:lastPlaybackPosition"
+#define PLT_FILTER_FIELD_LASTPLAYBACK "upnp:lastPlaybackTime"
+#define PLT_FILTER_FIELD_PLAYCOUNT "upnp:playbackCount"
+#define PLT_FILTER_FIELD_SEARCHCLASS "upnp:searchClass"
+#define PLT_FILTER_FIELD_SEARCHABLE "@searchable"
+#define PLT_FILTER_FIELD_CHILDCOUNT "@childcount"
+#define PLT_FILTER_FIELD_CONTAINER_CHILDCOUNT "container@childCount"
+#define PLT_FILTER_FIELD_CONTAINER_SEARCHABLE "container@searchable"
+#define PLT_FILTER_FIELD_REFID "@refID"
+#define PLT_FILTER_FIELD_PUBLISHER "dc:publisher"
+
+#define PLT_FILTER_FIELD_RES "res"
+#define PLT_FILTER_FIELD_RES_DURATION "res@duration"
+#define PLT_FILTER_FIELD_RES_DURATION_SHORT "@duration"
+#define PLT_FILTER_FIELD_RES_SIZE "res@size"
+#define PLT_FILTER_FIELD_RES_PROTECTION "res@protection"
+#define PLT_FILTER_FIELD_RES_RESOLUTION "res@resolution"
+#define PLT_FILTER_FIELD_RES_BITRATE "res@bitrate"
+#define PLT_FILTER_FIELD_RES_BITSPERSAMPLE "res@bitsPerSample"
+#define PLT_FILTER_FIELD_RES_NRAUDIOCHANNELS "res@nrAudioChannels"
+#define PLT_FILTER_FIELD_RES_SAMPLEFREQUENCY "res@sampleFrequency"
+
+#define PLT_FILTER_FIELD_EPISODE_COUNT "upnp:episodeCount"
+#define PLT_FILTER_FIELD_EPISODE_SEASON "upnp:episodeSeason"
+
+#define PLT_FILTER_FIELD_XBMC_LASTPLAYERSTATE "xbmc:lastPlayerState"
+#define PLT_FILTER_FIELD_XBMC_DATEADDED "xbmc:dateadded"
+#define PLT_FILTER_FIELD_XBMC_RATING "xbmc:rating"
+#define PLT_FILTER_FIELD_XBMC_VOTES "xbmc:votes"
+#define PLT_FILTER_FIELD_XBMC_ARTWORK "xbmc:artwork"
+#define PLT_FILTER_FIELD_XBMC_UNIQUE_IDENTIFIER "xbmc:uniqueidentifier"
+#define PLT_FILTER_FIELD_XBMC_COUNTRY "xbmc:country"
+#define PLT_FILTER_FIELD_XBMC_USERRATING "xbmc:userrating"
+
+extern const char* didl_header;
+extern const char* didl_footer;
+extern const char* didl_namespace_dc;
+extern const char* didl_namespace_upnp;
+extern const char* didl_namespace_dlna;
+extern const char* didl_namespace_xbmc;
+
+/*----------------------------------------------------------------------
+| PLT_Didl
++---------------------------------------------------------------------*/
+/**
+ DIDL manipulation.
+ The PLT_Didl class provides a mechanism to (de)serialize a PLT_MediaObject or
+ list of PLT_MediaObject (PLT_MediaObjectList).
+ */
+class PLT_Didl
+{
+public:
+ static NPT_Result ToDidl(PLT_MediaObject& object,
+ const NPT_String& filter,
+ NPT_String& didl);
+ static NPT_Result FromDidl(const char* didl,
+ PLT_MediaObjectListReference& objects);
+ static void AppendXmlEscape(NPT_String& out, const char* in);
+ static void AppendXmlUnEscape(NPT_String& out, const char* in);
+ static NPT_Result ParseTimeStamp(const NPT_String& timestamp, NPT_UInt32& seconds);
+ static NPT_String FormatTimeStamp(NPT_UInt32 seconds);
+ static NPT_Result ParseTimeStamp(const NPT_String& in, NPT_TimeStamp& timestamp) {
+ NPT_UInt32 seconds;
+ NPT_Result res = ParseTimeStamp(in, seconds);
+ timestamp = NPT_TimeStamp((double)seconds);
+ return res;
+ }
+
+ static NPT_UInt64 ConvertFilterToMask(const NPT_String& filter);
+};
+
+#endif /* _PLT_DIDL_H_ */