00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00032 #ifndef __METADATA_HANDLER_H__
00033 #define __METADATA_HANDLER_H__
00034
00035 #include "common.h"
00036 #include "dictionary.h"
00037 #include "cds_objects.h"
00038 #include "io_handler.h"
00039
00040
00041 #define CH_DEFAULT 0
00042 #define CH_LIBEXIF 1
00043 #define CH_ID3 2
00044 #define CH_TRANSCODE 3
00045 #define CH_EXTURL 4
00046 #define CH_MP4 5
00047 #define CH_FFTH 6
00048
00049 #define CONTENT_TYPE_MP3 "mp3"
00050 #define CONTENT_TYPE_OGG "ogg"
00051 #define CONTENT_TYPE_FLAC "flac"
00052 #define CONTENT_TYPE_JPG "jpg"
00053 #define CONTENT_TYPE_PLAYLIST "playlist"
00054 #define CONTENT_TYPE_MP4 "mp4"
00055 #define CONTENT_TYPE_PCM "pcm"
00056 #define CONTENT_TYPE_AVI "avi"
00057 #define CONTENT_TYPE_MPEG "mpeg"
00058 #define CONTENT_TYPE_DVD "dvd"
00059 #define CONTENT_TYPE_QUICKTIME "quicktime"
00060
00061 #define OGG_THEORA "t"
00062
00063 #define RESOURCE_CONTENT_TYPE "rct"
00064 #define RESOURCE_HANDLER "rh"
00065
00066 #define ID3_ALBUM_ART "aa"
00067 #define EXIF_THUMBNAIL "EX_TH"
00068 #define THUMBNAIL "th" // thumbnail without need for special handling
00069
00070 typedef enum
00071 {
00072 M_TITLE = 0,
00073 M_ARTIST,
00074 M_ALBUM,
00075 M_DATE,
00076 M_GENRE,
00077 M_DESCRIPTION,
00078 M_LONGDESCRIPTION,
00079 M_TRACKNUMBER,
00080 M_ALBUMARTURI,
00081 M_REGION,
00083 M_AUTHOR,
00084 M_DIRECTOR,
00085 M_PUBLISHER,
00086 M_RATING,
00087 M_ACTOR,
00088 M_PRODUCER,
00089
00090 M_MAX
00091 } metadata_fields_t;
00092
00093 typedef struct mt_key mt_key;
00094 struct mt_key
00095 {
00096 const char *sym;
00097 const char *upnp;
00098 };
00099
00100 extern mt_key MT_KEYS[];
00101
00102
00103 typedef enum
00104 {
00105 R_SIZE = 0,
00106 R_DURATION,
00107 R_BITRATE,
00108 R_SAMPLEFREQUENCY,
00109 R_NRAUDIOCHANNELS,
00110 R_RESOLUTION,
00111 R_COLORDEPTH,
00112 R_PROTOCOLINFO,
00113 R_MAX
00114 } resource_attributes_t;
00115
00116 typedef struct res_key res_key;
00117 struct res_key
00118 {
00119 const char *sym;
00120 const char *upnp;
00121 };
00122
00123 extern res_key RES_KEYS[];
00124
00125
00128 class MetadataHandler : public zmm::Object
00129 {
00130 public:
00132
00133 MetadataHandler();
00134
00135 static void setMetadata(zmm::Ref<CdsItem> item);
00136 static zmm::String getMetaFieldName(metadata_fields_t field);
00137 static zmm::String getResAttrName(resource_attributes_t attr);
00138
00139 static zmm::Ref<MetadataHandler> createHandler(int handlerType);
00140
00141 virtual void fillMetadata(zmm::Ref<CdsItem> item) = 0;
00142 virtual zmm::Ref<IOHandler> serveContent(zmm::Ref<CdsItem> item, int resNum, off_t *data_size) = 0;
00143 virtual zmm::String getMimeType();
00144 };
00145
00146 #endif // __METADATA_HANDLER_H__