00001
00002
00003 #ifndef _DISH_DESCRIPTORS_H_
00004 #define _DISH_DESCRIPTORS_H_
00005
00006 #include <QString>
00007 #include <QMutex>
00008 #include <QDate>
00009 #include <QMap>
00010
00011 #include "atscdescriptors.h"
00012 #include "dvbdescriptors.h"
00013
00014 class DishEventMPAADescriptor : public MPEGDescriptor
00015 {
00016 public:
00017 DishEventMPAADescriptor(const unsigned char *data, int len = 300) :
00018 MPEGDescriptor(data, len, PrivateDescriptorID::dish_event_mpaa) { }
00019
00020
00021
00022
00023 uint stars_raw(void) const { return (_data[2] & 0xe0) >> 0x05; }
00024 float stars(void) const;
00025
00026
00027 uint rating_raw(void) const { return (_data[2] & 0x1c) >> 0x02; }
00028 QString rating(void) const;
00029
00030
00031 uint advisory_raw(void) const { return _data[3]; }
00032 QString advisory(void) const;
00033
00034 private:
00035 static void Init(void);
00036
00037 private:
00038 static QMutex mpaaRatingsLock;
00039 static QMap<uint,QString> mpaaRatingsDesc;
00040 static bool mpaaRatingsExists;
00041 };
00042
00043 class DishEventVCHIPDescriptor : public MPEGDescriptor
00044 {
00045 public:
00046 DishEventVCHIPDescriptor(const unsigned char *data, int len = 300) :
00047 MPEGDescriptor(data, len, PrivateDescriptorID::dish_event_vchip) { }
00048
00049
00050
00051
00052 uint rating_raw(void) const { return _data[2]; }
00053 QString rating(void) const;
00054
00055
00056 uint advisory_raw(void) const { return _data[3]; }
00057 QString advisory(void) const;
00058
00059 private:
00060 static void Init(void);
00061
00062 private:
00063 static QMutex vchipRatingsLock;
00064 static QMap<uint,QString> vchipRatingsDesc;
00065 static bool vchipRatingsExists;
00066 };
00067
00068 class DishEventNameDescriptor : public MPEGDescriptor
00069 {
00070 public:
00071 DishEventNameDescriptor(const unsigned char *data, int len = 300) :
00072 MPEGDescriptor(data, len, PrivateDescriptorID::dish_event_name) { }
00073
00074
00075
00076
00077
00078 bool HasName(void) const { return DescriptorLength() > 1; }
00079 QString Name(uint) const;
00080 };
00081
00082 class DishEventDescriptionDescriptor : public MPEGDescriptor
00083 {
00084 public:
00085 DishEventDescriptionDescriptor(const unsigned char *data, int len = 300) :
00086 MPEGDescriptor(
00087 data, len, PrivateDescriptorID::dish_event_description) { }
00088
00089
00090
00091
00092
00093 const unsigned char *DescriptionRaw(void) const;
00094 uint DescriptionRawLength(void) const;
00095 bool HasDescription(void) const { return DescriptionRawLength(); }
00096 QString Description(uint) const;
00097 };
00098
00099 class DishEventPropertiesDescriptor : public MPEGDescriptor
00100 {
00101 public:
00102 DishEventPropertiesDescriptor(const unsigned char *data, int len = 300) :
00103 MPEGDescriptor(
00104 data, len, PrivateDescriptorID::dish_event_properties) { }
00105
00106
00107
00108
00109
00110 bool HasProperties(void) const { return DescriptorLength() > 1; }
00111 uint SubtitleProperties(uint compression_type) const;
00112 uint AudioProperties(uint compression_type) const;
00113
00114 private:
00115 void decompress_properties(uint compression_type) const;
00116
00117 private:
00118 static uint subtitle_props;
00119 static uint audio_props;
00120 static bool decompressed;
00121 };
00122
00123 class DishEventTagsDescriptor : public MPEGDescriptor
00124 {
00125 public:
00126 DishEventTagsDescriptor(const unsigned char *data, int len = 300) :
00127 MPEGDescriptor(data, len, PrivateDescriptorID::dish_event_tags) { }
00128
00129
00130
00131
00132 QString seriesid(void) const;
00133 QString programid(void) const;
00134 QDate originalairdate(void) const;
00135 };
00136
00137 typedef enum
00138 {
00139 kThemeNone = 0,
00140 kThemeMovie,
00141 kThemeSports,
00142 kThemeNews,
00143 kThemeFamily,
00144 kThemeEducation,
00145 kThemeSeries,
00146 kThemeMusic,
00147 kThemeReligious,
00148 kThemeOffAir,
00149 kThemeLast,
00150 } DishThemeType;
00151
00152 QString dish_theme_type_to_string(uint category_type);
00153 DishThemeType string_to_dish_theme_type(const QString &type);
00154
00155 class DishContentDescriptor : public ContentDescriptor
00156 {
00157 public:
00158 DishContentDescriptor(const unsigned char *data, int len = 300) :
00159 ContentDescriptor(data, len) { }
00160
00161 DishThemeType GetTheme(void) const;
00162 QString GetCategory(void) const;
00163 QString toString() const;
00164
00165 private:
00166 static void Init(void);
00167
00168 private:
00169 static QMap<uint,QString> themeDesc;
00170 static QMap<uint,QString> dishCategoryDesc;
00171 static volatile bool dishCategoryDescExists;
00172 };
00173
00174 #endif // _DISH_DESCRIPTORS_H_