# include <dvbpsi/sdt.h>
#include "dvb.h"
+#include "scan.h"
/*****************************************************************************
* Module descriptor
}
/* */
- p_sys->b_scan_mode = var_GetInteger( p_access, "dvb-frequency" ) == 0;
- if( p_sys->b_scan_mode )
+ bool b_scan_mode = var_GetInteger( p_access, "dvb-frequency" ) == 0;
+ if( b_scan_mode )
{
msg_Dbg( p_access, "DVB scan mode selected" );
p_access->pf_block = BlockScan;
return VLC_EGENERIC;
}
- if( p_sys->b_scan_mode )
+ if( b_scan_mode )
{
scan_parameter_t parameter;
+ scan_t *p_scan;
msg_Dbg( p_access, "setting filter on PAT/NIT/SDT (DVB only)" );
FilterSet( p_access, 0x00, OTHER_TYPE ); // PAT
FilterSet( p_access, 0x11, OTHER_TYPE ); // SDT
if( FrontendGetScanParameter( p_access, ¶meter ) ||
- scan_Init( VLC_OBJECT(p_access), &p_sys->scan, ¶meter ) )
+ (p_scan = scan_New( VLC_OBJECT(p_access), ¶meter )) == NULL )
{
Close( VLC_OBJECT(p_access) );
return VLC_EGENERIC;
}
+ p_sys->scan = p_scan;
+ p_sys->i_read_once = DVB_READ_ONCE_SCAN;
}
else
{
{
msg_Dbg( p_access, "setting filter on all PIDs" );
FilterSet( p_access, 0x2000, OTHER_TYPE );
+ p_sys->i_read_once = DVB_READ_ONCE;
}
else
{
msg_Dbg( p_access, "setting filter on PAT" );
FilterSet( p_access, 0x0, OTHER_TYPE );
+ p_sys->i_read_once = DVB_READ_ONCE_START;
}
CAMOpen( p_access );
#endif
}
- if( p_sys->b_scan_mode )
- p_sys->i_read_once = DVB_READ_ONCE_SCAN;
- else if( p_sys->b_budget_mode )
- p_sys->i_read_once = DVB_READ_ONCE;
- else
- p_sys->i_read_once = DVB_READ_ONCE_START;
-
free( p_access->psz_demux );
- p_access->psz_demux = strdup( p_sys->b_scan_mode ? "m3u8" : "ts" );
+ p_access->psz_demux = strdup( p_sys->scan ? "m3u8" : "ts" );
return VLC_SUCCESS;
}
access_t *p_access = (access_t*)p_this;
access_sys_t *p_sys = p_access->p_sys;
- FilterUnset( p_access, p_sys->b_budget_mode && !p_sys->b_scan_mode ? 1 : MAX_DEMUX );
+ FilterUnset( p_access, p_sys->b_budget_mode && !p_sys->scan ? 1 : MAX_DEMUX );
DVRClose( p_access );
FrontendClose( p_access );
- if( p_sys->b_scan_mode )
- scan_Clean( &p_sys->scan );
+ if( p_sys->scan != NULL )
+ scan_Destroy( p_sys->scan );
else
+ {
CAMClose( p_access );
-
#ifdef ENABLE_HTTPD
- if( !p_sys->b_scan_mode )
HTTPClose( p_access );
#endif
+ }
free( p_sys );
}
static block_t *BlockScan( access_t *p_access )
{
access_sys_t *p_sys = p_access->p_sys;
- scan_t *p_scan = &p_sys->scan;
+ scan_t *p_scan = p_sys->scan;
scan_configuration_t cfg;
scan_session_t session;
- /* set satellite config file path */
- if( p_scan->parameter.type == SCAN_DVB_S )
- p_scan->parameter.sat_info.psz_name = var_GetString( p_access, "dvb-satellite" );
-
/* */
if( scan_Next( p_scan, &cfg ) )
{
return NULL;
/* */
- if( p_scan->parameter.type == SCAN_DVB_S )
- {
- msg_Dbg( p_access,
- "Scanning frequency %d, symbol rate = %d, fec = %d",
- cfg.i_frequency,
- cfg.i_bandwidth,
- cfg.i_fec );
- }
- else
- msg_Dbg( p_access, "Scanning frequency %d, bandwidth = %d",
- cfg.i_frequency,
- cfg.i_bandwidth );
-
+ msg_Dbg( p_access, "Scanning frequency %d", cfg.i_frequency );
var_SetInteger( p_access, "dvb-frequency", cfg.i_frequency );
+ msg_Dbg( p_access, " bandwidth %d", cfg.i_bandwidth );
var_SetInteger( p_access, "dvb-bandwidth", cfg.i_bandwidth );
if ( cfg.i_fec )
+ {
+ msg_Dbg( p_access, " FEC %d", cfg.i_fec );
var_SetInteger( p_access, "dvb-fec", cfg.i_fec );
+ }
if ( cfg.c_polarization )
var_SetInteger( p_access, "dvb-voltage", cfg.c_polarization == 'H' ? 18 : 13 );
return VLC_SUCCESS;
case ACCESS_SET_PRIVATE_ID_STATE:
- if( p_sys->b_scan_mode )
+ if( p_sys->scan )
return VLC_EGENERIC;
i_int = (int)va_arg( args, int ); /* Private data (pid for now)*/
break;
case ACCESS_SET_PRIVATE_ID_CA:
- if( p_sys->b_scan_mode )
+ if( p_sys->scan )
return VLC_EGENERIC;
p_pmt = (dvbpsi_pmt_t *)va_arg( args, dvbpsi_pmt_t * );
# include <dvbpsi/sdt.h>
#include "dvb.h"
+#include "scan.h"
+
+struct scan_t
+{
+ vlc_object_t *p_obj;
+ struct dialog_progress_bar_t *p_dialog;
+ int64_t i_index;
+ scan_parameter_t parameter;
+ int64_t i_time_start;
+
+ int i_service;
+ scan_service_t **pp_service;
+};
/* */
scan_service_t *scan_service_New( int i_program, const scan_configuration_t *p_cfg )
}
/* */
-int scan_Init( vlc_object_t *p_obj, scan_t *p_scan, const scan_parameter_t *p_parameter )
+scan_t *scan_New( vlc_object_t *p_obj, const scan_parameter_t *p_parameter )
{
if( p_parameter->type == SCAN_DVB_T )
{
}
else
{
- return VLC_EGENERIC;
+ return NULL;
}
msg_Dbg( p_obj, " - use NIT %s", p_parameter->b_use_nit ? "on" : "off" );
msg_Dbg( p_obj, " - FTA only %s", p_parameter->b_free_only ? "on" : "off" );
+ scan_t *p_scan = malloc( sizeof( *p_scan ) );
+ if( unlikely(p_scan == NULL) )
+ return NULL;
+
p_scan->p_obj = VLC_OBJECT(p_obj);
p_scan->i_index = 0;
p_scan->p_dialog = NULL;
p_scan->parameter = *p_parameter;
p_scan->i_time_start = mdate();
- return VLC_SUCCESS;
+ return p_scan;
}
-void scan_Clean( scan_t *p_scan )
+void scan_Destroy( scan_t *p_scan )
{
if( p_scan->p_dialog != NULL )
dialog_ProgressDestroy( p_scan->p_dialog );
for( int i = 0; i < p_scan->i_service; i++ )
scan_service_Delete( p_scan->pp_service[i] );
TAB_CLEAN( p_scan->i_service, p_scan->pp_service );
+ free( p_scan );
}
static int ScanDvbSNextFast( scan_t *p_scan, scan_configuration_t *p_cfg, double *pf_pos )