OSDN Git Service

cc7756e8de0d9e06e610a720d9634e6b3314d5df
[iptd/iPTd.git] / src / mpeg2 / ts / EIT.h
1 //
2 // EIT.h
3 //
4
5 #ifndef __MPEG2_TS_EIT_H__
6 #define __MPEG2_TS_EIT_H__
7
8 #include "mpeg2/ts/Table.h"
9
10 namespace MPEG2
11 {
12
13 namespace TS
14 {
15
16 #define MAXSECLEN 4096
17
18 typedef struct _EIThead {
19         char table_id;
20         int section_syntax_indicator;
21         int reserved_future_use;
22         int reserved1;
23         int section_length;
24         int service_id;
25         int reserved2;
26         int version_number;
27         int current_next_indicator;
28         int section_number;
29         int last_section_number;
30         int transport_stream_id;
31         int original_network_id;
32         int segment_last_section_number;
33         int last_table_id;
34 } EIThead;
35
36 typedef struct _EITbody {
37         int event_id;
38         char start_time[5];
39         char duration[3];
40         int running_status;
41         int free_CA_mode;
42         int descriptors_loop_length;
43
44         //
45         int yy;
46         int mm;
47         int dd;
48         int hh;
49         int hm;
50         int ss;
51         int dhh;
52         int dhm;
53         int dss;
54 } EITbody;
55
56 typedef struct _SEVTdesc {
57         int  descriptor_tag;
58         int  descriptor_length;
59         char ISO_639_language_code[3];
60         int  event_name_length;
61         char event_name[MAXSECLEN];
62         int  text_length;
63         char text[MAXSECLEN];
64 } SEVTdesc;
65
66 typedef struct _EEVTDhead {
67         int  descriptor_tag;
68         int  descriptor_length;
69         int  descriptor_number;
70         int  last_descriptor_number;
71         char ISO_639_language_code[3];
72         int  length_of_items;
73 } EEVTDhead;
74
75 typedef struct _EEVTDitem {
76         int  item_description_length;
77         char item_description[MAXSECLEN];
78         int  item_length;
79         char item[MAXSECLEN];
80
81         //
82         int  descriptor_number;
83 } EEVTDitem;
84
85 typedef struct _EEVTDtail {
86         int  text_length;
87         char text[MAXSECLEN];
88 } EEVTDtail;
89
90 typedef struct _ContentDesc {
91         int descriptor_tag;
92         int descriptor_length;
93         char content[MAXSECLEN];
94 } ContentDesc;
95
96 typedef struct _SeriesDesc {
97         int descriptor_tag;
98         int descriptor_length;
99         int series_id;
100         int repeat_label;
101         int program_pattern;
102         int expire_date_valid_flag;
103         int expire_date;
104         int episode_number;
105         int last_episode_number;
106         char series_name_char[MAXSECLEN];
107 } SeriesDesc;
108
109 class EIT : public Table
110 {
111 protected:
112     bool decode_section();
113
114 public:
115     uint8_t     _table_id;                      //  8
116     uint8_t     _section_syntax_indicator;      //  1
117                                                 //  1   '1'
118                                                 //  2   '11'
119     uint16_t    _section_length;                // 12
120     uint16_t    _service_id;                    // 16
121                                                 //  2   '11'
122     uint8_t     _version_number;                //  5
123     uint8_t     _current_next_indicator;        //  1
124     uint8_t     _section_number;                //  8
125     uint8_t     _last_section_number;           //  8
126     uint16_t    _transport_stream_id;           // 16
127     uint16_t    _original_network_id;           // 16
128     uint8_t     _segment_last_section_number;   //  8
129     uint8_t     _last_table_id;                 //  8
130
131     class Event
132     {
133     public:
134         uint16_t    _event_id;                  // 16
135         // start_time                              40
136         uint16_t    _st_year;
137         uint8_t     _st_month;
138         uint8_t     _st_day;
139         uint8_t     _st_hour;
140         uint8_t     _st_min;
141         uint8_t     _st_sec;
142         // duration                                24
143         uint8_t     _dur_hour;
144         uint8_t     _dur_min;
145         uint8_t     _dur_sec;
146         uint8_t     _running_status;            //  3
147         uint8_t     _free_CA_mode;              //  1
148         uint16_t    _descriptors_loop_length;   // 12
149
150         uint8_t *   _descriptor_ptr;
151         uint16_t    _descriptor_offset;
152         Descriptor  _descriptor;
153
154     public:
155         Descriptor *nextDescriptor();
156     };
157
158     Event       _event;
159     uint16_t    _next_event_offset;
160
161 public:
162     EIT();
163     EIT(EIT &eit);
164     ~EIT();
165     void reset();
166
167     EIT::Event *nextEvent();
168 };
169
170
171 } // TS
172 } // MPEG2
173 #endif