Commit 887ad85c authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

DVB: privatize scan_session

parent 60264b63
...@@ -555,7 +555,6 @@ static block_t *BlockScan( access_t *p_access ) ...@@ -555,7 +555,6 @@ static block_t *BlockScan( access_t *p_access )
access_sys_t *p_sys = p_access->p_sys; 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_configuration_t cfg;
scan_session_t session;
/* */ /* */
if( scan_Next( p_scan, &cfg ) ) if( scan_Next( p_scan, &cfg ) )
...@@ -571,8 +570,8 @@ static block_t *BlockScan( access_t *p_access ) ...@@ -571,8 +570,8 @@ static block_t *BlockScan( access_t *p_access )
} }
/* */ /* */
scan_session_t *session = scan_session_New( VLC_OBJECT(p_access), &cfg );
if( scan_session_Init( VLC_OBJECT(p_access), &session, &cfg ) ) if( session == NULL )
return NULL; return NULL;
/* */ /* */
...@@ -593,6 +592,7 @@ static block_t *BlockScan( access_t *p_access ) ...@@ -593,6 +592,7 @@ static block_t *BlockScan( access_t *p_access )
{ {
msg_Err( p_access, "Failed to tune the frontend" ); msg_Err( p_access, "Failed to tune the frontend" );
p_access->info.b_eof = true; p_access->info.b_eof = true;
scan_session_Destroy( p_scan, session );
return NULL; return NULL;
} }
...@@ -647,7 +647,7 @@ static block_t *BlockScan( access_t *p_access ) ...@@ -647,7 +647,7 @@ static block_t *BlockScan( access_t *p_access )
continue; continue;
msg_Err( p_access, "poll error: %m" ); msg_Err( p_access, "poll error: %m" );
scan_session_Clean( p_scan, &session ); scan_session_Destroy( p_scan, session );
p_access->info.b_eof = true; p_access->info.b_eof = true;
return NULL; return NULL;
...@@ -687,7 +687,7 @@ static block_t *BlockScan( access_t *p_access ) ...@@ -687,7 +687,7 @@ static block_t *BlockScan( access_t *p_access )
p_block->i_buffer = i_ret; p_block->i_buffer = i_ret;
/* */ /* */
if( scan_session_Push( &session, p_block ) ) if( scan_session_Push( session, p_block ) )
{ {
msg_Dbg( p_access, "finished scanning current frequency" ); msg_Dbg( p_access, "finished scanning current frequency" );
break; break;
...@@ -697,9 +697,9 @@ static block_t *BlockScan( access_t *p_access ) ...@@ -697,9 +697,9 @@ static block_t *BlockScan( access_t *p_access )
/* */ /* */
if( i_best_snr > 0 ) if( i_best_snr > 0 )
scan_service_SetSNR( &session, i_best_snr ); scan_service_SetSNR( session, i_best_snr );
scan_session_Clean( p_scan, &session ); scan_session_Destroy( p_scan, session );
return NULL; return NULL;
} }
......
...@@ -36,14 +36,18 @@ ...@@ -36,14 +36,18 @@
#include <sys/types.h> #include <sys/types.h>
/* Include dvbpsi headers */ /* Include dvbpsi headers */
# include <dvbpsi/dvbpsi.h> #include <dvbpsi/dvbpsi.h>
# include <dvbpsi/descriptor.h> #include <dvbpsi/descriptor.h>
# include <dvbpsi/pat.h> #include <dvbpsi/pat.h>
# include <dvbpsi/pmt.h> #include <dvbpsi/pmt.h>
# include <dvbpsi/dr.h> #include <dvbpsi/dr.h>
# include <dvbpsi/psi.h> #include <dvbpsi/psi.h>
# include <dvbpsi/demux.h> #include <dvbpsi/demux.h>
# include <dvbpsi/sdt.h> #include <dvbpsi/sdt.h>
#ifdef _DVBPSI_DR_43_H_
# define DVBPSI_USE_NIT 1
# include <dvbpsi/nit.h>
#endif
#include "dvb.h" #include "dvb.h"
#include "scan.h" #include "scan.h"
...@@ -87,6 +91,29 @@ struct scan_t ...@@ -87,6 +91,29 @@ struct scan_t
scan_service_t **pp_service; scan_service_t **pp_service;
}; };
struct scan_session_t
{
vlc_object_t *p_obj;
scan_configuration_t cfg;
int i_snr;
dvbpsi_handle pat;
dvbpsi_pat_t *p_pat;
int i_nit_pid;
dvbpsi_handle sdt;
dvbpsi_sdt_t *p_sdt;
#ifdef DVBPSI_USE_NIT
dvbpsi_handle nit;
dvbpsi_nit_t *p_nit;
#else
# warning NIT is not supported by your libdvbpsi version
#endif
};
/* */ /* */
static scan_service_t *scan_service_New( int i_program, static scan_service_t *scan_service_New( int i_program,
const scan_configuration_t *p_cfg ) const scan_configuration_t *p_cfg )
...@@ -757,11 +784,12 @@ static void PSINewTableCallBack( scan_session_t *p_session, dvbpsi_handle h, uin ...@@ -757,11 +784,12 @@ static void PSINewTableCallBack( scan_session_t *p_session, dvbpsi_handle h, uin
#endif #endif
} }
scan_session_t *scan_session_New( vlc_object_t *p_obj,
int scan_session_Init( vlc_object_t *p_obj, scan_session_t *p_session, const scan_configuration_t *p_cfg ) const scan_configuration_t *p_cfg )
{ {
/* */ scan_session_t *p_session = malloc( sizeof( *p_session ) );
memset( p_session, 0, sizeof(*p_session) ); if( unlikely(p_session == NULL) )
return NULL;
p_session->p_obj = p_obj; p_session->p_obj = p_obj;
p_session->cfg = *p_cfg; p_session->cfg = *p_cfg;
p_session->i_snr = -1; p_session->i_snr = -1;
...@@ -774,10 +802,10 @@ int scan_session_Init( vlc_object_t *p_obj, scan_session_t *p_session, const sca ...@@ -774,10 +802,10 @@ int scan_session_Init( vlc_object_t *p_obj, scan_session_t *p_session, const sca
p_session->nit = NULL; p_session->nit = NULL;
p_session->p_nit = NULL; p_session->p_nit = NULL;
#endif #endif
return VLC_SUCCESS; return p_session;;
} }
void scan_session_Clean( scan_t *p_scan, scan_session_t *p_session ) void scan_session_Destroy( scan_t *p_scan, scan_session_t *p_session )
{ {
const int i_service_start = p_scan->i_service; const int i_service_start = p_scan->i_service;
...@@ -910,6 +938,7 @@ void scan_session_Clean( scan_t *p_scan, scan_session_t *p_session ) ...@@ -910,6 +938,7 @@ void scan_session_Clean( scan_t *p_scan, scan_session_t *p_session )
if( p_session->p_nit ) if( p_session->p_nit )
dvbpsi_DeleteNIT( p_session->p_nit ); dvbpsi_DeleteNIT( p_session->p_nit );
#endif #endif
free( p_session );
} }
static int ScanServiceCmp( const void *a, const void *b ) static int ScanServiceCmp( const void *a, const void *b )
......
...@@ -21,15 +21,6 @@ ...@@ -21,15 +21,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#ifdef _DVBPSI_DR_43_H_
# define DVBPSI_USE_NIT 1
# include <dvbpsi/nit.h>
#endif
#ifndef DVBPSI_USE_NIT
# warning NIT is not supported by your libdvbpsi version
#endif
typedef enum typedef enum
{ {
SCAN_NONE, SCAN_NONE,
...@@ -94,27 +85,6 @@ typedef struct ...@@ -94,27 +85,6 @@ typedef struct
char c_polarization; char c_polarization;
} scan_configuration_t; } scan_configuration_t;
typedef struct
{
vlc_object_t *p_obj;
scan_configuration_t cfg;
int i_snr;
dvbpsi_handle pat;
dvbpsi_pat_t *p_pat;
int i_nit_pid;
dvbpsi_handle sdt;
dvbpsi_sdt_t *p_sdt;
#ifdef DVBPSI_USE_NIT
dvbpsi_handle nit;
dvbpsi_nit_t *p_nit;
#endif
} scan_session_t;
scan_t *scan_New( vlc_object_t *p_obj, const scan_parameter_t *p_parameter ); scan_t *scan_New( vlc_object_t *p_obj, const scan_parameter_t *p_parameter );
void scan_Destroy( scan_t *p_scan ); void scan_Destroy( scan_t *p_scan );
...@@ -123,8 +93,11 @@ int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg ); ...@@ -123,8 +93,11 @@ int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg );
block_t *scan_GetM3U( scan_t *p_scan ); block_t *scan_GetM3U( scan_t *p_scan );
bool scan_IsCancelled( scan_t *p_scan ); bool scan_IsCancelled( scan_t *p_scan );
int scan_session_Init( vlc_object_t *p_obj, scan_session_t *p_session, const scan_configuration_t *p_cfg ); typedef struct scan_session_t scan_session_t;
void scan_session_Clean( scan_t *p_scan, scan_session_t *p_session );
scan_session_t *scan_session_New( vlc_object_t *,
const scan_configuration_t * );
void scan_session_Destroy( scan_t *, scan_session_t * );
bool scan_session_Push( scan_session_t *p_scan, block_t *p_block ); bool scan_session_Push( scan_session_t *p_scan, block_t *p_block );
void scan_service_SetSNR( scan_session_t *p_scan, int i_snr ); void scan_service_SetSNR( scan_session_t *p_scan, int i_snr );
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