libdvbv5: move ISDB-T frq conversion to the descriptors code
authorMauro Carvalho Chehab <m.chehab@samsung.com>
Fri, 11 Apr 2014 18:43:50 +0000 (15:43 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Fri, 11 Apr 2014 18:48:55 +0000 (15:48 -0300)
Instead of having this done on several places, just do it once,
at the code that parses the ISDB-T descriptor.

This is the same as the other descriptors do.

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

index 5131d1a..3a49884 100644 (file)
@@ -27,7 +27,7 @@
 struct isdbt_desc_terrestrial_delivery_system {
        DVB_DESC_HEADER();
 
-       uint16_t *frequency;
+       uint32_t *frequency;
        unsigned num_freqs;
 
        union {
index 883e88d..df5abed 100644 (file)
@@ -29,6 +29,7 @@ int isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms,
        unsigned char *p = (unsigned char *) buf;
        int i;
        size_t len;
+       uint16_t frq;
 
        len = sizeof(*d) - offsetof(struct isdbt_desc_terrestrial_delivery_system, bitfield);
        memcpy(&d->bitfield, p, len);
@@ -36,18 +37,23 @@ int isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms,
 
        bswap16(d->bitfield);
 
-       d->num_freqs = d->length / 2;
-       if (!len)
-               return -1;
+       d->num_freqs = d->length / sizeof(uint16_t);
+       if (!d->num_freqs)
+               return 0;
        d->frequency = malloc(d->num_freqs * sizeof(*d->frequency));
        if (!d->frequency) {
                dvb_perror("Can't allocate space for ISDB-T frequencies");
                return -2;
        }
-       memcpy(d->frequency, p, d->num_freqs * sizeof(*d->frequency));
 
-       for (i = 0; i < d->num_freqs; i++)
-               bswap16(d->frequency[i]);
+       for (i = 0; i < d->num_freqs; i++) {
+               frq = *(uint16_t *)p;
+               p += sizeof(uint16_t);
+
+               bswap16(frq);
+
+               d->frequency[i] = (uint32_t)((((uint64_t)frq) * 1000000ul) / 7);
+       }
        return 0;
 }
 
@@ -91,7 +97,7 @@ void isdbt_desc_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_d
        dvb_loginfo("|           area code         %d", d->area_code);
 
        for (i = 0; i < d->num_freqs; i++) {
-               dvb_loginfo("|           frequency[%d]      %" PRIu64 " Hz", i, (((uint64_t)d->frequency[i]) * 1000000ul) / 7);
+               dvb_loginfo("|           frequency[%d]      %u Hz", i, d->frequency[i]);
        }
 }
 
index aac685f..68c0551 100644 (file)
@@ -831,10 +831,8 @@ static void add_update_nit_isdbt(struct dvb_table_nit *nit,
        }
 
        for (i = 0; i < d->num_freqs; i++) {
-               uint32_t frq = (((uint64_t)d->frequency[i]) * 1000000ul / 7);
-
                new = dvb_scan_add_entry(tr->parms, tr->first_entry, tr->entry,
-                                        frq, tr->shift, tr->pol);
+                                        d->frequency[i], tr->shift, tr->pol);
                if (!new)
                        return;
        }