]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Improve logging when we receive PMT updates
authorAndreas Öman <andreas@lonelycoder.com>
Thu, 31 Dec 2009 09:27:40 +0000 (09:27 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Thu, 31 Dec 2009 09:27:40 +0000 (09:27 +0000)
src/psi.c

index 984ff02df99600eda573a56e5690e4f0a0ede5b2..769b87a9d327306ea3182aa1d4b3c84f49ba5596 100644 (file)
--- a/src/psi.c
+++ b/src/psi.c
@@ -187,6 +187,22 @@ psi_build_pat(th_transport_t *t, uint8_t *buf, int maxlen, int pmtpid)
 }
 
 
+/**
+ * PMT update reason flags
+ */
+#define PMT_UPDATE_PCR                0x1
+#define PMT_UPDATE_NEW_STREAM         0x2
+#define PMT_UPDATE_LANGUAGE           0x4
+#define PMT_UPDATE_FRAME_DURATION     0x8
+#define PMT_UPDATE_COMPOSITION_ID     0x10
+#define PMT_UPDATE_ANCILLARY_ID       0x20
+#define PMT_UPDATE_STREAM_DELETED     0x40
+#define PMT_UPDATE_NEW_CA_STREAM      0x80
+#define PMT_UPDATE_NEW_CAID           0x100
+#define PMT_UPDATE_CA_PROVIDER_CHANGE 0x200
+
+
+
 /**
  * Parser for CA descriptor, viaccess
  */
@@ -213,7 +229,7 @@ psi_desc_ca_viaccess(th_transport_t *t, th_stream_t *st,
 
       if(id != st->st_providerid) {
        st->st_providerid = id;
-       return 1;
+       return PMT_UPDATE_CA_PROVIDER_CHANGE;
       }
     }
     len -= tlen;
@@ -237,14 +253,14 @@ psi_desc_ca(th_transport_t *t, const uint8_t *ptr, int len)
 
   if((st = transport_stream_find(t, pid)) == NULL) {
     st = transport_stream_create(t, pid, SCT_CA);
-    r = 1;
+    r |= PMT_UPDATE_NEW_CA_STREAM;
   }
 
   st->st_delete_me = 0;
 
   if(st->st_caid != caid) {
     st->st_caid = caid;
-    r = 1;
+    r |= PMT_UPDATE_NEW_CAID;
   }
 
   len -= 4;
@@ -279,6 +295,7 @@ psi_parse_pmt(th_transport_t *t, const uint8_t *ptr, int len, int chksvcid,
   int had_components;
   int composition_id;
   int ancillary_id;
+  int version;
 
   if(len < 9)
     return -1;
@@ -288,6 +305,7 @@ psi_parse_pmt(th_transport_t *t, const uint8_t *ptr, int len, int chksvcid,
   had_components = !!LIST_FIRST(&t->tht_components);
 
   sid     = ptr[0] << 8 | ptr[1];
+  version = ptr[2] >> 1 & 0x1f;
   
   if((ptr[2] & 1) == 0) {
     /* current_next_indicator == next, skip this */
@@ -302,7 +320,7 @@ psi_parse_pmt(th_transport_t *t, const uint8_t *ptr, int len, int chksvcid,
 
   if(t->tht_pcr_pid != pcr_pid) {
     t->tht_pcr_pid = pcr_pid;
-    update = 1;
+    update |= PMT_UPDATE_PCR;
   }
 
   ptr += 9;
@@ -433,7 +451,7 @@ psi_parse_pmt(th_transport_t *t, const uint8_t *ptr, int len, int chksvcid,
     if(hts_stream_type != 0) {
 
       if((st = transport_stream_find(t, pid)) == NULL) {
-       update = 1;
+       update |= PMT_UPDATE_NEW_STREAM;
        st = transport_stream_create(t, pid, hts_stream_type);
       }
 
@@ -442,23 +460,23 @@ psi_parse_pmt(th_transport_t *t, const uint8_t *ptr, int len, int chksvcid,
       st->st_tb = (AVRational){1, 90000};
 
       if(memcmp(st->st_lang, lang, 4)) {
-       update = 1;
+       update |= PMT_UPDATE_LANGUAGE;
        memcpy(st->st_lang, lang, 4);
       }
 
       if(st->st_frame_duration == 0 && frameduration != 0) {
        st->st_frame_duration = frameduration;
-       update = 1;
+       update |= PMT_UPDATE_FRAME_DURATION;
       }
 
       if(composition_id != -1 && st->st_composition_id != composition_id) {
        st->st_composition_id = composition_id;
-       update = 1;
+       update |= PMT_UPDATE_COMPOSITION_ID;
       }
 
       if(ancillary_id != -1 && st->st_ancillary_id != ancillary_id) {
        st->st_ancillary_id = ancillary_id;
-       update = 1;
+       update |= PMT_UPDATE_ANCILLARY_ID;
       }
     }
   }
@@ -468,14 +486,25 @@ psi_parse_pmt(th_transport_t *t, const uint8_t *ptr, int len, int chksvcid,
     next = LIST_NEXT(st, st_link);
     if(st->st_delete_me) {
       transport_stream_destroy(t, st);
-      update = 1;
+      update |= PMT_UPDATE_STREAM_DELETED;
     }
   }
 
   if(update) {
-    tvhlog(LOG_DEBUG, "PSI", "Transport %s (%s) updated due to PMT change",
-          t->tht_svcname, t->tht_identifier);
-
+    tvhlog(LOG_INFO, "PSI", "Transport \"%s\" PMT (version %d) updated"
+          "%s%s%s%s%s%s%s%s%s%s",
+          transport_nicename(t), version,
+          update&PMT_UPDATE_PCR               ? ", PCR PID changed":"",
+          update&PMT_UPDATE_NEW_STREAM        ? ", New elementary stream":"",
+          update&PMT_UPDATE_LANGUAGE          ? ", Language changed":"",
+          update&PMT_UPDATE_FRAME_DURATION    ? ", Frame duration changed":"",
+          update&PMT_UPDATE_COMPOSITION_ID    ? ", Composition ID changed":"",
+          update&PMT_UPDATE_ANCILLARY_ID      ? ", Ancillary ID changed":"",
+          update&PMT_UPDATE_STREAM_DELETED    ? ", Stream deleted":"",
+          update&PMT_UPDATE_NEW_CA_STREAM     ? ", New CA stream":"",
+          update&PMT_UPDATE_NEW_CAID          ? ", New CAID":"",
+          update&PMT_UPDATE_CA_PROVIDER_CHANGE? ", CA provider changed":"");
+    
     transport_request_save(t);
     if(t->tht_status == TRANSPORT_RUNNING)
       transport_restart(t, had_components);