From 98bc2a54f45e9d59a7d80bc0811dee34d86a3981 Mon Sep 17 00:00:00 2001 From: Christophe Massiot Date: Tue, 28 Sep 2010 19:34:40 +0000 Subject: [PATCH] * examples/dvb_print_si.c: Fix a major bug when handling TS with a section begginning in the middle of the payload. --- examples/dvb_print_si.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/examples/dvb_print_si.c b/examples/dvb_print_si.c index 9debe97..9551d4b 100644 --- a/examples/dvb_print_si.c +++ b/examples/dvb_print_si.c @@ -455,7 +455,7 @@ static void handle_psi_packet(uint8_t *p_ts) uint16_t i_pid = ts_get_pid(p_ts); ts_pid_t *p_pid = &p_pids[i_pid]; uint8_t i_cc = ts_get_cc(p_ts); - const uint8_t *p_payload = ts_payload(p_ts); + const uint8_t *p_payload; uint8_t i_length; if (ts_check_duplicate(i_cc, p_pid->i_last_cc) || !ts_has_payload(p_ts)) @@ -465,9 +465,18 @@ static void handle_psi_packet(uint8_t *p_ts) && ts_check_discontinuity(i_cc, p_pid->i_last_cc)) psi_assemble_reset(&p_pid->p_psi_buffer, &p_pid->i_psi_buffer_used); - if (psi_assemble_empty(&p_pid->p_psi_buffer, &p_pid->i_psi_buffer_used)) - p_payload = ts_section(p_ts); + p_payload = ts_section(p_ts); + i_length = p_ts + TS_SIZE - p_payload; + + if (!psi_assemble_empty(&p_pid->p_psi_buffer, &p_pid->i_psi_buffer_used)) { + uint8_t *p_section = psi_assemble_payload(&p_pid->p_psi_buffer, + &p_pid->i_psi_buffer_used, + &p_payload, &i_length); + if (p_section != NULL) + handle_section(i_pid, p_section); + } + p_payload = ts_next_section( p_ts ); i_length = p_ts + TS_SIZE - p_payload; while (i_length) {