diff --git a/eit_desc.c b/eit_desc.c index 89193bf..844314d 100644 --- a/eit_desc.c +++ b/eit_desc.c @@ -22,9 +22,7 @@ static void ts_eit_regenerate_packet_data(struct ts_eit *eit) { free(ts_packets); } -struct ts_eit *ts_eit_alloc_init(uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t table_id, uint8_t sec_number, uint8_t last_sec_number) { - struct ts_eit *eit = ts_eit_alloc(); - +struct ts_eit *ts_eit_init(struct ts_eit *eit, uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t table_id, uint8_t sec_number, uint8_t last_sec_number) { eit->ts_header.pid = 0x12; eit->ts_header.pusi = 1; eit->ts_header.payload_field = 1; @@ -48,6 +46,8 @@ struct ts_eit *ts_eit_alloc_init(uint16_t service_id, uint16_t transport_stream_ eit->segment_last_section_number = 0; // 8 bits eit->last_table_id = table_id; // 8 bits + eit->streams_num = 0; + eit->initialized = 1; ts_eit_regenerate_packet_data(eit); @@ -55,6 +55,14 @@ struct ts_eit *ts_eit_alloc_init(uint16_t service_id, uint16_t transport_stream_ return eit; } +struct ts_eit *ts_eit_alloc_init(uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t table_id, uint8_t sec_number, uint8_t last_sec_number) { + struct ts_eit *eit = ts_eit_alloc(); + if (!eit) + return NULL; + + return ts_eit_init(eit, service_id, transport_stream_id, org_network_id, table_id, sec_number, last_sec_number); +} + struct ts_eit *ts_eit_alloc_init_pf(uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t sec_number, uint8_t last_sec_number) { return ts_eit_alloc_init(service_id, transport_stream_id, org_network_id, 0x4e, sec_number, last_sec_number); } diff --git a/nit_desc.c b/nit_desc.c index e61a83c..3cb6936 100644 --- a/nit_desc.c +++ b/nit_desc.c @@ -22,9 +22,7 @@ static void ts_nit_regenerate_packet_data(struct ts_nit *nit) { free(ts_packets); } -struct ts_nit *ts_nit_alloc_init(uint16_t network_id) { - struct ts_nit *nit = ts_nit_alloc(); - +struct ts_nit *ts_nit_init(struct ts_nit *nit, uint16_t network_id) { nit->ts_header.pid = 0x10; nit->ts_header.pusi = 1; nit->ts_header.payload_field = 1; @@ -45,6 +43,8 @@ struct ts_nit *ts_nit_alloc_init(uint16_t network_id) { nit->reserved2 = 0xf; nit->ts_loop_size = 0; // 16 bits + nit->streams_num = 0; + nit->initialized = 1; ts_nit_regenerate_packet_data(nit); @@ -52,6 +52,13 @@ struct ts_nit *ts_nit_alloc_init(uint16_t network_id) { return nit; } +struct ts_nit *ts_nit_alloc_init(uint16_t network_id) { + struct ts_nit *nit = ts_nit_alloc(); + if (!nit) + return NULL; + return ts_nit_init(nit, network_id); +} + int ts_nit_add_network_name_descriptor(struct ts_nit *nit, char *network_name) { if (!network_name || strlen(network_name) > 255) return 0; diff --git a/pat_desc.c b/pat_desc.c index 2f25d02..49f525e 100644 --- a/pat_desc.c +++ b/pat_desc.c @@ -22,9 +22,7 @@ static void ts_pat_regenerate_packet_data(struct ts_pat *pat) { free(ts_packets); } -struct ts_pat *ts_pat_alloc_init(uint16_t transport_stream_id) { - struct ts_pat *pat = ts_pat_alloc(); - +struct ts_pat *ts_pat_init(struct ts_pat *pat, uint16_t transport_stream_id) { pat->ts_header.pid = 0x00; pat->ts_header.pusi = 1; pat->ts_header.payload_field = 1; @@ -41,6 +39,8 @@ struct ts_pat *ts_pat_alloc_init(uint16_t transport_stream_id) { pat->section_header->ts_id_number = transport_stream_id; + pat->programs_num = 0; + pat->initialized = 1; ts_pat_regenerate_packet_data(pat); @@ -48,6 +48,13 @@ struct ts_pat *ts_pat_alloc_init(uint16_t transport_stream_id) { return pat; } +struct ts_pat *ts_pat_alloc_init(uint16_t transport_stream_id) { + struct ts_pat *pat = ts_pat_alloc(); + if (!pat) + return NULL; + return ts_pat_init(pat, transport_stream_id); +} + int ts_pat_add_program(struct ts_pat *pat, uint16_t program, uint16_t pat_pid) { int i; if (pat->programs_max == pat->programs_num) diff --git a/sdt_desc.c b/sdt_desc.c index 20e89db..bf444ca 100644 --- a/sdt_desc.c +++ b/sdt_desc.c @@ -22,9 +22,7 @@ static void ts_sdt_regenerate_packet_data(struct ts_sdt *sdt) { free(ts_packets); } -struct ts_sdt *ts_sdt_alloc_init(uint16_t org_network_id, uint16_t transport_stream_id) { - struct ts_sdt *sdt = ts_sdt_alloc(); - +struct ts_sdt *ts_sdt_init(struct ts_sdt *sdt, uint16_t org_network_id, uint16_t transport_stream_id) { sdt->ts_header.pid = 0x11; sdt->ts_header.pusi = 1; sdt->ts_header.payload_field = 1; @@ -43,6 +41,8 @@ struct ts_sdt *ts_sdt_alloc_init(uint16_t org_network_id, uint16_t transport_str sdt->original_network_id = org_network_id; // 16 bits sdt->reserved = 0xff; // 8 bits + sdt->streams_num = 0; + sdt->initialized = 1; ts_sdt_regenerate_packet_data(sdt); @@ -50,6 +50,13 @@ struct ts_sdt *ts_sdt_alloc_init(uint16_t org_network_id, uint16_t transport_str return sdt; } +struct ts_sdt *ts_sdt_alloc_init(uint16_t org_network_id, uint16_t transport_stream_id) { + struct ts_sdt *sdt = ts_sdt_alloc(); + if (!sdt) + return NULL; + return ts_sdt_init(sdt, org_network_id, transport_stream_id); +} + static int ts_sdt_add_stream(struct ts_sdt *sdt, uint16_t service_id, uint8_t *desc, uint8_t desc_size) { if (sdt->streams_num == sdt->streams_max - 1 || desc_size == 0) { FREE(desc); diff --git a/tdt_desc.c b/tdt_desc.c index f381553..35e7a19 100644 --- a/tdt_desc.c +++ b/tdt_desc.c @@ -51,6 +51,14 @@ static struct ts_tdt *ts_tdt_init_empty(struct ts_tdt *tdt, time_t ts, int tot) return tdt; } +struct ts_tdt *ts_tdt_init(struct ts_tdt *tdt, time_t ts) { + return ts_tdt_init_empty(tdt, ts, 0); +} + +struct ts_tdt *ts_tot_init(struct ts_tdt *tot, time_t ts) { + return ts_tdt_init_empty(tot, ts, 1); +} + struct ts_tdt *ts_tdt_alloc_init(time_t ts) { return ts_tdt_init_empty(ts_tdt_alloc(), ts, 0); } diff --git a/tsfuncs.h b/tsfuncs.h index f8e099e..025cd98 100644 --- a/tsfuncs.h +++ b/tsfuncs.h @@ -137,6 +137,7 @@ void ts_section_data_gen_ts_packets (struct ts_header *ts_header, uint8_t * // PAT struct ts_pat * ts_pat_alloc (void); +struct ts_pat * ts_pat_init (struct ts_pat *pat, uint16_t transport_stream_id); struct ts_pat * ts_pat_alloc_init (uint16_t transport_stream_id); struct ts_pat * ts_pat_push_packet (struct ts_pat *pat, uint8_t *ts_packet); void ts_pat_clear (struct ts_pat *pat); @@ -177,7 +178,6 @@ int ts_get_ecm_info_by_pid (struct ts_pmt *pmt, uint16_t *caid, uint16_t ca_p // PMT struct ts_pmt * ts_pmt_alloc (void); -struct ts_pmt * ts_pmt_alloc_init (uint16_t org_network_id, uint16_t transport_stream_id); struct ts_pmt * ts_pmt_push_packet (struct ts_pmt *pmt, uint8_t *ts_packet); void ts_pmt_clear (struct ts_pmt *pmt); void ts_pmt_free (struct ts_pmt **pmt); @@ -192,6 +192,7 @@ int ts_pmt_is_same (struct ts_pmt *pmt1, struct ts_pmt *pmt2); // NIT struct ts_nit * ts_nit_alloc (void); +struct ts_nit * ts_nit_init (struct ts_nit *nit, uint16_t network_id); struct ts_nit * ts_nit_alloc_init (uint16_t network_id); struct ts_nit * ts_nit_push_packet (struct ts_nit *nit, uint8_t *ts_packet); void ts_nit_clear (struct ts_nit *nit); @@ -210,6 +211,7 @@ int ts_nit_is_same (struct ts_nit *nit1, struct ts_nit *nit2); // SDT struct ts_sdt * ts_sdt_alloc (void); +struct ts_sdt * ts_sdt_init (struct ts_sdt *sdt, uint16_t org_network_id, uint16_t transport_stream_id); struct ts_sdt * ts_sdt_alloc_init (uint16_t org_network_id, uint16_t transport_stream_id); struct ts_sdt * ts_sdt_push_packet (struct ts_sdt *sdt, uint8_t *ts_packet); void ts_sdt_clear (struct ts_sdt *sdt); @@ -225,6 +227,7 @@ int ts_sdt_is_same (struct ts_sdt *sdt1, struct ts_sdt *sdt2); // EIT struct ts_eit * ts_eit_alloc (void); +struct ts_eit * ts_eit_init (struct ts_eit *eit, uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t table_id, uint8_t sec_number, uint8_t last_sec_number); struct ts_eit * ts_eit_alloc_init (uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t table_id, uint8_t sec_number, uint8_t last_sec_number); struct ts_eit * ts_eit_alloc_init_pf (uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t sec_number, uint8_t last_sec_number); // Shortcut using table_id 0x4e struct ts_eit * ts_eit_alloc_init_schedule (uint16_t service_id, uint16_t transport_stream_id, uint16_t org_network_id, uint8_t sec_number, uint8_t last_sec_number); // Shortcut using table_id 0x50 @@ -247,6 +250,8 @@ int ts_eit_is_same (struct ts_eit *eit1, struct ts_eit *eit2); // TDT struct ts_tdt * ts_tdt_alloc(void); +struct ts_tdt * ts_tdt_init (struct ts_tdt *tdt, time_t ts); +struct ts_tdt * ts_tot_init (struct ts_tdt *tot, time_t ts); struct ts_tdt * ts_tdt_alloc_init (time_t ts); struct ts_tdt * ts_tot_alloc_init (time_t ts); void ts_tdt_clear (struct ts_tdt *tdt);