]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts parsers: another error forwarding fixes
authorJaroslav Kysela <perex@perex.cz>
Sat, 31 Jan 2015 17:24:35 +0000 (18:24 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sat, 31 Jan 2015 17:24:35 +0000 (18:24 +0100)
src/parsers/parsers.c
src/plumbing/globalheaders.c
src/subscriptions.c

index 4ef46dd1aa133c589c7864ef7ef48d06c407bcb3..a1d630c5a511da689b7629b2520ba52549f70e87 100644 (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;
index b948c61aa8b3b8873b2eed5b86892dc7784a6881..b18b9c7d711903d891fb07466f3a6d17bad7d2f2 100644 (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);
index 5f6682257861366c9863e0d0b0ac27d20075a27f..d6c9ca6833b36263425c1f08807abeee2e413313 100644 (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;