~ubuntu-branches/ubuntu/trusty/me-tv/trusty

« back to all changes in this revision

Viewing changes to src/dvb_si.cc

  • Committer: Bazaar Package Importer
  • Author(s): Teis Dreijer
  • Date: 2010-02-14 11:29:00 UTC
  • mfrom: (1.1.11 upstream) (3.1.10 sid)
  • Revision ID: james.westby@ubuntu.com-20100214112900-krutrmpz248vz1ji
Tags: 1.1.6-2
* Updated debian/control
  - Removed libgnomem-2.6-dev and libgnomeuimm-2.6-dev
    from Build-Depends (Closes: #568782)
  - Added libgconfmm-2.6-dev to Build-Depends

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
        event_id = 0;
38
38
        start_time = 0;
39
39
        duration = 0;
40
 
        running_status = 0;
41
 
        free_CA_mode = 0;
 
40
        version_number = 0;
42
41
}
43
42
 
44
43
SectionParser::SectionParser()
86
85
        while (offset < section_length - 4)
87
86
        {
88
87
                Service service;
 
88
 
89
89
                service.id = buffer.get_bits(offset, 0, 16);
90
 
                offset += 3;
 
90
                offset += 2;
 
91
                service.eit_schedule_flag = buffer.get_bits(offset, 6, 1) == 1;
 
92
                if (service.eit_schedule_flag)
 
93
                {
 
94
                        section.epg_events_available = true;
 
95
                }
 
96
                offset++;
 
97
 
91
98
                guint descriptors_loop_length = buffer.get_bits(offset, 4, 12);
92
99
                offset += 2;
93
100
                guint descriptors_end_offset = offset + descriptors_loop_length;
455
462
        guint offset = 3;
456
463
 
457
464
        section.service_id = buffer.get_bits(offset, 0, 16);
 
465
        section.version_number = buffer.get_bits(42, 5);
458
466
        
459
467
        offset += 6;
460
468
        guint num_events_in_section = buffer[offset++];
463
471
        {
464
472
                Event event;
465
473
 
466
 
                event.event_id          = buffer.get_bits(offset, 2, 14); offset += 2;
467
 
                event.start_time        = buffer.get_bits(offset, 0, 32); offset += 4;
468
 
                event.duration          = buffer.get_bits(offset, 4, 20); offset += 3;
 
474
                event.version_number    = section.version_number;
 
475
                event.event_id                  = buffer.get_bits(offset, 2, 14); offset += 2;
 
476
                event.start_time                = buffer.get_bits(offset, 0, 32); offset += 4;
 
477
                event.duration                  = buffer.get_bits(offset, 4, 20); offset += 3;
469
478
 
470
479
                event.start_time += GPS_EPOCH;
471
480
                event.start_time += timezone;
481
490
                
482
491
                guint descriptors_length = buffer.get_bits(offset, 4, 12);
483
492
                offset += 2 + descriptors_length;
484
 
                
 
493
        
485
494
                section.events.push_back(event);
486
495
        }
487
496
}
514
523
                gulong  start_time_UTC;  // 24
515
524
                gulong  duration;
516
525
 
 
526
                event.version_number    = section.version_number;
517
527
                event.event_id                  = buffer.get_bits(offset, 0, 16);
518
528
                start_time_MJD                  = buffer.get_bits(offset, 16, 16);
519
529
                start_time_UTC                  = buffer.get_bits(offset, 32, 24);
520
530
                duration                                = buffer.get_bits(offset, 56, 24);
521
 
                event.running_status    = buffer.get_bits(offset, 80, 3);
522
 
                event.free_CA_mode              = buffer.get_bits(offset, 83, 1);
523
531
                
524
532
                unsigned int descriptors_loop_length  = buffer.get_bits(offset, 84, 12);
525
533
                offset += 12;
530
538
                guint event_dur_sec =  ((duration >>  4)&0xf)*10+((duration      )&0xf);
531
539
 
532
540
                event.duration = (event_dur_hour*60 + event_dur_min) * 60 + event_dur_sec;
533
 
                
534
 
                guint event_start_day = 0;
535
 
                guint event_start_month = 0;
536
 
                guint event_start_year = 0;
537
 
                
 
541
                                
538
542
                if (start_time_MJD > 0 && event.event_id != 0)
539
543
                {
540
544
                        long year =  (long) ((start_time_MJD  - 15078.2) / 365.25);
541
545
                        long month =  (long) ((start_time_MJD - 14956.1 - (long)(year * 365.25) ) / 30.6001);
542
 
                        event_start_day =  (long) (start_time_MJD - 14956 - (long)(year * 365.25) - (long)(month * 30.6001));
543
 
 
544
 
                        long k = (month == 14 || month == 15) ? 1 : 0;
545
 
 
546
 
                        event_start_year = year + k + 1900;
547
 
                        event_start_month = month - 1 - k * 12;
548
 
 
549
 
                        guint event_start_hour = ((start_time_UTC >> 20)&0xf)*10+((start_time_UTC >> 16)&0xf);
550
 
                        guint event_start_min =  ((start_time_UTC >> 12)&0xf)*10+((start_time_UTC >>  8)&0xf);
551
 
                        guint event_start_sec =  ((start_time_UTC >>  4)&0xf)*10+((start_time_UTC      )&0xf);
 
546
                        long day =  (long) (start_time_MJD - 14956 - (long)(year * 365.25) - (long)(month * 30.6001));
552
547
 
553
548
                        struct tm t;
554
549
 
555
550
                        memset(&t, 0, sizeof(struct tm));
556
551
 
557
 
                        t.tm_sec        = event_start_sec;
558
 
                        t.tm_min        = event_start_min;
559
 
                        t.tm_hour       = event_start_hour;
560
 
                        t.tm_mday       = event_start_day;
561
 
                        t.tm_mon        = event_start_month - 1;
562
 
                        t.tm_year       = event_start_year - 1900;
 
552
                        t.tm_sec        = ((start_time_UTC >>  4)&0xf)*10+((start_time_UTC      )&0xf);
 
553
                        t.tm_min        = ((start_time_UTC >> 12)&0xf)*10+((start_time_UTC >>  8)&0xf);
 
554
                        t.tm_hour       = ((start_time_UTC >> 20)&0xf)*10+((start_time_UTC >> 16)&0xf);
 
555
                        t.tm_mday       = day;
 
556
                        t.tm_mon        = month - 2;
 
557
                        t.tm_year       = year;
563
558
                        
564
559
                        event.start_time = mktime(&t);
565
560
 
608
603
        {               
609
604
        case EXTENDED_EVENT:
610
605
                {
611
 
                        Glib::ustring language;
612
 
                        Glib::ustring title;
613
 
                        Glib::ustring description;
614
 
                        Glib::ustring temp_title;
615
 
                        Glib::ustring temp_description;
616
 
 
617
 
                        language = get_lang_desc (event_buffer + 1);
 
606
                        Glib::ustring language = get_lang_desc (event_buffer + 1);
618
607
                        
619
608
                        if (!event.texts.contains(language))
620
609
                        {
625
614
                        EventText& event_text = event.texts[language];
626
615
                        
627
616
                        unsigned int offset = 6;
628
 
                        guint length_of_items = event_buffer[offset];
629
 
                        offset++;
 
617
                        guint length_of_items = event_buffer[offset++];
630
618
                        while (length_of_items > offset - 7)
631
619
                        {
632
 
                                offset += get_text(temp_description, &event_buffer[offset]);                    
633
 
                                if (temp_description != "-")
634
 
                                {
635
 
                                        description += temp_description;
636
 
                                }
637
 
 
638
 
                                offset += get_text(temp_title, &event_buffer[offset]);
639
 
                                if (temp_title != "-")
640
 
                                {
641
 
                                        title += temp_title;
642
 
                                }
643
 
                        }
644
 
                        offset += get_text(temp_description, &event_buffer[offset]);
645
 
                        if (temp_description != "-")
646
 
                        {
647
 
                                description     += temp_description;
648
 
                        }
649
 
                        
650
 
                        if (!event_text.is_extended)
651
 
                        {
652
 
                                event_text.description.clear();
653
 
                        }
654
 
                        
655
 
                        event_text.is_extended  = true;
656
 
                        event_text.title                += title;
657
 
                        event_text.description  += description;
 
620
                                offset += get_text(event_text.title, &event_buffer[offset]);
 
621
                                offset += get_text(event_text.description, &event_buffer[offset]);
 
622
                        }
 
623
                        offset += get_text(event_text.description, &event_buffer[offset]);
658
624
                }
659
625
                break;
660
626
 
661
627
        case SHORT_EVENT:
662
628
                {
663
 
                        Glib::ustring   language;
664
 
                        Glib::ustring   title;
665
 
                        Glib::ustring   description;
 
629
                        Glib::ustring language = get_lang_desc (event_buffer);
666
630
                        
667
 
                        language = get_lang_desc (event_buffer);
668
631
                        if (!event.texts.contains(language))
669
632
                        {
670
633
                                EventText event_text_temp;
673
636
                        }
674
637
                        EventText& event_text = event.texts[language];
675
638
 
676
 
                        event_text.is_extended = false;
677
639
                        event_text.language = language;
678
640
                        unsigned int offset = 5;
679
 
                        offset += get_text(title, &event_buffer[offset]);
680
 
                        offset += get_text(description, &event_buffer[offset]);
681
 
                        
682
 
                        event_text.title = title;
683
 
 
684
 
                        if (!event_text.is_extended)
685
 
                        {
686
 
                                event_text.description += description;
687
 
                        }
 
641
                        offset += get_text(event_text.title, &event_buffer[offset]);
 
642
                        offset += get_text(event_text.subtitle, &event_buffer[offset]);
688
643
                }
689
644
                break;
690
645
        default:
782
737
                        }
783
738
                }
784
739
                
785
 
                s = "";
786
 
 
787
740
                if (text_encoding == "iso6937")
788
741
                {
789
 
                        s = convert_iso6937(text_buffer + index, length);
 
742
                        s += convert_iso6937(text_buffer + index, length);
790
743
                }
791
744
                else
792
745
                {
865
818
                                        throw Exception(message);
866
819
                                }
867
820
                                
868
 
                                s = result;
 
821
                                s += result;
869
822
                                g_free(result);
870
823
                        }
871
824
                }