From a39bb434f4cb96a431e6198e24be6f71b85f1e89 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sat, 31 Jan 2015 18:24:35 +0100 Subject: [PATCH] mpegts parsers: another error forwarding fixes --- src/parsers/parsers.c | 15 ++++++++------- src/plumbing/globalheaders.c | 2 +- src/subscriptions.c | 3 ++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/parsers/parsers.c b/src/parsers/parsers.c index 4ef46dd1..a1d630c5 100644 --- a/src/parsers/parsers.c +++ b/src/parsers/parsers.c @@ -134,9 +134,11 @@ void parse_mpeg_ts(service_t *t, elementary_stream_t *st, const uint8_t *data, int len, int start, int err) { - - if(err && (err != 2 || !start)) + if(err) { + if (start) + parser_deliver_error(t, st); sbuf_err(&st->es_buf, 1); + } switch(st->es_type) { case SCT_MPEG2VIDEO: @@ -232,7 +234,6 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data, /* Payload unit start */ st->es_parser_state = 1; st->es_parser_ptr = 0; - parser_deliver_error(t, st); sbuf_reset(&st->es_buf, 4000); } @@ -1343,7 +1344,6 @@ parse_subtitles(service_t *t, elementary_stream_t *st, const uint8_t *data, if(start) { /* Payload unit start */ st->es_parser_state = 1; - parser_deliver_error(t, st); sbuf_reset(&st->es_buf, 4000); } @@ -1409,7 +1409,6 @@ parse_teletext(service_t *t, elementary_stream_t *st, const uint8_t *data, if(start) { st->es_parser_state = 1; st->es_parser_ptr = 0; - parser_deliver_error(t, st); sbuf_reset(&st->es_buf, 4000); } @@ -1480,8 +1479,10 @@ parser_deliver(service_t *t, elementary_stream_t *st, th_pkt_t *pkt) /** * Input is ok */ - service_set_streaming_status_flags(t, TSS_PACKETS); - t->s_streaming_live |= TSS_LIVE; + if (pkt->pkt_payload) { + service_set_streaming_status_flags(t, TSS_PACKETS); + t->s_streaming_live |= TSS_LIVE; + } /* Forward packet */ pkt->pkt_componentindex = st->es_index; diff --git a/src/plumbing/globalheaders.c b/src/plumbing/globalheaders.c index b948c61a..b18b9c7d 100644 --- a/src/plumbing/globalheaders.c +++ b/src/plumbing/globalheaders.c @@ -364,7 +364,7 @@ gh_pass(globalheaders_t *gh, streaming_message_t *sm) break; case SMT_PACKET: pkt = sm->sm_data; - if (pkt->pkt_payload) + if (pkt->pkt_payload || pkt->pkt_err) streaming_target_deliver2(gh->gh_output, sm); else streaming_msg_free(sm); diff --git a/src/subscriptions.c b/src/subscriptions.c index 5f668225..d6c9ca68 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -428,7 +428,8 @@ subscription_input_direct(void *opauqe, streaming_message_t *sm) if(sm->sm_type == SMT_PACKET) { th_pkt_t *pkt = sm->sm_data; s->ths_total_err += pkt->pkt_err; - s->ths_bytes_in += pkt->pkt_payload->pb_size; + if (pkt->pkt_payload) + s->ths_bytes_in += pkt->pkt_payload->pb_size; } else if(sm->sm_type == SMT_MPEGTS) { pktbuf_t *pb = sm->sm_data; s->ths_total_err += pb->pb_err;