[Git][videolan/libdvbpsi][master] 11 commits: dvbinfo: dump descriptor 0x50
Jean-Paul Saman <[email protected]> Wed, 12 Jul 2017 09:56:07 +0200
| Newsgroups | gmane.comp.video.videolan.libdvbpsi.devel |
|---|---|
| Message-ID | <[email protected]> |
--===============4610353483852607666== Content-Type: multipart/alternative; boundary="--==_mimepart_5965d61782f11_13c383fa998ebcab8100860"; charset=UTF-8 Content-Transfer-Encoding: 7bit ----==_mimepart_5965d61782f11_13c383fa998ebcab8100860 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Jean-Paul Saman pushed to branch master at videolan / libdvbpsi Commits: 6ed78a23 by Jean-Paul Saman at 2017-02-17T13:02:02+01:00 dvbinfo: dump descriptor 0x50 - - - - - 539473b9 by Jean-Paul Saman at 2017-02-17T13:20:12+01:00 dvbinfo: dump parental rating descriptor - - - - - 71eac086 by Jean-Paul Saman at 2017-02-17T13:26:35+01:00 dvbinfo: dump teletext descriptor - - - - - 7ff4682a by Jean-Paul Saman at 2017-02-17T13:39:12+01:00 dvbinfo: improve layout - - - - - 7e9f4ed3 by Jean-Paul Saman at 2017-06-22T15:04:00+02:00 src/dvbpsi.h: set i_last_section_number when adding a new section to the end of the list The function dvbpsi_decoder_psi_section_add() never set p_decoder::i_last_section_number when adding a new section at the end of the list. This was left to the decoder implementations. However the correct action would have been to set p_decoder::i_last_section_number in dvbpsi_decoder_psi_section_add(). - - - - - d6556776 by Jean-Paul Saman at 2017-06-23T14:54:08+02:00 src/demux.c: fix CID #164718 - - - - - 5a112301 by Jean-Paul Saman at 2017-06-23T15:06:05+02:00 src/chain.h: improved documentation - - - - - 4c7bcee8 by Jean-Paul Saman at 2017-06-23T15:09:56+02:00 src/demux: functions dvbpsi_*DemuxSubDecoder() are no longer implemented, but are merely empty stubs - - - - - 2b95c49c by Jean-Paul Saman at 2017-06-23T15:36:44+02:00 SIS: dvbpsi_sis_cmd_splice_schedule_decode() we are already on byte further - - - - - 37f981c3 by Steven Toth at 2017-07-12T09:43:37+02:00 SCTE35 / CUEI Descriptor parsing bug. Descriptor lengths of one byte fail to parse, instead returning null. The Spec from 2004 to 2016 shows the descriptor payload has never been more than a single byte. See SCTE 35 2016 Page 19 Table 2 (Section 8.2). Correct the length validation check, and reject any descriptor that IS NOT one byte long, as per the spec. Signed-off-by: Jean-Paul Saman <[email protected]> - - - - - dfa10bae by Jean-Paul Saman at 2017-07-12T09:47:54+02:00 update NEWS and AUTHORS - - - - - 8 changed files: - AUTHORS - NEWS - examples/dvbinfo/libdvbpsi.c - src/chain.h - src/demux.c - src/descriptors/custom/dr_8a_scte.c - src/dvbpsi.c - src/tables/sis.c Changes: ===================================== AUTHORS ===================================== --- a/AUTHORS +++ b/AUTHORS @@ -105,6 +105,11 @@ D: Splice Information Table D: Bugfixing D: Maintainer +N: Steven Toth +E: [email protected] +D: Bugfixing +D: Descriptor 0x8a + N: Yonathan Yusim D: Descriptor 0xa1 ===================================== NEWS ===================================== --- a/NEWS +++ b/NEWS @@ -18,7 +18,7 @@ Changes between 1.3.0 and 2.0.0-git: - 0x24 Content labelling descriptor - 0x65 Scrambling descriptor - 0x67 DVB Transport Stream descriptor - * Fix bugs in descriptors: 0x41, 0x44, 0x4a, 0x4b, 0x53, 0x54, 0x55, 0x56, 0x59, 0xa0 + * Fix bugs in descriptors: 0x41, 0x44, 0x4a, 0x4b, 0x53, 0x54, 0x55, 0x56, 0x59, 0x8a, 0xa0 * Fix bugs in table: CA, EIT, NIT * Work on SIS table and splice commands. * More descriptor tests ===================================== examples/dvbinfo/libdvbpsi.c ===================================== --- a/examples/dvbinfo/libdvbpsi.c +++ b/examples/dvbinfo/libdvbpsi.c @@ -1194,6 +1194,24 @@ static void DumpSystemClockDescriptor(const void *p_descriptor) } /***************************************************************************** + * DumpComponentDescriptor + *****************************************************************************/ +static void DumpComponentDescriptor(const void *p_descriptor) +{ + const dvbpsi_dvb_component_dr_t *p_dvb_component_dr = p_descriptor; + printf("\t\tstream content: %d\n", p_dvb_component_dr->i_stream_content); + printf("\t\tcomponent type: %d\n", p_dvb_component_dr->i_component_type); + printf("\t\tcomponent tag : %d\n", p_dvb_component_dr->i_component_tag); + printf("\t\tISO 639 code : %c%c%c\n", p_dvb_component_dr->i_iso_639_code[0], + p_dvb_component_dr->i_iso_639_code[1], p_dvb_component_dr->i_iso_639_code[2]); + printf("\t\ttext :"); + for (int i = 0; i < p_dvb_component_dr->i_text_length; i++) { + printf("%c", p_dvb_component_dr->i_text[i]); + } + printf("\n"); +} + +/***************************************************************************** * DumpStreamIdentifierDescriptor *****************************************************************************/ static void DumpStreamIdentifierDescriptor(const void *p_descriptor) @@ -1376,6 +1394,37 @@ static void DumpContentDescriptor(const void *p_descriptor) } /***************************************************************************** + * DumpParentalRatingDescriptor + *****************************************************************************/ +static void DumpParentalRatingDescriptor(const void *p_descriptor) +{ + const dvbpsi_dvb_parental_rating_dr_t *p_parental_rating_descriptor = p_descriptor; + printf("Parental ratings\n"); + for (int i = 0; i < p_parental_rating_descriptor->i_ratings_number; i++) {; + printf("\t\tcountry : %d\n", p_parental_rating_descriptor->p_parental_rating[i].i_country_code); + printf("\t\trating : %d\n", p_parental_rating_descriptor->p_parental_rating[i].i_rating); + } +} + +/***************************************************************************** + * DumpTeletextDescriptor + *****************************************************************************/ +static void DumpTeletextDescriptor(const void *p_descriptor) +{ + const dvbpsi_dvb_teletext_dr_t *p_teletext_descriptor = p_descriptor; + printf("Teletext pages\n"); + for (int i = 0; i < p_teletext_descriptor->i_pages_number; i++) { + printf("\t\tISO 6392 language code: %c%c%c\n", + p_teletext_descriptor->p_pages[i].i_iso6392_language_code[0], + p_teletext_descriptor->p_pages[i].i_iso6392_language_code[1], + p_teletext_descriptor->p_pages[i].i_iso6392_language_code[2]); + printf("\t\tteletext type : %d\n", p_teletext_descriptor->p_pages[i].i_teletext_type); + printf("\t\tteletext magazine : %d\n", p_teletext_descriptor->p_pages[i].i_teletext_magazine_number); + printf("\t\tteletext page : %d\n", p_teletext_descriptor->p_pages[i].i_teletext_page_number); + } +} + +/***************************************************************************** * DumpSubtitleDescriptor *****************************************************************************/ static void DumpSubtitleDescriptor(const void *p_descriptor) @@ -1950,6 +1999,10 @@ static void DumpDescriptor(dvbpsi_descriptor_t *p_descriptor) p_decoded = dvbpsi_decode_dvb_tshifted_ev_dr(p_descriptor); dump_dr_fn = DumpTimeShiftedEventDescriptor; break; + case 0x50: + p_decoded = dvbpsi_decode_dvb_component_dr(p_descriptor); + dump_dr_fn = DumpComponentDescriptor; + break; case 0x52: p_decoded = dvbpsi_decode_dvb_stream_identifier_dr(p_descriptor); dump_dr_fn = DumpStreamIdentifierDescriptor; @@ -1962,6 +2015,14 @@ static void DumpDescriptor(dvbpsi_descriptor_t *p_descriptor) p_decoded = dvbpsi_decode_dvb_content_dr(p_descriptor); dump_dr_fn = DumpContentDescriptor; break; + case 0x55: + p_decoded = dvbpsi_decode_dvb_parental_rating_dr(p_descriptor); + dump_dr_fn = DumpParentalRatingDescriptor; + break; + case 0x56: + p_decoded = dvbpsi_decode_dvb_teletext_dr(p_descriptor); + dump_dr_fn = DumpTeletextDescriptor; + break; case 0x59: p_decoded = dvbpsi_decode_dvb_subtitling_dr(p_descriptor); dump_dr_fn = DumpSubtitleDescriptor; @@ -1972,7 +2033,7 @@ static void DumpDescriptor(dvbpsi_descriptor_t *p_descriptor) break; } - if(dump_dr_fn && p_decoded) + if (dump_dr_fn && p_decoded) { /* call the dump function if we could decode the descriptor. */ dump_dr_fn(p_decoded); ===================================== src/chain.h ===================================== --- a/src/chain.h +++ b/src/chain.h @@ -39,12 +39,12 @@ * ----------------------------------------------------------------------------------- * - dvbpsi_AttachDemux | @see dvbpsi_demux_chain_new - * - dvbpsi_DetachDemux | @see dvbpsi_demux_chain_delete - - * - dvbpsi_Demux | - + * - dvbpsi_Demux | no replacement - * - dvbpsi_demuxGetSubDecoder | @see dvbpsi_decoder_chain_get - - * - dvbpsi_NewDemuxSubDecoder | - - * - dvbpsi_AttachDemuxSubDecoder | - - * - dvbspi_DetachDemuxSubDecoder | - - * ------------------------------------------------------------------------------------ + * - dvbpsi_NewDemuxSubDecoder | no replacement - + * - dvbpsi_AttachDemuxSubDecoder | no replacement - + * - dvbspi_DetachDemuxSubDecoder | no replacement - + * ----------------------------------------------------------------------------------- * * Note that for dvbpsi_Demux(), dvbpsi_NewDemuxSubDecoder(), dvbpsi_AttachDemuxSubDecoder(), * and dvbspi_DetachDemuxSubDecoder() no replacement API is available. These functions are ===================================== src/demux.c ===================================== --- a/src/demux.c +++ b/src/demux.c @@ -112,9 +112,7 @@ dvbpsi_demux_subdec_t *dvbpsi_NewDemuxSubDecoder(const uint8_t i_table_id, dvbpsi_demux_gather_cb_t pf_gather, dvbpsi_decoder_t *p_decoder) { - (void) i_table_id; (void) i_extension; - (void *) pf_detach, (void *) pf_gather; - (void *) p_decoder; + assert(0); return NULL; } @@ -126,8 +124,6 @@ dvbpsi_demux_subdec_t *dvbpsi_NewDemuxSubDecoder(const uint8_t i_table_id, void dvbpsi_DeleteDemuxSubDecoder(dvbpsi_demux_subdec_t *p_subdec) { assert(0); - if (!p_subdec) - return; } /***************************************************************************** @@ -135,16 +131,7 @@ void dvbpsi_DeleteDemuxSubDecoder(dvbpsi_demux_subdec_t *p_subdec) *****************************************************************************/ void dvbpsi_AttachDemuxSubDecoder(dvbpsi_demux_t *p_demux, dvbpsi_demux_subdec_t *p_subdec) { - assert(p_demux); - assert(p_subdec); - - if (!p_demux || !p_subdec) - abort(); - - dvbpsi_t *p_dvbpsi = (dvbpsi_t *)p_demux; - dvbpsi_decoder_t *p_dec = (dvbpsi_decoder_t *)p_subdec; - if (!dvbpsi_decoder_chain_add(p_dvbpsi, p_dec)) - abort(); + assert(0); } /***************************************************************************** @@ -152,14 +139,5 @@ void dvbpsi_AttachDemuxSubDecoder(dvbpsi_demux_t *p_demux, dvbpsi_demux_subdec_t *****************************************************************************/ void dvbpsi_DetachDemuxSubDecoder(dvbpsi_demux_t *p_demux, dvbpsi_demux_subdec_t *p_subdec) { - assert(p_demux); - assert(p_subdec); - - if (!p_demux || !p_subdec) - abort(); - - dvbpsi_t *p_dvbpsi = (dvbpsi_t *)p_demux; - dvbpsi_decoder_t *p_dec = (dvbpsi_decoder_t *)p_subdec; - if (!dvbpsi_decoder_chain_remove(p_dvbpsi, p_dec)) - abort(); + assert(0); } ===================================== src/descriptors/custom/dr_8a_scte.c ===================================== --- a/src/descriptors/custom/dr_8a_scte.c +++ b/src/descriptors/custom/dr_8a_scte.c @@ -53,7 +53,7 @@ dvbpsi_scte_cuei_dr_t * dvbpsi_decode_scte_cuei_dr(dvbpsi_descriptor_t * p_descr if (dvbpsi_IsDescriptorDecoded(p_descriptor)) return p_descriptor->p_decoded; - if (p_descriptor->i_length == 0x01) + if (p_descriptor->i_length != 0x01) return NULL; /* Allocate memory */ ===================================== src/dvbpsi.c ===================================== --- a/src/dvbpsi.c +++ b/src/dvbpsi.c @@ -218,6 +218,7 @@ bool dvbpsi_decoder_psi_section_add(dvbpsi_decoder_t *p_decoder, dvbpsi_psi_sect /* Add to end of list */ if (p_prev->i_number < p_section->i_number) { + p_decoder->i_last_section_number = p_section->i_number; p_prev->p_next = p_section; p_section->p_next = NULL; } ===================================== src/tables/sis.c ===================================== --- a/src/tables/sis.c +++ b/src/tables/sis.c @@ -578,7 +578,7 @@ static dvbpsi_sis_cmd_splice_schedule_t * p_cmd->i_splice_count = p_data[pos++]; dvbpsi_sis_splice_event_t *p_last = p_cmd->p_splice_event; - for (uint8_t i = 0; i < p_cmd->i_splice_count; i++) { + for (uint8_t i = pos; i < p_cmd->i_splice_count; i++) { dvbpsi_sis_splice_event_t *p_event; p_event = (dvbpsi_sis_splice_event_t *)calloc(1, sizeof(dvbpsi_sis_splice_event_t)); if (!p_event) { View it on GitLab: https://code.videolan.org/videolan/libdvbpsi/compare/10e546bc5bc91c2dda54d80a0faaefdf75339099...dfa10bae7c6171cd608311f7ad2bcb01e0f739d8 --- View it on GitLab: https://code.videolan.org/videolan/libdvbpsi/compare/10e546bc5bc91c2dda54d80a0faaefdf75339099...dfa10bae7c6171cd608311f7ad2bcb01e0f739d8 You're receiving this email because of your account on code.videolan.org. ----==_mimepart_5965d61782f11_13c383fa998ebcab8100860-- --===============4610353483852607666== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGliZHZicHNp LWRldmVsIG1haWxpbmcgbGlzdApsaWJkdmJwc2ktZGV2ZWxAdmlkZW9sYW4ub3JnCmh0dHBzOi8v bWFpbG1hbi52aWRlb2xhbi5vcmcvbGlzdGluZm8vbGliZHZicHNpLWRldmVsCg== --===============4610353483852607666==--