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
|
/*
* Copyright (c) 2011-2012 - Mauro Carvalho Chehab <mchehab@redhat.com>
*
* 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 version 2
* of the License.
*
* 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
*/
#include <stdint.h>
#include <linux/dvb/dmx.h>
/* According with ISO/IEC 13818-1:2007 */
struct pmt_table {
uint16_t program_number, pcr_pid;
unsigned char version;
};
struct el_pid {
uint8_t type;
uint16_t pid;
};
struct pid_table {
uint16_t service_id;
uint16_t pid;
struct pmt_table pmt_table;
unsigned video_pid_len, audio_pid_len, other_el_pid_len;
uint16_t *video_pid;
uint16_t *audio_pid;
struct el_pid *other_el_pid;
};
struct pat_table {
uint16_t ts_id;
unsigned char version;
struct pid_table *pid_table;
unsigned pid_table_len;
};
struct transport_table {
uint16_t tr_id;
};
struct lcn_table {
uint16_t service_id;
uint16_t lcn;
};
struct nit_table {
uint16_t network_id;
unsigned char version;
char *network_name, *network_alias;
struct transport_table *tr_table;
unsigned tr_table_len;
unsigned virtual_channel;
unsigned area_code;
/* Network Parameters */
uint32_t delivery_system;
uint32_t guard_interval;
uint32_t fec_inner, fec_outer;
uint32_t pol;
uint32_t modulation;
uint32_t rolloff;
uint32_t symbol_rate;
uint32_t bandwidth;
uint32_t code_rate_hp;
uint32_t code_rate_lp;
uint32_t transmission_mode;
uint32_t hierarchy;
uint32_t plp_id;
uint32_t system_id;
unsigned has_dvbt:1;
unsigned is_hp:1;
unsigned has_time_slicing:1;
unsigned has_mpe_fec:1;
unsigned has_other_frequency:1;
unsigned is_in_depth_interleaver:1;
char *orbit;
uint32_t *frequency;
unsigned frequency_len;
uint32_t *other_frequency;
unsigned other_frequency_len;
uint16_t *partial_reception;
unsigned partial_reception_len;
struct lcn_table *lcn;
unsigned lcn_len;
};
struct service_table {
uint16_t service_id;
char running;
char scrambled;
unsigned char type;
char *service_name, *service_alias;
char *provider_name, *provider_alias;
};
struct sdt_table {
unsigned char version;
uint16_t ts_id;
struct service_table *service_table;
unsigned service_table_len;
};
struct dvb_descriptors {
int verbose;
uint32_t delivery_system;
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(int dmx_fd,
uint32_t delivery_system,
unsigned other_nit,
unsigned timeout_multiply,
int verbose);
void free_dvb_ts_tables(struct dvb_descriptors *dvb_desc);
|