mpegts parsers: another error forwarding fixes

This commit is contained in:
Jaroslav Kysela 2015-01-31 18:24:35 +01:00
parent ce2fc637b6
commit a39bb434f4
3 changed files with 11 additions and 9 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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;