utils/dvb: remove ptr argument
authorMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 7 Jan 2012 10:05:47 +0000 (08:05 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 7 Jan 2012 13:12:16 +0000 (11:12 -0200)
Instead of using a pointer argument, use an index counter. This way,
it is easier to add more descriptor parser code, and use the
index, in order to fill the structs at the right place.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
utils/dvb/descriptors.c
utils/dvb/descriptors.h
utils/dvb/libscan.c
utils/dvb/libscan.h

index 5e975e2566a128a18be38132ea8b72ed610b073d..afcf891c119e54b9a38d7079767ab2eeaf86d92d 100644 (file)
@@ -133,8 +133,7 @@ static const char *descriptors[] = {
 
 void parse_descriptor(enum dvb_tables type,
                             struct dvb_descriptors *dvb_desc,
-                            const unsigned char *buf, int len,
-                            void *ptr)
+                            const unsigned char *buf, int len)
 {
        if (len == 0)
                return;
@@ -196,7 +195,7 @@ void parse_descriptor(enum dvb_tables type,
                                err = 1;
                                break;
                        }
-                       struct service_table *service_table = ptr;
+                       struct service_table *service_table = &dvb_desc->sdt_table.service_table[dvb_desc->cur_service];
 
                        service_table->type = buf[2];
                        parse_string(&service_table->provider_name,
index df9f509862e0d0796c77b9ffce6fc1bc7a99df1c..e593b22da015bbcd14f45d8dc470e2381a4ce6e5 100644 (file)
@@ -144,4 +144,4 @@ enum descriptors {
 
 void parse_descriptor(enum dvb_tables type,
                      struct dvb_descriptors *dvb_desc,
-                     const unsigned char *buf, int len, void *ptr);
+                     const unsigned char *buf, int len);
index 2f852c7a7dce4636cbfb05d5c8f0933dc0b1d868..4486896d5c3678a41c2dee4576340aae9470dca8 100644 (file)
@@ -76,7 +76,7 @@ static void parse_pmt(struct dvb_descriptors *dvb_desc,
                        pmt_table->program_number, pmt_table->version,
                        pmt_table->pcr_pid, len);
 
-       parse_descriptor(PMT, dvb_desc, &buf[4], len, NULL);
+       parse_descriptor(PMT, dvb_desc, &buf[4], len);
 
        buf += 4 + len;
        *section_length -= 4 + len;
@@ -117,9 +117,10 @@ static void parse_pmt(struct dvb_descriptors *dvb_desc,
                                printf("other pid (type 0x%02x) 0x%04x\n", buf[0], pid);
                };
 
-               parse_descriptor(PMT, dvb_desc, &buf[5], len, NULL);
+               parse_descriptor(PMT, dvb_desc, &buf[5], len);
                buf += len + 5;
                *section_length -= len + 5;
+               dvb_desc->cur_pmt++;
        };
 }
 
@@ -140,7 +141,7 @@ static void parse_nit(struct dvb_descriptors *dvb_desc,
                return;
        }
 
-       parse_descriptor(NIT, dvb_desc, &buf[2], len, NULL);
+       parse_descriptor(NIT, dvb_desc, &buf[2], len);
 
        *section_length -= len + 4;
        buf += len + 4;
@@ -163,9 +164,9 @@ static void parse_nit(struct dvb_descriptors *dvb_desc,
                                printf("Transport stream #%d ID 0x%04x, len %d\n",
                                        n, nit_table->tr_table[n].tr_id, len);
 
-                       parse_descriptor(NIT, dvb_desc, &buf[6], len,
-                                       &nit_table->tr_table[n]);
+                       parse_descriptor(NIT, dvb_desc, &buf[6], len);
                        n++;
+                       dvb_desc->cur_ts++;
                }
 
                *section_length -= len + 6;
@@ -209,13 +210,13 @@ static void parse_sdt(struct dvb_descriptors *dvb_desc,
                                sdt_table->service_table[n].running,
                                sdt_table->service_table[n].scrambled);
 
-                       parse_descriptor(SDT, dvb_desc, &buf[5], len,
-                                        &sdt_table->service_table[n]);
+                       parse_descriptor(SDT, dvb_desc, &buf[5], len);
                        n++;
                }
 
                *section_length -= len + 5;
                buf += len + 5;
+               dvb_desc->cur_service++;
        }
        sdt_table->service_table_len = n;
 }
index 37f863f3975dfd88125a2c57a7bb6c71e0c4af04..d4a0c90a1034fa0306be28c7d61771df79dad57c 100644 (file)
@@ -61,6 +61,11 @@ struct dvb_descriptors {
        struct pat_table pat_table;
        struct nit_table nit_table;
        struct sdt_table sdt_table;
+
+       /* Used by descriptors to know where to update a PMT/Service/TS */
+       unsigned cur_pmt;
+       unsigned cur_service;
+       unsigned cur_ts;
 };
 
 struct dvb_descriptors *get_dvb_ts_tables(char *dmxdev, int verbose);