OSDN Git Service

ソースコード登録
[tsparser/tsparser.git] / src / ARIB / si.h
1 #pragma once
2
3 #include <inttypes.h>
4 #include <list>
5 #include "../TS/psi.h"
6 #include "../TS/utils.h"
7 #include "descriptor.h"
8 #include "converter.h"
9
10 namespace TS {
11         namespace PSI {
12                 namespace ARIB {
13
14 class ServiceInformation : public TS::PSI::Section
15 {
16 protected:
17         static const uint32_t           SI_PARSE_SIZE   = 5;
18
19 public:
20         union ID {
21                 uint16_t                network_id;                             // NIT, TLV-NIT
22                 uint16_t                bouquet_id;                             // BAT
23                 uint16_t                transport_stream_id;    // SDT
24                 uint16_t                service_id;                             // EIT, PCAT
25                 uint16_t                original_network_id;    // BIT, NBIT
26                 uint16_t                original_service_id;    // LDT
27                 uint16_t                table_id_extension;             // AMT
28         } si_id;                                                                        // 16bit
29
30         uint8_t                         reserved_2;                             //  2bit
31         uint8_t                         version_number;                 //  5bit
32         uint8_t                         current_next_indicator; //  1bit
33         uint8_t                         section_number;                 //  8bit
34         uint8_t                         last_section_number;    //  8bit
35
36         ServiceInformation( int32_t id = -1, TS::Description::DescriptorParser *des_parser = NULL);
37         virtual ~ServiceInformation();
38
39 protected:
40         STATUS                  parse( SectionBuffer &sec);
41         virtual STATUS  parseSection( SectionBuffer &sec);
42 };
43
44 class NIT : public ServiceInformation
45 {
46 private:
47         static const uint32_t           STREAM_HEADER_SIZE              = 6;
48         
49 public:
50         struct STREAM {
51                 uint16_t                transport_stream_id;                    // 16bit
52                 uint16_t                original_network_id;                    // 16bit
53                 uint8_t                 reserved_future_use;                    //  4bit
54                 uint16_t                transport_descriptors_length;   // 12bit
55                 DESCRIPTORS             descriptors;
56         };
57         typedef std::list< STREAM>      STREAMS;
58         
59         uint8_t                         reserved_future_use1;                   //  4bit
60         uint16_t                        network_descriptors_length;             // 12bit
61         DESCRIPTORS                     networks;
62         uint8_t                         reserved_future_use2;                   //  4bit
63         uint16_t                        transport_stream_loop_length;   // 12bit
64         STREAMS                         streams;
65         
66 public:
67         NIT( TS::Description::DescriptorParser *des_parser = NULL);
68         virtual ~NIT();
69
70         void    clear();
71         
72 private:
73         STATUS  parseSection( SectionBuffer &sec);
74         bool    checkID( uint8_t id);
75
76         void    clearNIT();
77 };
78
79
80 // SDT 0x42, 0x46
81 class SDT : public ServiceInformation
82 {
83 private:
84         static const uint32_t           SD_PARSE_SIZE           = 3;
85         static const uint32_t           SERVICE_HEADER_SIZE     = 5;
86
87 public:
88         struct SERVICE {
89                 uint16_t                service_id;                                             // 16bit
90                 uint8_t                 reserved_future_use;                    //  3bit
91                 uint8_t                 EIT_user_defined_flags;                 //  3bit
92                 uint8_t                 EIT_schedule_flag;                              //  1bit
93                 uint8_t                 EIT_present_following_flag;             //  1bit
94                 uint8_t                 running_status;                                 //  3bit
95                 uint8_t                 free_CA_mode;                                   //  1bit
96                 uint16_t                descriptors_loop_length;                // 12bit
97                 DESCRIPTORS             descriptors;
98         };
99         typedef std::list< SERVICE>     SERVICES;
100
101         uint16_t                        original_network_id;                    // 16bit
102         uint8_t                         reserved_future_use;                    //  8bit
103         SERVICES                        services;
104         
105 public:
106         SDT( TS::Description::DescriptorParser *des_parser = NULL);
107         virtual ~SDT();
108
109         void    clear();
110         
111 private:
112         STATUS  parseSection( SectionBuffer &sec);
113         bool    checkID( uint8_t id);
114
115         void    clearSDT();
116 };
117
118
119 // EIT
120 class EIT : public ServiceInformation
121 {
122 private:
123         static const uint32_t   EI_PARSE_SIZE           = 6;
124         static const uint32_t   EVENT_HEADER_SIZE       = 12;
125
126 public:
127         struct EVENT {
128         public:
129                 uint16_t                event_id;                                               // 16bit
130                 time_t                  start_time;                                             // 40bit
131                 int32_t                 duration;                                               // 24bit sec
132                 uint8_t                 running_status;                                 //  3bit
133                 uint8_t                 free_CA_mode;                                   //  1bit
134                 uint16_t                descriptors_loop_length;                // 12bit
135                 DESCRIPTORS             descriptors;
136         };
137         typedef std::list< EVENT>       EVENTS;
138
139         uint16_t                        transport_stream_id;                    // 16bit
140         uint16_t                        original_network_id;                    // 16bit
141         uint8_t                         segment_last_section_number;    //  8bit
142         uint8_t                         last_table_id;                                  //  8bit
143         EVENTS                          events;
144         
145 public:
146         EIT( TS::Description::DescriptorParser *des_parser = NULL);
147         virtual ~EIT();
148
149         void    clear();
150         
151 private:
152         STATUS  parseSection( SectionBuffer &sec);
153         bool    checkID( uint8_t id);
154
155         void    clearEIT();
156 };
157
158                 }
159         }
160 }
161
162 /*
163 network_information_section(){
164         reserved_future_use 4 bslbf
165         network_descriptors_length 12 uimsbf
166
167 bouquet_association_section(){
168         reserved_future_use 4 bslbf
169         bouquet_descriptors_length 12 uimsbf
170
171 service description section(){
172         original_network_id 16 uimsbf
173         reserved_future_use 8 bslbf
174
175 event_information_section(){
176         transport_stream_id 16 uimsbf
177         original_network_id 16 uimsbf
178         segment_last_section_number 8 uimsbf
179         last_table_id 8 uimsbf
180
181 partial_content_announcement_section(){
182         transport_stream_id 16 uimsbf
183         original_network_id 16 uimsbf
184         content_id 32 uimsbf
185         num_of_content_version 8 uimsbf
186
187 broadcaster_information _section(){
188         reserved_future_use 3 bslbf
189         broadcast_view_propriety 1 bslbf
190         first_descriptors_length 12 uimsbf
191
192 network_board_information_section()
193
194 linked_description_section(){
195         transport_stream_id 16 uimsbf
196         original_network_id 16 uimsbf
197
198 TLV_network_information_table( ){
199         reserved_future_use 4 bslbf
200         network_descriptors_length 12 bslbf
201
202 address_map_table() {
203         num_of_service_id 10 uimsbf
204         reserved_future_use 6 bslbf
205
206 */