From 9313f054f3dda7449975f4f492ed17ef91e51f0e Mon Sep 17 00:00:00 2001 From: Christophe Massiot Date: Tue, 24 Aug 2010 21:09:17 +0000 Subject: [PATCH] * mpeg/psi_print.h: Move DVB-specific functions to dvb/si_print.h. * examples/dvb_print_si.c: Fix a number of end-of-lines. --- dvb/si_print.h | 208 ++++++++++++++++++++++++++++++++++++++++ examples/dvb_print_si.c | 31 +++--- mpeg/psi_print.h | 176 +--------------------------------- 3 files changed, 227 insertions(+), 188 deletions(-) create mode 100644 dvb/si_print.h diff --git a/dvb/si_print.h b/dvb/si_print.h new file mode 100644 index 0000000..7db44ae --- /dev/null +++ b/dvb/si_print.h @@ -0,0 +1,208 @@ +/***************************************************************************** + * si_print.h: ETSI EN 300 468 Service Information (printing) + ***************************************************************************** + * Copyright (C) 2010 VideoLAN + * $Id: psi_print.h -1 $ + * + * Authors: Christophe Massiot + * + * This program is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. + *****************************************************************************/ + +/* + * Placed here for dependancy reasons + */ + +#ifndef __BITSTREAM_DVB_SI_PRINT_H__ +#define __BITSTREAM_DVB_SI_PRINT_H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +/***************************************************************************** + * Descriptors list + *****************************************************************************/ +static inline void descs_print(uint8_t *p_descs, + f_print pf_print, void *print_opaque, + f_iconv pf_iconv, void *iconv_opaque) +{ + uint16_t j = 0; + uint8_t *p_desc; + + while ((p_desc = descs_get_desc(p_descs, j)) != NULL) { + uint8_t i_tag = desc_get_tag(p_desc); + j++; + + /* I am not proud of this */ + switch (i_tag) { + case 0x05: + if (desc05_validate(p_desc)) + desc05_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x09: + if (desc09_validate(p_desc)) + desc09_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x0a: + if (desc0a_validate(p_desc)) + desc0a_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x40: + if (desc40_validate(p_desc)) + desc40_print(p_desc, pf_print, print_opaque, + pf_iconv, iconv_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x43: + if (desc43_validate(p_desc)) + desc43_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x44: + if (desc44_validate(p_desc)) + desc44_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x46: + if (desc46_validate(p_desc)) + desc46_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x48: + if (desc48_validate(p_desc)) + desc48_print(p_desc, pf_print, print_opaque, + pf_iconv, iconv_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x56: + if (desc56_validate(p_desc)) + desc56_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x59: + if (desc59_validate(p_desc)) + desc59_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x5a: + if (desc5a_validate(p_desc)) + desc5a_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + case 0x6a: + if (desc6a_validate(p_desc)) + desc6a_print(p_desc, pf_print, print_opaque); + else + pf_print(print_opaque, "desc %hhx invalid", i_tag); + break; + default: + desc_print(p_desc, pf_print, print_opaque); + break; + } + } +} + +/***************************************************************************** + * Network Information Table + *****************************************************************************/ +static inline void nit_table_print(uint8_t **pp_sections, + f_print pf_print, void *print_opaque, + f_iconv pf_iconv, void *iconv_opaque) +{ + uint8_t i_last_section = psi_table_get_lastsection(pp_sections); + uint8_t i; + + pf_print(print_opaque, "new NIT %s networkid=%hu version=%hhu%s", + psi_table_get_tableid(pp_sections) == NIT_TABLE_ID_ACTUAL ? + "actual" : "other", + psi_table_get_tableidext(pp_sections), + psi_table_get_version(pp_sections), + !psi_table_get_current(pp_sections) ? " (next)" : ""); + descs_print(nit_get_descs(psi_table_get_section(pp_sections, 0)), + pf_print, print_opaque, pf_iconv, iconv_opaque); + + for (i = 0; i <= i_last_section; i++) { + uint8_t *p_section = psi_table_get_section(pp_sections, i); + uint8_t *p_ts; + int j = 0; + + while ((p_ts = nit_get_ts(p_section, j)) != NULL) { + j++; + pf_print(print_opaque, " * ts tsid=%hu onid=%hu", + nitn_get_tsid(p_ts), nitn_get_onid(p_ts)); + descs_print(nitn_get_descs(p_ts), pf_print, print_opaque, + pf_iconv, iconv_opaque); + } + } + + pf_print(print_opaque, "end NIT"); +} + +/***************************************************************************** + * Service Description Table + *****************************************************************************/ +static inline void sdt_table_print(uint8_t **pp_sections, + f_print pf_print, void *print_opaque, + f_iconv pf_iconv, void *iconv_opaque) +{ + uint8_t i_last_section = psi_table_get_lastsection(pp_sections); + uint8_t i; + + pf_print(print_opaque, "new SDT %s tsid=%hu version=%hhu%s onid=%hu", + psi_table_get_tableid(pp_sections) == SDT_TABLE_ID_ACTUAL ? + "actual" : "other", + psi_table_get_tableidext(pp_sections), + psi_table_get_version(pp_sections), + !psi_table_get_current(pp_sections) ? " (next)" : "", + sdt_get_onid(psi_table_get_section(pp_sections, 0))); + + for (i = 0; i <= i_last_section; i++) { + uint8_t *p_section = psi_table_get_section(pp_sections, i); + uint8_t *p_service; + int j = 0; + + while ((p_service = sdt_get_service(p_section, j)) != NULL) { + j++; + pf_print(print_opaque, " * service sid=%hu eit%s%s running=%hhu%s", + sdtn_get_sid(p_service), + sdtn_get_eitschedule(p_service) ? " schedule" : "", + sdtn_get_eitpresent(p_service) ? " present" : "", + sdtn_get_running(p_service), + sdtn_get_ca(p_service) ? " scrambled" : ""); + descs_print(sdtn_get_descs(p_service), pf_print, print_opaque, + pf_iconv, iconv_opaque); + } + } + + pf_print(print_opaque, "end SDT"); +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/examples/dvb_print_si.c b/examples/dvb_print_si.c index 9a17583..f6af33c 100644 --- a/examples/dvb_print_si.c +++ b/examples/dvb_print_si.c @@ -25,6 +25,7 @@ #include #include #include +#include #include /***************************************************************************** @@ -104,7 +105,7 @@ static char *iconv_wrapper(void *_unused, const char *psz_encoding, if (iconv_handle == (iconv_t)-1) iconv_handle = iconv_open(psz_native_encoding, psz_encoding); if (iconv_handle == (iconv_t)-1) { - fprintf(stderr, "couldn't convert from %s to %s (%m)", psz_encoding, + fprintf(stderr, "couldn't convert from %s to %s (%m)\n", psz_encoding, psz_native_encoding); return iconv_append_null(p_string, i_length); } @@ -113,13 +114,13 @@ static char *iconv_wrapper(void *_unused, const char *psz_encoding, i_out_length = i_length * 6; p = psz_string = malloc(i_out_length); if (iconv(iconv_handle, &p_string, &i_length, &p, &i_out_length) == -1) { - fprintf(stderr, "couldn't convert from %s to %s (%m)", psz_encoding, + fprintf(stderr, "couldn't convert from %s to %s (%m)\n", psz_encoding, psz_native_encoding); free(psz_string); return iconv_append_null(p_string, i_length); } if (i_length) - fprintf(stderr, "partial conversion from %s to %s", psz_encoding, + fprintf(stderr, "partial conversion from %s to %s\n", psz_encoding, psz_native_encoding); *p = '\0'; @@ -145,7 +146,7 @@ static void handle_pat(void) } if (!pat_table_validate(pp_next_pat_sections)) { - printf("invalid PAT received"); + printf("invalid PAT received\n"); psi_table_free(pp_next_pat_sections); psi_table_init(pp_next_pat_sections); return; @@ -170,7 +171,7 @@ static void handle_pat(void) if (i_sid == 0) { if (i_pid != NIT_PID) printf( - "NIT is carried on PID %hu which isn't DVB compliant", + "NIT is carried on PID %hu which isn't DVB compliant\n", i_pid); continue; /* NIT */ } @@ -242,7 +243,7 @@ static void handle_pat(void) static void handle_pat_section(uint16_t i_pid, uint8_t *p_section) { if (i_pid != PAT_PID || !pat_validate(p_section)) { - printf("invalid PAT section received on PID %hu", i_pid); + printf("invalid PAT section received on PID %hu\n", i_pid); free(p_section); return; } @@ -264,7 +265,7 @@ static void handle_pmt(uint16_t i_pid, uint8_t *p_pmt) /* we do this before checking the service ID */ if (!pmt_validate(p_pmt)) { - printf("invalid PMT section received on PID %hu", i_pid); + printf("invalid PMT section received on PID %hu\n", i_pid); free(p_pmt); return; } @@ -274,7 +275,7 @@ static void handle_pmt(uint16_t i_pid, uint8_t *p_pmt) break; if (i == i_nb_sids) { - printf("ghost PMT for service %hu carried on PID %hu", i_sid, i_pid); + printf("ghost PMT for service %hu carried on PID %hu\n", i_sid, i_pid); p_sid = malloc(sizeof(sid_t)); pp_sids = realloc(pp_sids, ++i_nb_sids * sizeof(sid_t *)); pp_sids[i] = p_sid; @@ -284,7 +285,7 @@ static void handle_pmt(uint16_t i_pid, uint8_t *p_pmt) } else { p_sid = pp_sids[i]; if (i_pid != p_sid->i_pmt_pid) - printf("ghost PMT for service %hu carried on PID %hu", i_sid, + printf("ghost PMT for service %hu carried on PID %hu\n", i_sid, i_pid); } @@ -316,7 +317,7 @@ static void handle_nit(void) } if (!nit_table_validate(pp_next_nit_sections)) { - printf("invalid NIT received"); + printf("invalid NIT received\n"); psi_table_free( pp_next_nit_sections ); psi_table_init( pp_next_nit_sections ); return; @@ -334,7 +335,7 @@ static void handle_nit(void) static void handle_nit_section(uint16_t i_pid, uint8_t *p_section) { if (i_pid != NIT_PID || !nit_validate(p_section)) { - printf("invalid NIT section received on PID %hu", i_pid); + printf("invalid NIT section received on PID %hu\n", i_pid); free(p_section); return; } @@ -360,7 +361,7 @@ static void handle_sdt(void) } if (!sdt_table_validate(pp_next_sdt_sections)) { - printf("invalid SDT received"); + printf("invalid SDT received\n"); psi_table_free(pp_next_sdt_sections); psi_table_init(pp_next_sdt_sections); return; @@ -378,7 +379,7 @@ static void handle_sdt(void) static void handle_sdt_section(uint16_t i_pid, uint8_t *p_section) { if (i_pid != SDT_PID || !sdt_validate(p_section)) { - printf("invalid SDT section received on PID %hu", i_pid); + printf("invalid SDT section received on PID %hu\n", i_pid); free(p_section); return; } @@ -397,7 +398,7 @@ static void handle_section(uint16_t i_pid, uint8_t *p_section) uint8_t i_table_id = psi_get_tableid(p_section); if (!psi_validate(p_section)) { - printf("invalid section on PID %hu", i_pid); + printf("invalid section on PID %hu\n", i_pid); free(p_section); return; } @@ -488,7 +489,7 @@ int main(int i_argc, char **ppsz_argv) size_t i_ret = fread(p_ts, sizeof(p_ts), 1, stdin); if (i_ret != 1) continue; if (!ts_validate(p_ts)) - printf("invalid TS packet"); + printf("invalid TS packet\n"); else { uint16_t i_pid = ts_get_pid(p_ts); ts_pid_t *p_pid = &p_pids[i_pid]; diff --git a/mpeg/psi_print.h b/mpeg/psi_print.h index a52a338..48cf255 100644 --- a/mpeg/psi_print.h +++ b/mpeg/psi_print.h @@ -22,110 +22,15 @@ #include #include -#include + +/* here you must manually include or the ATSC equivalent + * if/when it is available */ #ifdef __cplusplus extern "C" { #endif -/***************************************************************************** - * Descriptors list - *****************************************************************************/ -static inline void descs_print(uint8_t *p_descs, - f_print pf_print, void *print_opaque, - f_iconv pf_iconv, void *iconv_opaque) -{ - uint16_t j = 0; - uint8_t *p_desc; - - while ((p_desc = descs_get_desc(p_descs, j)) != NULL) { - uint8_t i_tag = desc_get_tag(p_desc); - j++; - - /* I am not proud of this */ - switch (i_tag) { - case 0x05: - if (desc05_validate(p_desc)) - desc05_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x09: - if (desc09_validate(p_desc)) - desc09_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x0a: - if (desc0a_validate(p_desc)) - desc0a_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x40: - if (desc40_validate(p_desc)) - desc40_print(p_desc, pf_print, print_opaque, - pf_iconv, iconv_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x43: - if (desc43_validate(p_desc)) - desc43_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x44: - if (desc44_validate(p_desc)) - desc44_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x46: - if (desc46_validate(p_desc)) - desc46_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x48: - if (desc48_validate(p_desc)) - desc48_print(p_desc, pf_print, print_opaque, - pf_iconv, iconv_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x56: - if (desc56_validate(p_desc)) - desc56_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x59: - if (desc59_validate(p_desc)) - desc59_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x5a: - if (desc5a_validate(p_desc)) - desc5a_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - case 0x6a: - if (desc6a_validate(p_desc)) - desc6a_print(p_desc, pf_print, print_opaque); - else - pf_print(print_opaque, "desc %hhx invalid", i_tag); - break; - default: - desc_print(p_desc, pf_print, print_opaque); - break; - } - } -} - /***************************************************************************** * Program Map Table *****************************************************************************/ @@ -154,81 +59,6 @@ static inline void pmt_print(uint8_t *p_pmt, pf_print(print_opaque, "end PMT"); } -/***************************************************************************** - * Network Information Table - *****************************************************************************/ -static inline void nit_table_print(uint8_t **pp_sections, - f_print pf_print, void *print_opaque, - f_iconv pf_iconv, void *iconv_opaque) -{ - uint8_t i_last_section = psi_table_get_lastsection(pp_sections); - uint8_t i; - - pf_print(print_opaque, "new NIT %s networkid=%hu version=%hhu%s", - psi_table_get_tableid(pp_sections) == NIT_TABLE_ID_ACTUAL ? - "actual" : "other", - psi_table_get_tableidext(pp_sections), - psi_table_get_version(pp_sections), - !psi_table_get_current(pp_sections) ? " (next)" : ""); - descs_print(nit_get_descs(psi_table_get_section(pp_sections, 0)), - pf_print, print_opaque, pf_iconv, iconv_opaque); - - for (i = 0; i <= i_last_section; i++) { - uint8_t *p_section = psi_table_get_section(pp_sections, i); - uint8_t *p_ts; - int j = 0; - - while ((p_ts = nit_get_ts(p_section, j)) != NULL) { - j++; - pf_print(print_opaque, " * ts tsid=%hu onid=%hu", - nitn_get_tsid(p_ts), nitn_get_onid(p_ts)); - descs_print(nitn_get_descs(p_ts), pf_print, print_opaque, - pf_iconv, iconv_opaque); - } - } - - pf_print(print_opaque, "end NIT"); -} - -/***************************************************************************** - * Service Description Table - *****************************************************************************/ -static inline void sdt_table_print(uint8_t **pp_sections, - f_print pf_print, void *print_opaque, - f_iconv pf_iconv, void *iconv_opaque) -{ - uint8_t i_last_section = psi_table_get_lastsection(pp_sections); - uint8_t i; - - pf_print(print_opaque, "new SDT %s tsid=%hu version=%hhu%s onid=%hu", - psi_table_get_tableid(pp_sections) == SDT_TABLE_ID_ACTUAL ? - "actual" : "other", - psi_table_get_tableidext(pp_sections), - psi_table_get_version(pp_sections), - !psi_table_get_current(pp_sections) ? " (next)" : "", - sdt_get_onid(psi_table_get_section(pp_sections, 0))); - - for (i = 0; i <= i_last_section; i++) { - uint8_t *p_section = psi_table_get_section(pp_sections, i); - uint8_t *p_service; - int j = 0; - - while ((p_service = sdt_get_service(p_section, j)) != NULL) { - j++; - pf_print(print_opaque, " * service sid=%hu eit%s%s running=%hhu%s", - sdtn_get_sid(p_service), - sdtn_get_eitschedule(p_service) ? " schedule" : "", - sdtn_get_eitpresent(p_service) ? " present" : "", - sdtn_get_running(p_service), - sdtn_get_ca(p_service) ? " scrambled" : ""); - descs_print(sdtn_get_descs(p_service), pf_print, print_opaque, - pf_iconv, iconv_opaque); - } - } - - pf_print(print_opaque, "end SDT"); -} - #ifdef __cplusplus } #endif