Commit dd0b8136 authored by François Cartegnie's avatar François Cartegnie 🤞

access: dvb: scan: move transponders context out of parameters

parent de93a73b
......@@ -84,6 +84,14 @@ typedef struct
} scan_service_t;
typedef struct
{
int i_frequency;
int i_symbol_rate;
int i_fec;
char c_polarization;
} scan_dvbs_transponder_t;
struct scan_t
{
vlc_object_t *p_obj;
......@@ -94,6 +102,10 @@ struct scan_t
int i_service;
scan_service_t **pp_service;
/* dvbv3 list file */
scan_dvbs_transponder_t *p_transponders;
unsigned i_transponders;
};
struct scan_session_t
......@@ -237,8 +249,6 @@ static int ScanDvbSNextFast( scan_t *p_scan, scan_configuration_t *p_cfg, double
{
msg_Dbg( p_scan->p_obj, "Scan index %"PRId64, p_scan->i_index );
unsigned *pi_count = &p_scan->parameter.sat_info.i_count;
if( !p_scan->parameter.sat_info.psz_name )
{
msg_Err( p_scan->p_obj, "no satellite selected" );
......@@ -246,7 +256,7 @@ static int ScanDvbSNextFast( scan_t *p_scan, scan_configuration_t *p_cfg, double
}
/* if there are no transponders in mem, laod from config file */
if( !*pi_count )
if( p_scan->i_transponders == 0 )
{
char *psz_path = NULL;
char *data_dir = config_GetDataDir();
......@@ -277,9 +287,9 @@ static int ScanDvbSNextFast( scan_t *p_scan, scan_configuration_t *p_cfg, double
{
if ( ( res = fscanf( f, "%c %d %c %d %2s\n",
&type,
&p_transponders[*pi_count].i_frequency,
&p_transponders[*pi_count].c_polarization,
&p_transponders[*pi_count].i_symbol_rate,
&p_transponders[p_scan->i_transponders].i_frequency,
&p_transponders[p_scan->i_transponders].c_polarization,
&p_transponders[p_scan->i_transponders].i_symbol_rate,
psz_fec ) ) != 5 )
{
msg_Dbg( p_scan->p_obj, "error parsing transponder from file" );
......@@ -290,19 +300,19 @@ static int ScanDvbSNextFast( scan_t *p_scan, scan_configuration_t *p_cfg, double
char psz_fec_list[] = "1/22/33/44/55/66/77/88/9";
char *p_fec = strstr( psz_fec_list, psz_fec );
if ( !p_fec )
p_transponders[*pi_count].i_fec = 9; /* FEC_AUTO */
p_transponders[p_scan->i_transponders].i_fec = 9; /* FEC_AUTO */
else
p_transponders[*pi_count].i_fec = 1 + ( ( p_fec-psz_fec_list ) / 3 );
p_transponders[p_scan->i_transponders].i_fec = 1 + ( ( p_fec-psz_fec_list ) / 3 );
(*pi_count)++;
p_scan->i_transponders++;
p_transponders = xrealloc(p_transponders, ( *pi_count + 1 ) * sizeof( scan_dvbs_transponder_t ) );
p_transponders = xrealloc(p_transponders, ( p_scan->i_transponders + 1 ) * sizeof( scan_dvbs_transponder_t ) );
} while (res != EOF);
msg_Dbg( p_scan->p_obj, "parsed %d transponders from config", *pi_count);
msg_Dbg( p_scan->p_obj, "parsed %d transponders from config", p_scan->i_transponders);
fclose( f );
p_scan->parameter.sat_info.p_transponders = p_transponders;
p_scan->p_transponders = p_transponders;
}
else
{
......@@ -315,32 +325,33 @@ static int ScanDvbSNextFast( scan_t *p_scan, scan_configuration_t *p_cfg, double
free( psz_path );
}
if( p_scan->i_index < *pi_count )
if( p_scan->i_index < p_scan->i_transponders )
{
/* setup params for scan */
p_cfg->i_symbol_rate = p_scan->parameter.sat_info.p_transponders[p_scan->i_index].i_symbol_rate / 1000;
p_cfg->i_frequency = p_scan->parameter.sat_info.p_transponders[p_scan->i_index].i_frequency;
p_cfg->i_fec = p_scan->parameter.sat_info.p_transponders[p_scan->i_index].i_fec;
p_cfg->c_polarization = p_scan->parameter.sat_info.p_transponders[p_scan->i_index].c_polarization;
p_cfg->i_symbol_rate = p_scan->p_transponders[p_scan->i_index].i_symbol_rate / 1000;
p_cfg->i_frequency = p_scan->p_transponders[p_scan->i_index].i_frequency;
p_cfg->i_fec = p_scan->p_transponders[p_scan->i_index].i_fec;
p_cfg->c_polarization = p_scan->p_transponders[p_scan->i_index].c_polarization;
msg_Dbg( p_scan->p_obj,
"transponder [%"PRId64"/%d]: frequency=%d, symbolrate=%d, fec=%d, polarization=%c",
p_scan->i_index + 1,
*pi_count,
p_scan->i_transponders,
p_cfg->i_frequency,
p_cfg->i_symbol_rate,
p_cfg->i_fec,
p_cfg->c_polarization );
*pf_pos = (double)p_scan->i_index / *pi_count;
*pf_pos = (double)p_scan->i_index / p_scan->i_transponders;
return VLC_SUCCESS;
}
if( p_scan->parameter.sat_info.p_transponders )
if( p_scan->p_transponders )
{
free( p_scan->parameter.sat_info.p_transponders );
p_scan->parameter.sat_info.p_transponders = NULL;
free( p_scan->p_transponders );
p_scan->p_transponders = NULL;
p_scan->i_transponders = 0;
}
return VLC_EGENERIC;
......
......@@ -29,14 +29,6 @@ typedef enum
SCAN_DVB_C,
} scan_type_t;
typedef struct
{
int i_frequency;
int i_symbol_rate;
int i_fec;
char c_polarization;
} scan_dvbs_transponder_t;
typedef struct scan_parameter_t
{
scan_type_t type;
......@@ -71,8 +63,6 @@ typedef struct scan_parameter_t
{
char *psz_name; /* satellite name */
scan_dvbs_transponder_t *p_transponders;
unsigned i_count;
} sat_info;
} scan_parameter_t;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment