1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
|
/*
* Simple MPEG/DVB parser to achieve network/service information without initial tuning data
*
* Copyright (C) 2006 - 2014 Winfried Koehler
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* The author can be reached at: w_scan AT gmx-topmail DOT de
*
* The project's page is http://wirbel.htpc-forum.de/w_scan/index2.html
*/
#ifndef __SI_TYPES_H
#define __SI_TYPES_H
#include <stdint.h>
#include "descriptors.h"
#include "tools.h"
/*******************************************************************************
/* section buffer
******************************************************************************/
#define SECTION_FLAG_DEFAULT (1U) << 0
#define SECTION_FLAG_INITIAL (1U) << 1
#define SECTION_FLAG_FREE (1U) << 2
#define SECTION_BUF_SIZE 4096
typedef struct section_buf {
/*----------------------------*/
void * prev;
void * next;
uint32_t index;
/*----------------------------*/
const char * dmx_devname;
unsigned int run_once : 1;
unsigned int segmented : 1; // segmented by table_id_ext
int fd;
int pid;
int table_id;
int table_id_ext;
int section_version_number;
uint8_t section_done[32];
int sectionfilter_done;
unsigned char buf[SECTION_BUF_SIZE];
uint32_t flags;
time_t timeout;
time_t start_time;
time_t running_time;
struct section_buf * next_seg; // this is used to handle segmented tables (like NIT-other)
pList garbage;
} section_t, * p_section_t;
/*******************************************************************************
/* service type.
******************************************************************************/
#define AUDIO_CHAN_MAX (32)
#define AC3_CHAN_MAX (32)
#define CA_SYSTEM_ID_MAX (16)
#define SUBTITLES_MAX (32)
struct transponder;
struct service {
/*----------------------------*/
void * prev;
void * next;
uint32_t index;
/*----------------------------*/
struct transponder * transponder;
uint16_t transport_stream_id;
uint16_t service_id;
char * provider_name;
char * provider_short_name;
char * service_name;
char * service_short_name;
uint16_t pmt_pid;
uint16_t pcr_pid;
uint16_t video_pid;
uint8_t video_stream_type;
uint16_t audio_pid[AUDIO_CHAN_MAX];
uint8_t audio_stream_type[AUDIO_CHAN_MAX];
char audio_lang[AUDIO_CHAN_MAX][4];
int audio_num;
uint16_t ca_id[CA_SYSTEM_ID_MAX];
int ca_num;
uint16_t teletext_pid;
uint16_t subtitling_pid[SUBTITLES_MAX];
char subtitling_lang[SUBTITLES_MAX][4];
uint8_t subtitling_type[SUBTITLES_MAX];
uint16_t composition_page_id[SUBTITLES_MAX];
uint16_t ancillary_page_id[SUBTITLES_MAX];
int subtitling_num;
uint16_t ac3_pid[AC3_CHAN_MAX];
uint8_t ac3_stream_type[AC3_CHAN_MAX];
char ac3_lang[AC3_CHAN_MAX][4];
int ac3_num;
unsigned int type : 8;
bool scrambled;
bool visible_service;
uint32_t logical_channel_number;
uint8_t running;
void * priv;
} service_t, * p_service_t;
/*******************************************************************************
/* transponder type.
******************************************************************************/
struct transposer {
uint8_t cell_id_extension;
uint32_t transposer_frequency;
};
struct cell {
/*----------------------------*/
void * prev;
void * next;
uint32_t index;
/*----------------------------*/
uint16_t cell_id;
// if TFS: up to 6 RF freqs.
int num_center_frequencies;
uint32_t center_frequencies[6];
int num_transposers;
struct transposer transposers[16];
};
struct transponder {
/*----------------------------*/
void * prev;
void * next;
uint32_t index;
pList services;
cList _services;
pList cells; /* DVB-T/T2 */
cList _cells;
/*----------------------------- starting from here copied by 'copy_fe_params' ------------------------------------------*/
/* NOTE: 'frequency' needs to be first item - dont touch! */
uint32_t frequency; /* unit Hz, except satellite: kHz 1..4 */
fe_spectral_inversion_t inversion :8; /* 5 */
uint32_t symbolrate; /* symbols per second 6..9 */
uint32_t bandwidth; /* Hz 10..13*/
uint16_t orbital_position; /* 0x0000-0x1800 14..15*/
uint8_t input_stream_identifier; /* ISI 8bit. 16 */
fe_delivery_system_t delsys :6; /* 0..18 -> 5 -> 6 (63) 17 */
fe_polarization_t polarization :2; /* H,V,L,R 0..3 -> 2 -> 2 (3) 17 */
fe_modulation_t modulation :6; /* 0..13 -> 4 -> 6 (63) 18 */
fe_pilot_t pilot :2; /* pilot, on, off, auto 0..2 -> 2 -> 2 (3) 18 */
fe_code_rate_t coderate :7; /* code rate 0..12 -> 4 -> 7 (127) 19 */
fe_code_rate_t coderate_LP :7; /* code rate low priority stream 0..12 -> 4 -> 7 (127) 19..20*/
fe_guard_interval_t guard :7; /* 0..10 -> 4 -> 7 (127) 20..21*/
fe_rolloff_t rolloff :3; /* 0.35, 0.25, 0.20, auto 0..3 -> 2 -> 3 (7) 21 */
fe_transmit_mode_t transmission :7; /* 0..8 -> 4 -> 7 (127) 22 */
fe_west_east_flag_t west_east_flag :1; /* east, west 0..1 -> 1 -> 1 (1) 22 */
fe_hierarchy_t hierarchy :4; /* 0..4 -> 3 -> 4 (15) 23 */
unsigned time_slicing :2; /* only defined in w_scan. 0..2 -> 2 -> 2 (3) 23 */
unsigned scrambling_sequence_index :18;/* not yet in use. 23..25*/
unsigned scrambling_sequence_selector:1; /* on/off 0..1 -> 1 26 */
unsigned multiple_input_stream_flag :1; /* on/off 0..1 -> 1 26 */
fe_frequency_type_t C2_tuning_frequency_type :2; /* 0..2 0..2 -> 2 -> 2 (3) 26 */
fe_ofdm_symbol_duration_t active_OFDM_symbol_duration :2; /* 26 */
fe_alpha_t alpha :2; /* only defined in w_scan 26 */
fe_interleave_t terr_interleaver :2; /* only defined in w_scan 27 */
unsigned priority :1; /* only defined in w_scan 27 */
unsigned mpe_fec :1; /* 27 */
unsigned extended_info :1; /* 27 */
unsigned SISO_MISO :1; /* 1 = multiple input single output 27 */
unsigned locks_with_params :1; /* do we get lock with current tp params? 27 */
unsigned reserved_byte27 :1; /* align to byte. 27 */
unsigned tfs_flag :1; /* 1 if Time-Frequency-Slicing 28 */
unsigned other_frequency_flag :1; /* DVB-T/T2 28 */
unsigned last_tuning_failed :1; /* 28 */
unsigned type :5; /* 3bit + 2bit byte_align 28 */
uint32_t source; /* 29..32*/
uint16_t system_id; /* DVB-C2, DVB-T2 system_id 33..34*/
uint8_t plp_id; /* DVB-C2, DVB-T2 35 */
uint8_t data_slice_id; /* DVB-C2 36 */
/*---------------------------- below is not copied by 'copy_fe_params' -------------------------------------------------*/
uint8_t private_from_here;
/*----------------------------*/
uint16_t network_PID; // which PID contains NIT ? (0x0010..0x1FFE)
uint16_t network_id;
uint16_t original_network_id;
uint16_t transport_stream_id;
/*----------------------------*/
char * network_name;
network_change_t network_change;
} __attribute__((packed)) transponder_t, * p_transponder_t;
/*******************************************************************************
/* satellite channel routing type.
******************************************************************************/
struct scr {
uint16_t user_frequency; // 20140101: DVB-S/S2, satellite channel routing
uint8_t slot; // 50494: 0..7 , 50607: 0..31
uint8_t pos; // 50494: 0..1 , 50607: 0..0xCC
uint16_t pin; // 50494: 0..255, 50607: 0..255
int8_t offset; // 50494: -2..+2, 50607: 0
uint8_t norm; // 50494: 1 , 50607: 2
};
#endif
|