summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authormethodus <methodus@web.de>2012-09-16 09:09:43 +0200
committermethodus <methodus@web.de>2012-09-16 09:09:43 +0200
commitfb5c28b99ec95e6ca59899191e77af162cf96cbc (patch)
treeaad020446f7597ee97c44534cee74bf0ad4eac26 /include
parent3dbb9c2ab120ca77b4de7f5f86788ca7d358a40c (diff)
downloadvdr-plugin-upnp-fb5c28b99ec95e6ca59899191e77af162cf96cbc.tar.gz
vdr-plugin-upnp-fb5c28b99ec95e6ca59899191e77af162cf96cbc.tar.bz2
Plugin.h.txt wieder gelöscht
Diffstat (limited to 'include')
-rw-r--r--include/plugin.h.txt486
1 files changed, 0 insertions, 486 deletions
diff --git a/include/plugin.h.txt b/include/plugin.h.txt
deleted file mode 100644
index d4bb970..0000000
--- a/include/plugin.h.txt
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * plugin.h
- *
- * Created on: 31.08.2012
- * Author: savop
- */
-
-#ifndef PLUGIN_H_
-#define PLUGIN_H_
-
-#include <string>
-#include <map>
-#include <list>
-
-using namespace std;
-
-namespace upnp {
-
-/**
- * Metadata class
- *
- * This class describes the content of a multimedia item like a video or audio file.
- *
- * It contains some general information like the title or a detailed description of
- * the content and one or more resources to the file.
- *
- * Why are multiple resources possible, though I just have that one file? Lets say,
- * you want to display images. It is very useful if there are thumbnail pictures
- * available, which may speed up the display process as the UPnP media renderer may
- * first display those thumbnails rather than the huge image itself. Those images
- * both refer to the same meta information. However, they have different resource
- * information. This may also apply to videos (different resolution, bit rate,
- * whatever...)
- *
- * Every plugin implementor is requested to add as much as available information about
- * a resource, because the media renderer may display them in their user interface,
- * which in turn makes the navigation and identifying the contents much easier.
- *
- * The metadata class itself offers some major properties, which are very common in
- * the VDRs context. However, the implementor may add additional custom information
- * to the list of properties.
- *
- * A Property with the same name but different value may exist multiple times. It is
- * added multiple times to the output. Property attributes are NOT supported. However,
- * there only a handful of attributes, which are likely to be unimportant.
- *
- */
-class cMetadata {
-public:
-
- /**
- * Property class
- *
- * This is a basic key-value class, which holds a property (the key)
- * and a value. The value is kept in a string representation. There
- * is a set of getter methods to convert the string in to the corresponding
- * data type. However, there is no type safety given. The implementor
- * must know what the contents of the properties are.
- */
- class Property {
- public:
- Property(){};
- Property(string key, string value);
- Property(string key, long value);
- Property(string key, bool value);
-
- /**
- * Returns the string representation of the value.
- */
- string operator()() const;
-
- string GetKey() const;
- string GetString() const;
- long GetInteger() const;
- bool GetBoolean() const;
-
- private:
- string key;
- string value;
- };
-
- /**
- * Resource class
- *
- * The resource class contains information about a specific resource.
- *
- * Most of the information are optional except the protocolInfo and the
- * resourceUri.
- *
- * The resourceUri is the locator to the file or stream or whatever. The uri
- * is provided by the resourceProvider plugins and must be understood by the
- * mediaProfiler plugins.
- */
- class Resource {
- public:
-
- bool SetResourceUri(string resourceUri);
- bool SetProtocolInfo(string protocolInfo);
- bool SetDuration(string duration);
- bool SetResolution(string resolution);
- bool SetBitrate(uint32_t bitrate);
- bool SetSize(uint32_t size);
- bool SetSampleFrequency(uint32_t sampleFrequency);
- bool SetBitsPerSample(uint32_t bitsPerSample);
- bool SetNrAudioChannels(uint32_t nrAudioChannels);
- bool SetColorDepth(uint32_t colorDepth);
-
- string GetResourceUri() const { return resourceUri; }
- string GetProtocolInfo() const { return protocolInfo; }
- string GetDuration() const { return duration; }
- string GetResolution() const { return resolution; }
- uint32_t GetBitrate() const { return bitrate; }
- uint32_t GetSize() const { return size; }
- uint32_t GetSampleFrequency() const { return sampleFrequency; }
- uint32_t GetBitsPerSample() const { return bitsPerSample; }
- uint32_t GetNrAudioChannels() const { return nrAudioChannels; }
- uint32_t GetColorDepth() const { return colorDepth; }
-
- private:
- string resourceUri;
- string protocolInfo;
- string duration;
- string resolution;
- uint32_t bitrate;
- uint32_t size;
- uint32_t sampleFrequency;
- uint32_t bitsPerSample;
- uint32_t nrAudioChannels;
- uint32_t colorDepth;
- };
-
- typedef multimap<string, Property> PropertyMap;
- typedef pair<PropertyMap::iterator,PropertyMap::iterator> PropertyRange;
- typedef list<Resource> ResourceList;
-
- bool AddProperty(Property property);
- bool SetProperty(Property property, int index = 0);
-
- Property& GetPropertyByKey(string property);
- PropertyRange GetPropertiesByKey(string property);
- PropertyRange GetAllProperties();
-
- bool SetObjectID(string objectID);
- string GetObjectID() const { return objectID; }
- bool SetParentID(string parentID);
- string GetParentID() const { return parentID; }
- bool SetTitle(string title);
- string GetTitle() const { return title; }
- bool SetUpnpClass(string upnpClass);
- string GetUpnpClass() const { return upnpClass; }
- bool SetRestricted(bool restricted);
- bool GetRestricted() const { return restricted; }
- bool SetDescription(string description);
- string GetDescription() const { return description; }
- bool SetLongDescription(string longDescription);
- string GetLongDescription() const { return longDescription; }
- bool SetDate(string date);
- string GetDate() const { return date; }
- bool SetLanguage(string language);
- string GetLanguage() const { return language; }
- bool SetChannelNr(int channelNr);
- int GetChannelNr() const { return channelNr; }
- bool SetChannelName(string channelName);
- string GetChannelName() const { return channelName; }
- bool SetScheduledStart(string scheduledStart);
- string GetScheduledStart() const { return scheduledStart; }
- bool SetScheduledEnd(string scheduledEnd);
- string GetScheduledEnd() const { return scheduledEnd; }
-
-private:
-
- PropertyMap properties;
- ResourceList resources;
-
- string objectID;
- string parentID;
- string title;
- string upnpClass;
- bool restricted;
- string description;
- string longDescription;
- string date;
- string language;
- int channelNr;
- string channelName;
- string scheduledStart;
- string scheduledEnd;
-
-};
-
-#define UPNP_REGISTER_RESOURCE_PROVIDER(cls) extern "C" void *UPnPCreateResourceProvider(void) { return new cls; }
-
-class cUPnPResourceProvider {
-public:
-
- typedef list<string> EntryList;
-
- virtual ~cUPnPResourceProvider(){};
-
- /**
- * Returns the schema of this provider
- *
- * Each provider provides a specific uri schema. This
- * is required to distinguish the different kind of file
- * types and resource types.
- *
- * This can be for instance (without ://):
- *
- * Schema Description
- * vdr:// external http stream
- * rec:// recording
- * file:// any other file, which is not managed by the vdr or the upnp plugin
- *
- */
- virtual string ProvidesSchema() = 0;
-
- /**
- * Returns the root container of the provider.
- *
- * This function is used to determine the root of the provider.
- * The returned string is prepended to every uri.
- *
- * This results in the following uri:
- *
- * <schema>://<rootContainer>/<path>...
- */
- virtual string GetRootContainer() = 0;
-
- /**
- * Return a list of the elements in a container.
- *
- * This function returns a list of elements in a container.
- * Each element will be checked by the plugin manager, if it is
- * an item or another container.
- *
- * If an element is a container, the manager will append the
- * element to the URI and creates a new call to this function
- * to recurse through the directory tree.
- *
- * The implementor MUST skip entries, which redirects to the
- * parent container or itself, i.e. containers like "." and "..".
- *
- * Additionally, link loops MUST be avoided as much as possible.
- * The plugin manager will try to detect a loop. However, you
- * should not use links.
- *
- * The given URI is an absolute URI.
- */
- virtual EntryList GetContainerEntries(string uri) = 0;
-
- /**
- * Checks if the given URI is a container.
- *
- * This function is used by the plugin manager to check if
- * the given absolute URI is a container or not.
- *
- * If it is a container, the plugin manager will try to recurse
- * into that directory and get the elements of it.
- */
- virtual bool IsContainer(string uri) = 0;
-
- /**
- * Checks if the given URI is a link to another element.
- *
- * The plugin manager uses this function in conjuction with
- * the IsContainer() function to iterate and recurse through
- * the tree. If a link directs to a container (IsContainer()
- * return true), then the plugin manager tries to detect
- * loops.
- *
- * If target is not empty, the target is evaluated and
- * registered as a reference to the original element. Otherwise
- * the element is skipped.
- */
- virtual bool IsLink(string uri, string& target) = 0;
-
- /**
- * Returns the containerUpdateId of the given container
- *
- * This function called every time a container gets evaluated.
- *
- * This happens at the start of the media server and on every
- * change to that container.
- *
- * This function MUST return an identifier, which enables the
- * plugin manager to distinguish a change of a container.
- *
- * The identifier MUST overcome restarts. If the container was
- * not changes after a restart of the server, the identifier
- * must be equal to the one returned before the server was
- * restarted. If the container was changed, the identifier must
- * be greater than the previous one. The identifier must not
- * decrease in the scope of an unsigned integer, as this may
- * cause clients which were offline for some time to get
- * confused, if the elements differ though the updateId remains
- * the same.
- */
- virtual long GetContainerUpdateId(string uri) = 0;
-
- /**
- * Returns the meta data of a specific container.
- *
- * This function is used to retrieve meta informatio about a
- * container. It is NOT used to get information about files or
- * resources, as this is done by the media plugins.
- *
- * However, a resource provider may override this function
- * to add more detailed information about a specific container,
- * for instance if it is a special container like a photo album.
- *
- * The implementor is requested to return meta information about
- * the resource provider like title or description when called
- * with the root container uri.
- *
- * The default implementation will fill the required meta data
- * properties with the best matching information, i.e:
- *
- * - Class: object.container
- * - Title: the element name
- * - Restricted: true
- *
- */
- virtual cMetadata* GetMetadata(string uri);
-
- /**
- * Get the HTTP Uri.
- *
- * This function returns the HTTP Uri if the stream is accessible
- * from an external server via HTTP.
- *
- * The resource MUST be located in the same network than the server.
- *
- * This function returns an empty string by default, which means
- * that the resource provider uses internal access via the file
- * access function Open(), Read(), Close().
- *
- * The implementor of a resource provider MUST either implement
- * this function or the file access methods below.
- */
- virtual string GetHTTPUri(string uri);
-
- /**
- * Opens a resource
- *
- * If the resource provider uses internal file access it MUST
- * implement the file access methods Open(), i.e. this one, Read()
- * and Close().
- *
- * This opens the given uri and prepares the provider to read
- * from the file. If there is an error while opening the resource,
- * it must return false.
- *
- * The default implementation return false.
- */
- virtual bool Open(string uri);
-
- /**
- * Reads data from the stream
- *
- * This functions reads up to "buflen" number the number of bytes
- * into the buffer and returns the actual number of bytes read.
- *
- * If there was an error while reading the function MUST return -1.
- * This also applies to when there was no Open() call before reading.
- *
- * If the resource provider reached end of file, it MUST return 0.
- *
- * The default implementation return 0.
- */
- virtual size_t Read(char* buf, size_t bufLen);
-
- /**
- * Closes the file
- *
- * This function closes the file opened by Open(). It MUST free all
- * acquired memory resources.
- *
- */
- virtual void Close();
-
-protected:
-
- /**
- * Called whenever a container was changed.
- *
- * This function MUST be called by a resource provider whenever
- * a container was changed during the runtime of the server.
- *
- * The containerUpdateId must equal to the one returned by
- * GetContainerUpdateId() with the same URI. This means,
- * if the provider detected a change of a container, this function
- * is called. Then, the plugin manager might call
- * GetContainerUpdateId() with the URI to retrieve the Id again.
- *
- * The following rules MUST be applied:
- *
- * - A change must be signaled if a file or directory was
- * - created
- * - modified
- * - deleted
- * - moved
- * - If a file or directory was created, the parent container
- * URI was changed. Therefore, this URI is signaled with
- * an appropriate updateID.
- * - If a file was modified, the parent container must be
- * signaled.
- * - A file is modified, when its contents or metadata have
- * changed.
- * - If a container was modified, the container itself must be
- * signaled. The parent container is kept untouched.
- * - If a file or container was deleted, the parent container
- * must be signaled.
- * - If a file or container is moved, two changes must be
- * signaled:
- * - change of the parent container, where the file or container
- * was moved from
- * - change of the parent container, where the file or container
- * was moved to
- */
- void OnContainerUpdate(string uri, long containerUpdateId);
-
-};
-
-#define UPNP_REGISTER_MEDIA_PLUGIN(cls) extern "C" void *UPnPCreateMediaProfiler(void) { return new cls; }
-
-class cMediaProfiler {
-public:
-
- virtual ~cMediaProfiler(){};
-
- /**
- * Tell the manager if this plugin can handle a specific uri schema
- *
- * This function gets called by the plugin manager multiple times to check
- * if the plugin can handle a specific uri schema.
- *
- * This can be for instance (without ://):
- *
- * Schema Description
- * vdr:// live-tv stream
- * rec:// recording
- * file:// any other file, which is not managed by the vdr or the upnp plugin
- *
- * The plugin must reject all but the schemas it is capable of.
- *
- * @return \b true if the plugin can handle the uri schema, \b false if not.
- */
- virtual bool CanHandleSchema(string schema) = 0;
-
- /**
- * Get the metadata from a specific resource.
- *
- * This function is called by the plugin manager when the manager scans for
- * files in a container. The implementor must create and fill a mediaResource
- * object which contains all information about the resource.
- *
- * If the plugin is not able to fill the required information about the resource,
- * it MUST return NULL. The plugin manager will then rotate through all the
- * registered plugins until it finds a suitable one.
- *
- * The required information MUST be set in the cMediaResource::Create function
- * correctly. Otherwise the object creation might fail and a NULL pointer will
- * be returned.
- *
- * Additionally, a plugin implementor is advised to add as many as possible
- * metadata about a resource. Especially, information about the contents might
- * help the user.
- *
- * The URI is a absolute path to the resource.
- *
- * The plugin manager tries to reduce the calls of the resources as much as
- * possible. It will only requests new information, if the resource was
- * changed.
- *
- * A change of a resource is indicated by the resource provider.
- *
- * @param uri the absolute path to the resource.
- * @return the media resource information.
- */
- virtual cMetadata* GetMetadata(string uri) = 0;
-protected:
-};
-
-} // namespace upnp
-
-#endif /* PLUGIN_H_ */