86
85
while (offset < section_length - 4)
89
89
service.id = buffer.get_bits(offset, 0, 16);
91
service.eit_schedule_flag = buffer.get_bits(offset, 6, 1) == 1;
92
if (service.eit_schedule_flag)
94
section.epg_events_available = true;
91
98
guint descriptors_loop_length = buffer.get_bits(offset, 4, 12);
93
100
guint descriptors_end_offset = offset + descriptors_loop_length;
455
462
guint offset = 3;
457
464
section.service_id = buffer.get_bits(offset, 0, 16);
465
section.version_number = buffer.get_bits(42, 5);
460
468
guint num_events_in_section = buffer[offset++];
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;
470
479
event.start_time += GPS_EPOCH;
471
480
event.start_time += timezone;
514
523
gulong start_time_UTC; // 24
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);
524
532
unsigned int descriptors_loop_length = buffer.get_bits(offset, 84, 12);
530
538
guint event_dur_sec = ((duration >> 4)&0xf)*10+((duration )&0xf);
532
540
event.duration = (event_dur_hour*60 + event_dur_min) * 60 + event_dur_sec;
534
guint event_start_day = 0;
535
guint event_start_month = 0;
536
guint event_start_year = 0;
538
542
if (start_time_MJD > 0 && event.event_id != 0)
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));
544
long k = (month == 14 || month == 15) ? 1 : 0;
546
event_start_year = year + k + 1900;
547
event_start_month = month - 1 - k * 12;
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));
555
550
memset(&t, 0, sizeof(struct tm));
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);
556
t.tm_mon = month - 2;
564
559
event.start_time = mktime(&t);
609
604
case EXTENDED_EVENT:
611
Glib::ustring language;
613
Glib::ustring description;
614
Glib::ustring temp_title;
615
Glib::ustring temp_description;
617
language = get_lang_desc (event_buffer + 1);
606
Glib::ustring language = get_lang_desc (event_buffer + 1);
619
608
if (!event.texts.contains(language))
625
614
EventText& event_text = event.texts[language];
627
616
unsigned int offset = 6;
628
guint length_of_items = event_buffer[offset];
617
guint length_of_items = event_buffer[offset++];
630
618
while (length_of_items > offset - 7)
632
offset += get_text(temp_description, &event_buffer[offset]);
633
if (temp_description != "-")
635
description += temp_description;
638
offset += get_text(temp_title, &event_buffer[offset]);
639
if (temp_title != "-")
644
offset += get_text(temp_description, &event_buffer[offset]);
645
if (temp_description != "-")
647
description += temp_description;
650
if (!event_text.is_extended)
652
event_text.description.clear();
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]);
623
offset += get_text(event_text.description, &event_buffer[offset]);
661
627
case SHORT_EVENT:
663
Glib::ustring language;
665
Glib::ustring description;
629
Glib::ustring language = get_lang_desc (event_buffer);
667
language = get_lang_desc (event_buffer);
668
631
if (!event.texts.contains(language))
670
633
EventText event_text_temp;
674
637
EventText& event_text = event.texts[language];
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]);
682
event_text.title = title;
684
if (!event_text.is_extended)
686
event_text.description += description;
641
offset += get_text(event_text.title, &event_buffer[offset]);
642
offset += get_text(event_text.subtitle, &event_buffer[offset]);