3 #ifndef _ATSC_DESCRIPTORS_H_
4 #define _ATSC_DESCRIPTORS_H_
16 typedef QMap<int, const unsigned char*>
IntToBuf;
29 int LanguageKey(
uint i)
const
31 QString LanguageString(
uint i)
const
33 int CanonicalLanguageKey(
uint i)
const
35 QString CanonicalLanguageString(
uint i)
const
45 QString CompressionTypeString(
uint i,
uint j)
const;
47 int Mode(
int i,
int j)
const {
return *(Offset(i,j)+1); }
49 int Bytes(
int i,
int j)
const {
return *(Offset(i,j)+2); }
55 uint GetIndexOfBestMatch(QMap<uint,uint> &langPrefs)
const;
56 QString GetBestMatch(QMap<uint,uint> &langPrefs)
const;
58 QString GetSegment(
uint i,
uint j)
const;
59 QString GetFullString(
uint i)
const;
61 void Parse(
void)
const;
66 static QString Uncompressed(
const unsigned char *
buf,
int len,
int mode);
67 static uint Index(
int i,
int j) {
return (i<<8)|(j&0xff); }
68 const unsigned char *Offset(
int i,
int j)
const
69 {
return _ptrs[Index(i,j)]; }
82 if (_data && !
Parse())
93 int LanguageKey(
int i)
const
95 QString LanguageString(
int i)
const
97 int CanonicalLanguageKey(
int i)
const
99 QString CanonicalLanguageString(
int i)
const
102 bool Type(
int i)
const
103 {
return ((Offset(i,-1)[3])>>7) & 1; }
108 bool Line21Field(
int i)
const
109 {
return bool(((Offset(i,-1)[3])) & 1); }
112 int CaptionServiceNumber(
int i)
const
113 {
return ((Offset(i,-1)[3])) & 0x3f; }
115 bool EasyReader(
int i)
const
116 {
return bool(((Offset(i,-1)[4])>>7) & 1); }
118 bool WideAspectRatio(
int i)
const
119 {
return bool(((Offset(i,-1)[4])>>6) & 1); }
126 int Index(
int i,
int j)
const {
return (i<<8) | (j & 0xff); }
127 const unsigned char *Offset(
int i,
int j)
const
128 {
return _ptrs[Index(i,j)]; }
140 if (_data && !
Parse())
152 {
return *Offset(i,-1); }
155 {
return *(Offset(i,-1) + 1); }
159 {
return *Offset(i,j); }
163 {
return (*(Offset(i,j) + 1)) & 0xf; }
167 {
return (*(Offset(i,-1) + 2 + (RatedDimensions(i)<<1))); }
171 const unsigned char *
data = Offset(i,-1) + 3 + (RatedDimensions(i)<<1);
179 int Index(
int i,
int j)
const {
return (i<<8)|(j&0xff); }
180 const unsigned char *Offset(
int i,
int j)
const
182 IntToBuf::const_iterator it = _ptrs.find(Index(i,j));
183 return (it != _ptrs.end()) ? *it : NULL;
201 return QString(
"Component Name Descriptor %1")
202 .arg(ComponentNameStrings().
toString());
216 QString SampleRateCodeString(
void)
const;
221 QString BitRateCodeString(
void)
const;
224 QString SurroundModeString(
void)
const;
235 QString ChannelsString(
void)
const;
253 return _data[(Channels()==0)?7:6]>>5;
260 return _data[(Channels()==0)?7:6];
266 return _data[(Channels()==0)?8:7]>>1;
273 bool IsTextLatin1(
void)
const
275 return bool(_data[(Channels()==0)?8:7]&1);
280 QString Text(
void)
const
283 char *
tmp =
new char[TextLength()+2];
286 memcpy(tmp, &_data[(Channels()==0)?9:8], TextLength());
288 for (
uint i=0; i<TextLength(); i++)
289 if (!tmp[i]) tmp[i]=
'H';
296 QString str;
int len = TextLength();
297 const unsigned char *
buf = (&_data[(Channels()==0)?9:8]);
298 const unsigned short* ustr =
299 reinterpret_cast<const unsigned short*
>(
buf);
300 for (
int j=0; j<(len>>1); j++)
301 str.append( QChar( (ustr[j]<<8) | (ustr[j]>>8) ) );
305 return QString(
"TODO");
346 QString LongChannelNameString(
void)
const;