libdvbv5: improve debug messages
authorMauro Carvalho Chehab <m.chehab@samsung.com>
Sun, 24 Nov 2013 09:54:23 +0000 (07:54 -0200)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Wed, 27 Nov 2013 11:24:40 +0000 (09:24 -0200)
Add several improvements at the debug messages:

- Without verbose, show only the Virtual channels or
  services to be stored in the file;

- instead of using fprintf for errors, use the error
  macros. That will make errors colored;

- With verbose=1, will show all parsed data;

- With verbose=2, will show all unparsed descriptors and
their hexdump contents;

- With verbose=3, will show all descriptors and their
hexdump contents, including the ones without a parser.

Verbose levels 2 and 3 helps to detect if some improvements would
be needed inside the descriptor parser's library.

Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
lib/libdvbv5/descriptors.c
lib/libdvbv5/descriptors/desc_extension.c
lib/libdvbv5/dvb-file.c
lib/libdvbv5/dvb-scan.c

index 24aba87..943e463 100644 (file)
@@ -97,11 +97,21 @@ void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ui
                int desc_len  = ptr[1];
                size_t size;
 
-#if 0 /* For an additional level of debug */
-                dvb_log("descriptor type 0x%x, size %d",
-                       desc_type, desc_len);
-                hexdump(parms, "dump: ", ptr + 2, desc_len);
-#endif
+               switch (parms->verbose) {
+               case 0:
+               case 1:
+                       break;
+               case 2:
+                       if (dvb_descriptors[desc_type].init)
+                               break;
+                       /* fall through */
+               case 3:
+                       dvb_log("%sdescriptor %s type 0x%x, size %d",
+                               dvb_descriptors[desc_type].init ? "" : "Not handled ",
+                               dvb_descriptors[desc_type].name, desc_type, desc_len);
+                       hexdump(parms, "content: ", ptr + 2, desc_len);
+               }
+
                if (desc_len > section_length - 2) {
                        dvb_logerr("descriptor is too big");
                        return;
index fa5f68c..8eac4b5 100644 (file)
@@ -130,11 +130,20 @@ void extension_descriptor_init(struct dvb_v5_fe_parms *parms,
        ext->extension_code = desc_type;
        p++;
 
-#if 0 /* For an additional level of debug */
-       dvb_log("extension descriptor type 0%x, size %d",
-               desc_type, desc_len);
-       hexdump(parms, "dump: ", p, desc_len);
-#endif
+       switch (parms->verbose) {
+       case 0:
+       case 1:
+               break;
+       case 2:
+               if (dvb_ext_descriptors[desc_type].init)
+                       break;
+               /* fall through */
+       case 3:
+               dvb_log("%sextension descriptor %s type 0x%x, size %d",
+                       dvb_ext_descriptors[desc_type].init ? "" : "Not handled ",
+                       dvb_ext_descriptors[desc_type].name, desc_type, desc_len);
+               hexdump(parms, "content: ", p, desc_len);
+       }
 
        init = dvb_ext_descriptors[desc_type].init;
        if (init)
index a0341e2..6a0d8a1 100644 (file)
@@ -1090,8 +1090,9 @@ int store_dvb_channel(struct dvb_file **dvb_file,
                                d->major_channel_number,
                                d->minor_channel_number);
 
-                       dvb_log("Found channel %s, name = %s",
-                               vchannel, channel);
+                       if (parms->verbose)
+                               dvb_log("Virtual channel %s, name = %s",
+                                       vchannel, channel);
 
                        rc = get_program_and_store(parms, *dvb_file, dvb_scan_handler,
                                                d->program_number,
@@ -1120,7 +1121,7 @@ int store_dvb_channel(struct dvb_file **dvb_file,
                                channel = calloc(strlen(desc->name) + 1, 1);
                                strcpy(channel, desc->name);
                        }
-                       dvb_log("Found service %s, provider %s, type %d",
+                       dvb_log("Service %s, provider %s, type %d",
                                desc->name, desc->provider, desc->service_type);
                        break;
                }
@@ -1128,7 +1129,8 @@ int store_dvb_channel(struct dvb_file **dvb_file,
                if (!channel)
                        asprintf(&channel, "#%d", service->service_id);
 
-               dvb_log("Storing as channel %s", channel);
+               if (parms->verbose)
+                       dvb_log("Storing as channel %s", channel);
                vchannel = dvb_vchannel(dvb_scan_handler->nit, service->service_id);
 
                rc = get_program_and_store(parms, *dvb_file, dvb_scan_handler,
index 5b0ee92..413909c 100644 (file)
@@ -111,7 +111,8 @@ int dvb_read_section_with_id(struct dvb_v5_fe_parms *parms, int dmx_fd,
                return -1;
        }
 
-       dvb_log("Parsing table ID %d, program ID %d", tid, pid);
+       if (parms->verbose)
+               dvb_log("Parsing table ID %d, program ID %d", tid, pid);
 
        buf = malloc(DVB_MAX_PAYLOAD_PACKET_SIZE);
        if (!buf)
@@ -197,14 +198,22 @@ int dvb_read_section_with_id(struct dvb_v5_fe_parms *parms, int dmx_fd,
                                tbl = malloc(dvb_table_initializers[tid].size);
                        else
                                tbl = malloc(MAX_TABLE_SIZE);
-                       if (!tbl)
-                               dvb_perror("Out of memory");
+                       if (!tbl) {
+                               dvb_logerr("Out of memory");
+                               free(buf);
+                               dvb_dmx_stop(dmx_fd);
+                               return -4;
+                       }
                }
 
                if (dvb_table_initializers[tid].init) {
                        dvb_table_initializers[tid].init(parms, buf, buf_length, tbl, &table_length);
-                       if (!tbl)
+                       if (!tbl) {
                                dvb_perror("Out of memory");
+                               free(buf);
+                               dvb_dmx_stop(dmx_fd);
+                               return -4;
+                       }
                        if (!dvb_table_initializers[tid].size)
                                tbl = realloc(tbl, table_length);
                } else
@@ -291,7 +300,7 @@ struct dvb_v5_descriptors *dvb_get_ts_tables(struct dvb_v5_fe_parms *parms,
                              (uint8_t **) &dvb_scan_handler->pat,
                              pat_pmt_time * timeout_multiply);
        if (rc < 0) {
-               fprintf(stderr, "error while waiting for PAT table\n");
+               dvb_logerr("error while waiting for PAT table");
                dvb_scan_free_handler_table(dvb_scan_handler);
                return NULL;
        }
@@ -305,7 +314,7 @@ struct dvb_v5_descriptors *dvb_get_ts_tables(struct dvb_v5_fe_parms *parms,
                                      (uint8_t **)&dvb_scan_handler->vct,
                                      vct_time * timeout_multiply);
                if (rc < 0)
-                       fprintf(stderr, "error while waiting for VCT table\n");
+                       dvb_logerr("error while waiting for VCT table");
                else if (verbose)
                        dvb_table_vct_print(parms, dvb_scan_handler->vct);
        }
@@ -318,20 +327,20 @@ struct dvb_v5_descriptors *dvb_get_ts_tables(struct dvb_v5_fe_parms *parms,
                dvb_scan_handler->program[num_pmt].pat_pgm = program;
 
                if (!program->service_id) {
-                       dvb_log("Network PID: 0x%02x", program->pid);
+                       if (verbose)
+                               dvb_log("Network PID: 0x%02x", program->pid);
                        num_pmt++;
                        continue;
                }
-
-               dvb_log("Program ID %d", program->pid);
+               if (verbose)
+                       dvb_log("Program ID %d", program->pid);
                rc = dvb_read_section(parms, dmx_fd,
                                      DVB_TABLE_PMT, program->pid,
                                      (uint8_t **)&dvb_scan_handler->program[num_pmt].pmt,
                                      pat_pmt_time * timeout_multiply);
                if (rc < 0) {
-                       fprintf(stderr,
-                               "error while reading the PMT table for service 0x%04x\n",
-                               program->service_id);
+                       dvb_logerr("error while reading the PMT table for service 0x%04x",
+                                  program->service_id);
                        dvb_scan_handler->program[num_pmt].pmt = NULL;
                } else {
                        if (verbose)
@@ -347,7 +356,7 @@ struct dvb_v5_descriptors *dvb_get_ts_tables(struct dvb_v5_fe_parms *parms,
                              (uint8_t **)&dvb_scan_handler->nit,
                              nit_time * timeout_multiply);
        if (rc < 0)
-               fprintf(stderr, "error while reading the NIT table\n");
+               dvb_logerr("error while reading the NIT table");
        else if (verbose)
                dvb_table_nit_print(parms, dvb_scan_handler->nit);
 
@@ -358,7 +367,7 @@ struct dvb_v5_descriptors *dvb_get_ts_tables(struct dvb_v5_fe_parms *parms,
                                (uint8_t **)&dvb_scan_handler->sdt,
                                sdt_time * timeout_multiply);
                if (rc < 0)
-                       fprintf(stderr, "error while reading the SDT table\n");
+                       dvb_logerr("error while reading the SDT table");
                else if (verbose)
                        dvb_table_sdt_print(parms, dvb_scan_handler->sdt);
        }
@@ -366,13 +375,13 @@ struct dvb_v5_descriptors *dvb_get_ts_tables(struct dvb_v5_fe_parms *parms,
        /* NIT/SDT other tables */
        if (other_nit) {
                if (verbose)
-                       printf("Parsing other NIT/SDT\n");
+                       dvb_log("Parsing other NIT/SDT");
                rc = dvb_read_section(parms, dmx_fd,
                                      DVB_TABLE_NIT2, DVB_TABLE_NIT_PID,
                                      (uint8_t **)&dvb_scan_handler->nit,
                                      nit_time * timeout_multiply);
                if (rc < 0)
-                       fprintf(stderr, "error while reading the NIT table\n");
+                       dvb_logerr("error while reading the NIT table");
                else if (verbose)
                        dvb_table_nit_print(parms, dvb_scan_handler->nit);
 
@@ -381,7 +390,7 @@ struct dvb_v5_descriptors *dvb_get_ts_tables(struct dvb_v5_fe_parms *parms,
                                (uint8_t **)&dvb_scan_handler->sdt,
                                sdt_time * timeout_multiply);
                if (rc < 0)
-                       fprintf(stderr, "error while reading the SDT table\n");
+                       dvb_logerr("error while reading the SDT table");
                else if (verbose)
                        dvb_table_sdt_print(parms, dvb_scan_handler->sdt);
        }