00001
00022 #ifndef _SCTE_TABLES_H_
00023 #define _SCTE_TABLES_H_
00024
00025
00026 #include <QString>
00027
00028
00029 #include "mpegdescriptors.h"
00030
00031
00032 class FrameRateDescriptor : public MPEGDescriptor
00033 {
00034 public:
00035 FrameRateDescriptor(const unsigned char *data, uint len) :
00036 MPEGDescriptor(data, len, DescriptorID::scte_frame_rate, 1) { }
00037
00038
00039
00040
00041 bool MultipleFrameRates(void) const { return _data[2] & 0x80; }
00042
00043 uint FrameRateCode(void) const { return (_data[2] >> 3) & 0xF; }
00045 double FrameRate(void) const
00046 {
00047 switch (FrameRateCode())
00048 {
00049 case 0x1 :
00050 return 24.0 / 1.001;
00051 case 0x2 :
00052 return 24.0;
00053 case 0x3 :
00054 return 25.0;
00055 case 0x4 :
00056 return 30.0 / 1.001;
00057 case 0x5:
00058 return 30.0;
00059 case 0x6:
00060 return 50.0;
00061 case 0x7:
00062 return 60.0 / 1.001;
00063 case 0x8:
00064 return 60.0;
00065 default:
00066
00067 return 0.0;
00068 }
00069 }
00070
00071
00072 QString toString(void) const
00073 {
00074 return QString("FrameRateDescriptor: "
00075 "MultipleFrameRates(%1) MaximumFrameRate(%2)")
00076 .arg(MultipleFrameRates())
00077 .arg(FrameRate());
00078 }
00079 };
00080
00081
00082 class ExtendedVideoDescriptor : public MPEGDescriptor
00083 {
00084 public:
00085 ExtendedVideoDescriptor(const unsigned char *data, uint len) :
00086 MPEGDescriptor(data, len, DescriptorID::scte_extended_video, 1) { }
00087
00088
00089
00090
00091 bool CatalogModeFlag(void) const { return _data[2] & 0x80; }
00092
00093 bool VideoIncludesSetup(void) const { return _data[2] & 0x40; }
00094
00095
00096 QString toString(void) const
00097 {
00098 return QString("ExtendedVideoDescriptor: "
00099 "CatalogModeFlag(%1) VideoIncludesSetup(%2)")
00100 .arg(CatalogModeFlag())
00101 .arg(VideoIncludesSetup());
00102 }
00103 };
00104
00105
00106 class SCTEComponentNameDescriptor : public MPEGDescriptor
00107 {
00108 public:
00109 SCTEComponentNameDescriptor(const unsigned char *data, uint len) :
00110 MPEGDescriptor(data, len, DescriptorID::scte_component_name)
00111 {
00112
00113 }
00114
00115
00116
00117
00118
00119 uint StringCount(void) const { return _data[2] & 0x3F; }
00120
00121
00122
00123
00124 int LanguageKey(uint i) const
00125 { return iso639_str3_to_key(&_data[loc(i)]); }
00126 QString LanguageString(uint i) const
00127 { return iso639_key_to_str3(LanguageKey(loc(i))); }
00128 int CanonicalLanguageKey(uint i) const
00129 { return iso639_key_to_canonical_key(LanguageKey(loc(i))); }
00130 QString CanonicalLanguageString(uint i) const
00131 { return iso639_key_to_str3(CanonicalLanguageKey(loc(i))); }
00132
00133 uint StringLength(uint i) const
00134 { return _data[loc(i) + 3]; }
00135
00136 QString NameString(uint i) const;
00137
00138
00139 QString toString(void) const;
00140
00141 private:
00142 uint loc(uint number) const
00143 {
00144 uint place = 3;
00145 for (uint i = 0; i < number; ++i)
00146 place += 4 + _data[place + 3];
00147 return place;
00148 }
00149 };
00150
00156 class CueIdentifierDescriptor : public MPEGDescriptor
00157 {
00158 public:
00159 CueIdentifierDescriptor(const unsigned char *data, uint len) :
00160 MPEGDescriptor(data, len, DescriptorID::scte_cue_identifier, 1) { }
00161
00162
00163
00164
00165 enum
00166 {
00167 kLimited = 0x0,
00168 kAllCommands = 0x1,
00169 kSegmentation = 0x2,
00170 kTieredSplicing = 0x3,
00171 kTieredSegmentation = 0x4,
00172
00173
00174 };
00175 uint CueStreamType(void) const { return _data[2]; }
00176 QString CueStreamTypeString(void) const;
00177 QString toString(void) const;
00178 };
00179
00180
00181 class FrequencySpecificationDescriptor : public MPEGDescriptor
00182 {
00183 public:
00184 FrequencySpecificationDescriptor(const unsigned char *data, uint len) :
00185 MPEGDescriptor(data, len, DescriptorID::scte_frequency_spec, 2)
00186 { }
00187
00188
00189
00190
00191 bool FrequencyUnit(void) const { return _data[2] & 0x80; }
00192 uint FrequencyUnitHz(void) const
00193 { return FrequencyUnit() ? 10000 : 125000; }
00194
00195 uint CarrierFrequency(void) const
00196 { return ((_data[2] << 8) | _data[3]) & 0x7fff; }
00197 unsigned long long CarrierFrequnecyHz(void) const
00198 {
00199 return FrequencyUnitHz() * ((unsigned long long) CarrierFrequency());
00200 }
00201
00202 QString toString(void) const
00203 {
00204 return QString("FrequencySpecificationDescriptor: %2 Hz")
00205 .arg(CarrierFrequnecyHz());
00206 }
00207 };
00208
00209
00210 class ModulationParamsDescriptor : public MPEGDescriptor
00211 {
00212 public:
00213 ModulationParamsDescriptor(const unsigned char *data, uint len) :
00214 MPEGDescriptor(data, len, DescriptorID::scte_modulation_params, 6) { }
00215
00216
00217
00218
00219 uint TransmissionSystem(void) const { return _data[2] >> 4; }
00220
00221 uint InnerCodingMode(void) const { return _data[2] & 0x0f; }
00222
00223 bool SplitBitstreamMode(void) const { return _data[3] >> 7; }
00224
00225
00226 uint ModulationFormat(void) const { return _data[3] & 0x1F; }
00227
00228
00229 uint SymbolRate(void) const
00230 {
00231 return ((_data[4] << 24) | (_data[5] << 16) |
00232 (_data[6] << 8) | _data[7]) & 0x7FFF;
00233 }
00234 };
00235
00236
00237 class TransportStreamIdDescriptor : public MPEGDescriptor
00238 {
00239 public:
00240 TransportStreamIdDescriptor(const unsigned char *data, uint len) :
00241 MPEGDescriptor(data, len, DescriptorID::scte_transport_stream_id, 2) { }
00242
00243
00244
00245
00246 uint TargetTransportStreamId(void) const
00247 { return (_data[2] << 8) | _data[3]; }
00248
00249 QString toString(void) const
00250 {
00251 return QString("TransportStreamIdDescriptor: 0x%1")
00252 .arg(TargetTransportStreamId(),0,16);
00253 }
00254 };
00255
00256
00257 class RevisionDetectionDescriptor : public MPEGDescriptor
00258 {
00259 public:
00260 RevisionDetectionDescriptor(const unsigned char *data, uint len) :
00261 MPEGDescriptor(data, len, DescriptorID::scte_revision_detection, 3) { }
00262
00263
00264
00265
00266
00267 uint TableVersionNumber(void) const { return _data[2] & 0x1f; }
00268
00269 uint SectionNumber(void) const { return _data[3]; }
00270
00271 uint LastSectionNumber(void) const { return _data[4]; }
00272
00273 QString toString(void) const;
00274 };
00275
00276 #endif // _SCTE_TABLES_H_