DVB: privatize scan_t
[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 struct scan_parameter_t
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
85 typedef struct
86 {
87     int i_frequency;
88     union
89     {
90         int i_bandwidth;
91         int i_symbol_rate;
92     };
93     int i_fec;
94     char c_polarization;
95 } scan_configuration_t;
96
97 typedef enum
98 {
99     SERVICE_UNKNOWN = 0,
100     SERVICE_DIGITAL_RADIO,
101     SERVICE_DIGITAL_TELEVISION,
102     SERVICE_DIGITAL_TELEVISION_AC_SD,
103     SERVICE_DIGITAL_TELEVISION_AC_HD,
104 } scan_service_type_t;
105
106 typedef struct
107 {
108     int  i_program;     /* program number (service id) */
109     scan_configuration_t cfg;
110     int i_snr;
111
112     scan_service_type_t type;
113     char *psz_name;     /* channel name in utf8 or NULL */
114     int  i_channel;     /* -1 if unknown */
115     bool b_crypted;     /* True if potentially crypted */
116
117     int i_network_id;
118
119     int i_nit_version;
120     int i_sdt_version;
121
122 } scan_service_t;
123
124 typedef struct
125 {
126     vlc_object_t *p_obj;
127
128     scan_configuration_t cfg;
129     int i_snr;
130
131     dvbpsi_handle pat;
132     dvbpsi_pat_t *p_pat;
133     int i_nit_pid;
134
135     dvbpsi_handle sdt;
136     dvbpsi_sdt_t *p_sdt;
137
138 #ifdef DVBPSI_USE_NIT
139     dvbpsi_handle nit;
140     dvbpsi_nit_t *p_nit;
141 #endif
142
143 } scan_session_t;
144
145 scan_service_t *scan_service_New( int i_program, const scan_configuration_t *p_cfg  );
146 void scan_service_Delete( scan_service_t *p_srv );
147
148 scan_t *scan_New( vlc_object_t *p_obj, const scan_parameter_t *p_parameter );
149 void scan_Destroy( scan_t *p_scan );
150
151 int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg );
152
153 block_t *scan_GetM3U( scan_t *p_scan );
154 bool scan_IsCancelled( scan_t *p_scan );
155
156 int  scan_session_Init( vlc_object_t *p_obj, scan_session_t *p_session, const scan_configuration_t *p_cfg );
157 void scan_session_Clean( scan_t *p_scan, scan_session_t *p_session );
158 bool scan_session_Push( scan_session_t *p_scan, block_t *p_block );
159 void scan_service_SetSNR( scan_session_t *p_scan, int i_snr );
160