41609ea3ff138914538bdb649b3b4765da153393
[vlc.git] / modules / access / dvb / scan.h
1 /*****************************************************************************
2  * scan.h : functions to ease DVB scanning
3  *****************************************************************************
4  * Copyright (C) 2008,2010 the VideoLAN team
5  *
6  * Authors: Laurent Aimar <fenrir@videolan.org>
7  *          David Kaplan <david@2of1.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA    02111, USA.
22  *****************************************************************************/
23
24 #ifdef _DVBPSI_DR_43_H_
25 #   define DVBPSI_USE_NIT 1
26 #   include <dvbpsi/nit.h>
27 #endif
28
29 #ifndef DVBPSI_USE_NIT
30 #   warning NIT is not supported by your libdvbpsi version
31 #endif
32
33 typedef enum
34 {
35     SCAN_NONE,
36     SCAN_DVB_T,
37     SCAN_DVB_S,
38     SCAN_DVB_C,
39 } scan_type_t;
40
41 typedef struct
42 {
43     int i_frequency;
44     int i_symbol_rate;
45     int i_fec;
46     char c_polarization;
47 } scan_dvbs_transponder_t;
48
49 typedef struct
50 {
51     scan_type_t type;
52     bool b_exhaustive;
53     bool b_use_nit;
54     bool b_free_only;
55
56     struct
57     {
58         int i_min;
59         int i_max;
60         int i_step;
61
62         int i_count;    /* Number of frequency test to do */
63     } frequency;
64
65     struct
66     {
67         /* Bandwidth should be 6, 7 or 8 */
68         int i_min;
69         int i_max;
70         int i_step;
71
72         int i_count;
73     } bandwidth;
74
75     struct
76     {
77         char *psz_name;         /* satellite name */
78         char *psz_path;         /* config file path */
79
80         scan_dvbs_transponder_t *p_transponders;
81         int i_count;
82     } sat_info;
83
84 } scan_parameter_t;
85
86 typedef struct
87 {
88     int i_frequency;
89     union
90     {
91         int i_bandwidth;
92         int i_symbol_rate;
93     };
94     int i_fec;
95     char c_polarization;
96 } scan_configuration_t;
97
98 typedef enum
99 {
100     SERVICE_UNKNOWN = 0,
101     SERVICE_DIGITAL_RADIO,
102     SERVICE_DIGITAL_TELEVISION,
103     SERVICE_DIGITAL_TELEVISION_AC_SD,
104     SERVICE_DIGITAL_TELEVISION_AC_HD,
105 } scan_service_type_t;
106
107 typedef struct
108 {
109     int  i_program;     /* program number (service id) */
110     scan_configuration_t cfg;
111     int i_snr;
112
113     scan_service_type_t type;
114     char *psz_name;     /* channel name in utf8 or NULL */
115     int  i_channel;     /* -1 if unknown */
116     bool b_crypted;     /* True if potentially crypted */
117
118     int i_network_id;
119
120     int i_nit_version;
121     int i_sdt_version;
122
123 } scan_service_t;
124
125 typedef struct
126 {
127     vlc_object_t *p_obj;
128
129     scan_configuration_t cfg;
130     int i_snr;
131
132     dvbpsi_handle pat;
133     dvbpsi_pat_t *p_pat;
134     int i_nit_pid;
135
136     dvbpsi_handle sdt;
137     dvbpsi_sdt_t *p_sdt;
138
139 #ifdef DVBPSI_USE_NIT
140     dvbpsi_handle nit;
141     dvbpsi_nit_t *p_nit;
142 #endif
143
144 } scan_session_t;
145
146 typedef struct
147 {
148     vlc_object_t *p_obj;
149     struct dialog_progress_bar_t *p_dialog;
150     int64_t i_index;
151     scan_parameter_t parameter;
152     int64_t i_time_start;
153
154     int            i_service;
155     scan_service_t **pp_service;
156 } scan_t;
157
158
159 scan_service_t *scan_service_New( int i_program, const scan_configuration_t *p_cfg  );
160 void scan_service_Delete( scan_service_t *p_srv );
161
162 int  scan_Init( vlc_object_t *p_obj, scan_t *p_scan, const scan_parameter_t *p_parameter );
163 void scan_Clean( scan_t *p_scan );
164
165 int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg );
166
167 block_t *scan_GetM3U( scan_t *p_scan );
168 bool scan_IsCancelled( scan_t *p_scan );
169
170 int  scan_session_Init( vlc_object_t *p_obj, scan_session_t *p_session, const scan_configuration_t *p_cfg );
171 void scan_session_Clean( scan_t *p_scan, scan_session_t *p_session );
172 bool scan_session_Push( scan_session_t *p_scan, block_t *p_block );
173 void scan_service_SetSNR( scan_session_t *p_scan, int i_snr );
174