OSDN Git Service

暫定登録
[iptd/iPTd.git] / src / mpeg2 / ts / Table.h
1 /*\r
2  *  Table.h\r
3  */\r
4 #ifndef __MPEG2_TS_TABLE_H__\r
5 #define __MPEG2_TS_TABLE_H__\r
6 \r
7 #include <stdio.h>\r
8 #include <stdlib.h>\r
9 #include <stdint.h>\r
10 #include <string.h>\r
11 \r
12 namespace MPEG2\r
13 {\r
14 namespace TS\r
15 {\r
16 \r
17 static const int MAX_SECT_LEN = 4096;\r
18 static const int MAX_DESC_LEN =  255;\r
19 \r
20 // 6.2.1 Bouquet name descriptor\r
21 typedef struct _BouquetNameDescriptor\r
22 {\r
23     uint8_t         descriptor_tag;                         //  8\r
24     uint8_t         descriptor_length;                      //  8\r
25     uint8_t         descriptor[MAX_DESC_LEN];               //  8 x N\r
26 } BouquetNameDescriptor;\r
27 \r
28 // 6.2.4 Content descriptor\r
29 typedef struct _ContentDescriptor\r
30 {\r
31     uint8_t         descriptor_tag;                         //  8\r
32     uint8_t         descriptor_length;                      //  8\r
33     struct\r
34     {\r
35         uint8_t     content_nibble_level_1;                 //  4\r
36         uint8_t     content_nibble_level_2;                 //  4\r
37         uint8_t     user_nibble_1;                          //  4\r
38         uint8_t     user_nibble_2;                          //  4\r
39     } contents[MAX_DESC_LEN/2];                             // 16 x N\r
40 } ContentDescriptor;\r
41 \r
42 // 6.2.7 Extended event descriptor\r
43 typedef struct _ExtendedEventDescriptor\r
44 {\r
45     uint8_t         descriptor_tag;                         //  8\r
46     uint8_t         descriptor_length;                      //  8\r
47     uint8_t         descriptor_number;                      //  4\r
48     uint8_t         last_descriptor_number;                 //  4\r
49     uint8_t         ISO_639_language_code[3];               // 24\r
50     uint8_t         length_of_items;                        //  8\r
51     uint8_t         item_count;\r
52     struct\r
53     {\r
54         uint8_t     item_description_length;                //  8\r
55         uint8_t     item_description[MAX_DESC_LEN];         //  8 x N\r
56         uint8_t     item_length;                            //  8\r
57         uint8_t     item[MAX_DESC_LEN];                     //  8 x N\r
58     } items[MAX_DESC_LEN/2];\r
59     uint8_t         text_length;                            //  8\r
60     uint8_t         text[MAX_DESC_LEN];                     //  8 x N\r
61 } ExtendedEventDescriptor;\r
62 \r
63 // 6.2.13 Service descriptor\r
64 typedef struct _ServiceDescriptor\r
65 {\r
66     uint8_t         descriptor_tag;                         //  8\r
67     uint8_t         descriptor_length;                      //  8\r
68     uint8_t         service_type;                           //  8\r
69     uint8_t         service_provider_name_length;           //  8\r
70     uint8_t         service_provider_name[MAX_DESC_LEN];    //  8 x N\r
71     uint8_t         service_name_length;                    //  8\r
72     uint8_t         service_name[MAX_DESC_LEN];             //  8 x N\r
73 } ServiceDescriptor;\r
74 \r
75 // 6.2.15 Short event descriptor\r
76 typedef struct _ShortEventDescriptor\r
77 {\r
78     uint8_t         descriptor_tag;                         //  8\r
79     uint8_t         descriptor_length;                      //  8\r
80     uint8_t         ISO_639_language_code[3];               // 24\r
81     uint8_t         event_name_length;                      //  8\r
82     uint8_t         event_name[MAX_DESC_LEN];               //  8 x N\r
83     uint8_t         text_length;                            //  8\r
84     uint8_t         text[MAX_DESC_LEN];                     //  8 x N\r
85 } ShortEventDescriptor;\r
86 \r
87 // 6.2.33 Series descriptor\r
88 typedef struct _SeriesDescriptor\r
89 {\r
90     uint8_t         descriptor_tag;                         //  8\r
91     uint8_t         descriptor_length;                      //  8\r
92     uint16_t        series_id;                              // 16\r
93     uint8_t         repeat_label;                           //  4\r
94     uint8_t         program_pattern;                        //  3\r
95     uint8_t         expire_date_valid_flag;                 //  1\r
96     uint16_t        expire_date;                            // 16\r
97     uint16_t        episode_number;                         // 12\r
98     uint16_t        last_episode_number;                    // 12\r
99     uint8_t         series_name[MAX_DESC_LEN];              //  8 x N\r
100 } SeriesDescriptor;\r
101 \r
102 \r
103 typedef struct _OtherDescriptor\r
104 {\r
105     uint8_t         descriptor_tag;                         //  8\r
106     uint8_t         descriptor_length;                      //  8\r
107     uint8_t         descriptor[MAX_DESC_LEN];               //  8 x N\r
108 } OtherDescriptor;\r
109 \r
110 typedef union _Descriptor\r
111 {\r
112     uint8_t                     descriptor_tag;\r
113     BouquetNameDescriptor       bouquet_name;\r
114     ServiceDescriptor           service;\r
115     ShortEventDescriptor        short_event;\r
116     ExtendedEventDescriptor     extended_event;\r
117     ContentDescriptor           content;\r
118     SeriesDescriptor            series;\r
119     OtherDescriptor             other;\r
120 } Descriptor;\r
121 \r
122 \r
123 enum\r
124 {\r
125     TABLE_ID_PAT = 0x00,\r
126     TABLE_ID_PMT = 0x02\r
127 };\r
128 \r
129 enum\r
130 {\r
131     TAG_BOUQUET_NAME_DESCRIPTOR     = 0x47,\r
132     TAG_SERVICE_DESCRIPTOR          = 0x48,\r
133     TAG_SHORT_EVENT_DESCRIPTOR      = 0x4D,\r
134     TAG_EXTENDED_EVENT_DESCRIPTOR   = 0x4E,\r
135     TAG_CONTENT_DESCRIPTOR          = 0x54,\r
136     TAG_SERIES_DESCRIPTOR           = 0xD5,\r
137 };\r
138 \r
139 class Table\r
140 {\r
141 protected:\r
142     uint16_t    _pid;\r
143     uint8_t     _continuty_counter;\r
144     uint16_t    _length;\r
145     uint8_t     _section[MAX_SECT_LEN];\r
146 \r
147     virtual bool decode_section();\r
148 \r
149 \r
150 public:\r
151     Table();\r
152     virtual ~Table();\r
153     bool decode(uint8_t *packet);\r
154     virtual void reset();\r
155 \r
156     static uint16_t parseDescriptor(uint8_t *buf, uint16_t length, Descriptor *descriptor);\r
157 };\r
158 \r
159 } // TS\r
160 } // MPEG2\r
161 #endif\r
162 \r