X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fbda%2Fbda.c;h=7fb6ff1094e46d60799f23840d4642fd8de15c54;hb=be19f7facceb129ef8977ed0ad2b41c593954629;hp=d8257601bbb1c6addd179a9801d487ca4a104356;hpb=df61d33b06e2b3cbbe746b2f5a9bea5b370c24ff;p=vlc diff --git a/modules/access/bda/bda.c b/modules/access/bda/bda.c index d8257601bb..7fb6ff1094 100644 --- a/modules/access/bda/bda.c +++ b/modules/access/bda/bda.c @@ -3,7 +3,7 @@ ***************************************************************************** * Copyright (C) 2007 the VideoLAN team * - * Author: Ken Self + * Author: Ken Self * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ * Preamble *****************************************************************************/ #include "bda.h" +#include /***************************************************************************** * Access: local prototypes @@ -35,7 +36,6 @@ static void Close( vlc_object_t *p_this ); static block_t *Block( access_t * ); static int Control( access_t *, int, va_list ); - #define CACHING_TEXT N_("Caching value in ms") #define CACHING_LONGTEXT N_( \ "Caching value for DVB streams. This " \ @@ -58,7 +58,7 @@ static int Control( access_t *, int, va_list ); #define INVERSION_TEXT N_("Inversion mode") #define INVERSION_LONGTEXT N_("Inversion mode [0=off, 1=on, 2=auto]") static const int i_inversion_list[] = { -1, 0, 1, 2 }; -static const char *ppsz_inversion_text[] = { N_("Undefined"), N_("Off"), +static const char *const ppsz_inversion_text[] = { N_("Undefined"), N_("Off"), N_("On"), N_("Auto") }; #define PROBE_TEXT N_("Probe DVB card for capabilities") @@ -96,61 +96,70 @@ static const char *ppsz_inversion_text[] = { N_("Undefined"), N_("Off"), #define SRATE_LONGTEXT "" #define LNB_LOF1_TEXT N_("Antenna lnb_lof1 (kHz)") -#define LNB_LOF1_LONGTEXT N_("Low Band Local Osc Freq in kHz usually 9.75GHz") +#define LNB_LOF1_LONGTEXT N_("Low Band Local Osc Freq in kHz (usually 9.75GHz)") #define LNB_LOF2_TEXT N_("Antenna lnb_lof2 (kHz)") -#define LNB_LOF2_LONGTEXT N_("High Band Local Osc Freq in kHz usually 10.6GHz") +#define LNB_LOF2_LONGTEXT N_("High Band Local Osc Freq in kHz (usually 10.6GHz)") #define LNB_SLOF_TEXT N_("Antenna lnb_slof (kHz)") #define LNB_SLOF_LONGTEXT N_( \ - "Low Noise Block switch freq in kHz usually 11.7GHz") + "Low Noise Block switch freq in kHz (usually 11.7GHz)") /* Cable */ #define MODULATION_TEXT N_("Modulation type") -#define MODULATION_LONGTEXT N_("QAM constellation points " \ - "[16, 32, 64, 128, 256]") -static const int i_qam_list[] = { -1, 16, 32, 64, 128, 256 }; -static const char *ppsz_qam_text[] = { N_("Undefined"), N_("16"), N_("32"), - N_("64"), N_("128"), N_("256") }; +#define MODULATION_LONGTEXT N_("QAM, PSK or VSB modulation method") +static const int i_mod_list[] = { -1, 16, 32, 64, 128, 256, + 10002, 10004, 20008, 20016 }; +static const char *const ppsz_mod_text[] = { + N_("Undefined"), N_("QAM16"), N_("QAM32"), N_("QAM64"), N_("QAM128"), N_("QAM256"), + N_("BPSK"), N_("QPSK"), N_("8VSB"), N_("16VSB") }; + +/* ATSC */ +#define MAJOR_CHANNEL_TEXT N_("ATSC Major Channel") +#define MAJOR_CHANNEL_LONGTEXT N_("ATSC Major Channel") +#define MINOR_CHANNEL_TEXT N_("ATSC Minor Channel") +#define MINOR_CHANNEL_LONGTEXT N_("ATSC Minor Channel") +#define PHYSICAL_CHANNEL_TEXT N_("ATSC Physical Channel") +#define PHYSICAL_CHANNEL_LONGTEXT N_("ATSC Physical Channel") /* Terrestrial */ -#define CODE_RATE_HP_TEXT N_("Terrestrial high priority stream code rate (FEC)") -#define CODE_RATE_HP_LONGTEXT N_("High Priority FEC Rate " \ - "[Undefined,1/2,2/3,3/4,5/6,7/8]") +#define CODE_RATE_HP_TEXT N_("FEC rate") +#define CODE_RATE_HP_LONGTEXT N_("FEC rate includes " \ + "DVB-T high priority stream FEC Rate") static const int i_hp_fec_list[] = { -1, 1, 2, 3, 4, 5 }; -static const char *ppsz_hp_fec_text[] = { N_("Undefined"), N_("1/2"), N_("2/3"), - N_("3/4"), N_("5/6"), N_("7/8") }; +static const char *const ppsz_hp_fec_text[] = { + N_("Undefined"), N_("1/2"), N_("2/3"), N_("3/4"), N_("5/6"), N_("7/8") }; #define CODE_RATE_LP_TEXT N_("Terrestrial low priority stream code rate (FEC)") #define CODE_RATE_LP_LONGTEXT N_("Low Priority FEC Rate " \ "[Undefined,1/2,2/3,3/4,5/6,7/8]") static const int i_lp_fec_list[] = { -1, 1, 2, 3, 4, 5 }; -static const char *ppsz_lp_fec_text[] = { N_("Undefined"), N_("1/2"), N_("2/3"), - N_("3/4"), N_("5/6"), N_("7/8") }; +static const char *const ppsz_lp_fec_text[] = { + N_("Undefined"), N_("1/2"), N_("2/3"), N_("3/4"), N_("5/6"), N_("7/8") }; #define BANDWIDTH_TEXT N_("Terrestrial bandwidth") #define BANDWIDTH_LONGTEXT N_("Terrestrial bandwidth [0=auto,6,7,8 in MHz]") static const int i_band_list[] = { -1, 6, 7, 8 }; -static const char *ppsz_band_text[] = { N_("Undefined"), N_("6 MHz"), - N_("7 MHz"), N_("8 MHz") }; +static const char *const ppsz_band_text[] = { + N_("Undefined"), N_("6 MHz"), N_("7 MHz"), N_("8 MHz") }; #define GUARD_TEXT N_("Terrestrial guard interval") #define GUARD_LONGTEXT N_("Guard interval [Undefined,1/4,1/8,1/16,1/32]") static const int i_guard_list[] = { -1, 4, 8, 16, 32 }; -static const char *ppsz_guard_text[] = { N_("Undefined"), N_("1/4"), N_("1/8"), - N_("1/16"), N_("1/32") }; +static const char *const ppsz_guard_text[] = { + N_("Undefined"), N_("1/4"), N_("1/8"), N_("1/16"), N_("1/32") }; #define TRANSMISSION_TEXT N_("Terrestrial transmission mode") #define TRANSMISSION_LONGTEXT N_("Transmission mode [Undefined,2k,8k]") static const int i_transmission_list[] = { -1, 2, 8 }; -static const char *ppsz_transmission_text[] = { N_("Undefined"), N_("2k"), - N_("8k") }; +static const char *const ppsz_transmission_text[] = { + N_("Undefined"), N_("2k"), N_("8k") }; #define HIERARCHY_TEXT N_("Terrestrial hierarchy mode") #define HIERARCHY_LONGTEXT N_("Hierarchy alpha value [Undefined,1,2,4]") static const int i_hierarchy_list[] = { -1, 1, 2, 4 }; -static const char *ppsz_hierarchy_text[] = { N_("Undefined"), N_("1"), - N_("2"), N_("4") }; +static const char *const ppsz_hierarchy_text[] = { + N_("Undefined"), N_("1"), N_("2"), N_("4") }; /* BDA module additional DVB-S Parameters */ #define AZIMUTH_TEXT N_("Satellite Azimuth") @@ -162,24 +171,37 @@ static const char *ppsz_hierarchy_text[] = { N_("Undefined"), N_("1"), "Satellite Longitude in 10ths of degree, -ve=West") #define POLARISATION_TEXT N_("Satellite Polarisation") #define POLARISATION_LONGTEXT N_("Satellite Polarisation [H/V/L/R]") -static const char *ppsz_polar_list[] = { "H", "V", "L", "R" }; -static const char *ppsz_polar_text[] = { N_("Horizontal"), N_("Vertical"), +static const char *const ppsz_polar_list[] = { "H", "V", "L", "R" }; +static const char *const ppsz_polar_text[] = { + N_("Horizontal"), N_("Vertical"), N_("Circular Left"), N_("Circular Right") }; - -vlc_module_begin(); - set_shortname( _("DVB") ); - set_description( _("DirectShow DVB input") ); - set_category( CAT_INPUT ); - set_subcategory( SUBCAT_INPUT_ACCESS ); +#define RANGE_TEXT N_("Satellite Range Code") +#define RANGE_LONGTEXT N_("Satellite Range Code as defined by manufacturer " \ + "e.g. DISEqC switch code") +#define NAME_TEXT N_("Network Name") +#define NAME_LONGTEXT N_("Unique network name in the System Tuning Spaces") +#define CREATE_TEXT N_("Network Name to Create") +#define CREATE_LONGTEXT N_("Create Unique name in the System Tuning Spaces") + +vlc_module_begin () + set_shortname( N_("DVB") ) + set_description( N_("DirectShow DVB input") ) + set_category( CAT_INPUT ) + set_subcategory( SUBCAT_INPUT_ACCESS ) add_integer( "dvb-caching", DEFAULT_PTS_DELAY / 1000, NULL, CACHING_TEXT, CACHING_LONGTEXT, true ); - add_integer( "dvb-frequency", 11954000, NULL, FREQ_TEXT, FREQ_LONGTEXT, + add_integer( "dvb-frequency", 0, NULL, FREQ_TEXT, FREQ_LONGTEXT, false ); # if defined(WIN32) || defined(WINCE) + add_string( "dvb-network-name", NULL, NULL, NAME_TEXT, NAME_LONGTEXT, + true ); + add_string( "dvb-create-name", NULL, NULL, CREATE_TEXT, + CREATE_LONGTEXT, true ); + add_integer( "dvb-adapter", -1, NULL, ADAPTER_TEXT, ADAPTER_LONGTEXT, + true ); # else - add_integer( "dvb-adapter", 0, NULL, ADAPTER_TEXT, ADAPTER_LONGTEXT, - false ); + /* dvb-device refers to a frontend within an adapter */ add_integer( "dvb-device", 0, NULL, DEVICE_TEXT, DEVICE_LONGTEXT, true ); add_bool( "dvb-probe", 1, NULL, PROBE_TEXT, PROBE_LONGTEXT, true ); @@ -190,11 +212,12 @@ vlc_module_begin(); /* DVB-S (satellite) */ add_integer( "dvb-inversion", 2, NULL, INVERSION_TEXT, INVERSION_LONGTEXT, true ); - change_integer_list( i_inversion_list, ppsz_inversion_text, 0 ); + change_integer_list( i_inversion_list, ppsz_inversion_text, NULL ); # if defined(WIN32) || defined(WINCE) add_string( "dvb-polarisation", NULL, NULL, POLARISATION_TEXT, - POLARISATION_LONGTEXT, true ); + POLARISATION_LONGTEXT, false ); change_string_list( ppsz_polar_list, ppsz_polar_text, 0 ); + /* Note: Polaristion H = voltage 18; V = voltage 13; */ add_integer( "dvb-network-id", 0, NULL, NETID_TEXT, NETID_LONGTEXT, true ); add_integer( "dvb-azimuth", 0, NULL, AZIMUTH_TEXT, AZIMUTH_LONGTEXT, @@ -203,7 +226,10 @@ vlc_module_begin(); ELEVATION_LONGTEXT, true ); add_integer( "dvb-longitude", 0, NULL, LONGITUDE_TEXT, LONGITUDE_LONGTEXT, true ); - /* Note: Polaristion H = voltage 18; V = voltage 13; */ + add_string( "dvb-range", NULL, NULL, RANGE_TEXT, + RANGE_LONGTEXT, true ); + /* dvb-range corresponds to the BDA InputRange parameter which is + * used by some drivers to control the diseqc */ # else add_integer( "dvb-satno", 0, NULL, SATNO_TEXT, SATNO_LONGTEXT, true ); @@ -213,6 +239,7 @@ vlc_module_begin(); HIGH_VOLTAGE_LONGTEXT, true ); add_integer( "dvb-tone", -1, NULL, TONE_TEXT, TONE_LONGTEXT, true ); + add_integer( "dvb-fec", 9, NULL, FEC_TEXT, FEC_LONGTEXT, true ); # endif add_integer( "dvb-lnb-lof1", 0, NULL, LNB_LOF1_TEXT, LNB_LOF1_LONGTEXT, true ); @@ -220,59 +247,64 @@ vlc_module_begin(); LNB_LOF2_LONGTEXT, true ); add_integer( "dvb-lnb-slof", 0, NULL, LNB_SLOF_TEXT, LNB_SLOF_LONGTEXT, true ); - - add_integer( "dvb-fec", 9, NULL, FEC_TEXT, FEC_LONGTEXT, true ); - add_integer( "dvb-srate", 27500000, NULL, SRATE_TEXT, SRATE_LONGTEXT, + add_integer( "dvb-srate", 27500, NULL, SRATE_TEXT, SRATE_LONGTEXT, false ); /* DVB-C (cable) */ add_integer( "dvb-modulation", -1, NULL, MODULATION_TEXT, MODULATION_LONGTEXT, true ); - change_integer_list( i_qam_list, ppsz_qam_text, 0 ); + change_integer_list( i_mod_list, ppsz_mod_text, NULL ); + + /* ATSC */ + add_integer( "dvb-major-channel", 0, NULL, MAJOR_CHANNEL_TEXT, + MAJOR_CHANNEL_LONGTEXT, true ); + add_integer( "dvb-minor-channel", 0, NULL, MINOR_CHANNEL_TEXT, + MINOR_CHANNEL_LONGTEXT, true ); + add_integer( "dvb-physical-channel", 0, NULL, PHYSICAL_CHANNEL_TEXT, + PHYSICAL_CHANNEL_LONGTEXT, true ); /* DVB-T (terrestrial) */ add_integer( "dvb-code-rate-hp", -1, NULL, CODE_RATE_HP_TEXT, CODE_RATE_HP_LONGTEXT, true ); - change_integer_list( i_hp_fec_list, ppsz_hp_fec_text, 0 ); + change_integer_list( i_hp_fec_list, ppsz_hp_fec_text, NULL ); add_integer( "dvb-code-rate-lp", -1, NULL, CODE_RATE_LP_TEXT, CODE_RATE_LP_LONGTEXT, true ); - change_integer_list( i_lp_fec_list, ppsz_lp_fec_text, 0 ); + change_integer_list( i_lp_fec_list, ppsz_lp_fec_text, NULL ); add_integer( "dvb-bandwidth", 0, NULL, BANDWIDTH_TEXT, BANDWIDTH_LONGTEXT, - true ); - change_integer_list( i_band_list, ppsz_band_text, 0 ); - add_integer( "dvb-guard", -1, NULL, GUARD_TEXT, GUARD_LONGTEXT, true ); - change_integer_list( i_guard_list, ppsz_guard_text, 0 ); + false ); + change_integer_list( i_band_list, ppsz_band_text, NULL ); + add_integer( "dvb-guard", -1, NULL, GUARD_TEXT, GUARD_LONGTEXT, true ) + change_integer_list( i_guard_list, ppsz_guard_text, NULL ); add_integer( "dvb-transmission", -1, NULL, TRANSMISSION_TEXT, TRANSMISSION_LONGTEXT, true ); - change_integer_list( i_transmission_list, ppsz_transmission_text, 0 ); + change_integer_list( i_transmission_list, ppsz_transmission_text, NULL ); add_integer( "dvb-hierarchy", -1, NULL, HIERARCHY_TEXT, HIERARCHY_LONGTEXT, true ); - change_integer_list( i_hierarchy_list, ppsz_hierarchy_text, 0 ); - - set_capability( "access", 0 ); - add_shortcut( "dvb" ); /* Generic name */ + change_integer_list( i_hierarchy_list, ppsz_hierarchy_text, NULL ); - add_shortcut( "dvb-s" ); /* Satellite */ - add_shortcut( "dvbs" ); - add_shortcut( "qpsk" ); - add_shortcut( "satellite" ); + set_capability( "access", 0 ) + add_shortcut( "dvb" ) /* Generic name */ - add_shortcut( "dvb-c" ); /* Cable */ - add_shortcut( "dvbc" ); - add_shortcut( "qam" ); - add_shortcut( "cable" ); + add_shortcut( "dvb-s" ) /* Satellite */ + add_shortcut( "dvbs" ) + add_shortcut( "qpsk" ) + add_shortcut( "satellite" ) - add_shortcut( "dvbt" ); /* Terrestrial */ - add_shortcut( "dvb-t" ); - add_shortcut( "ofdm" ); - add_shortcut( "terrestrial" ); + add_shortcut( "dvb-c" ) /* Cable */ + add_shortcut( "dvbc" ) + add_shortcut( "qam" ) + add_shortcut( "cable" ) - add_shortcut( "atsc" ); /* Atsc */ - add_shortcut( "usdigital" ); + add_shortcut( "dvbt" ) /* Terrestrial */ + add_shortcut( "dvb-t" ) + add_shortcut( "ofdm" ) + add_shortcut( "terrestrial" ) - set_callbacks( Open, Close ); -vlc_module_end(); + add_shortcut( "atsc" ) /* Atsc */ + add_shortcut( "usdigital" ) + set_callbacks( Open, Close ) +vlc_module_end () /***************************************************************************** * Open: open direct show device as an access module @@ -282,19 +314,22 @@ static int Open( vlc_object_t *p_this ) access_t *p_access = (access_t*)p_this; access_sys_t *p_sys; const char* psz_module = "dvb"; - const int i_param_count = 19; + const int i_param_count = 26; const char* psz_param[] = { "frequency", "bandwidth", "srate", "azimuth", "elevation", "longitude", "polarisation", "modulation", "caching", "lnb-lof1", "lnb-lof2", "lnb-slof", "inversion", "network-id", "code-rate-hp", "code-rate-lp", - "guard", "transmission", "hierarchy" }; + "guard", "transmission", "hierarchy", "range", "network-name", + "create-name", "major-channel", "minor-channel", "physical-channel", + "adapter" }; const int i_type[] = { VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_STRING, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, - VLC_VAR_INTEGER }; + VLC_VAR_INTEGER, VLC_VAR_STRING, VLC_VAR_STRING, VLC_VAR_STRING, + VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER }; char psz_full_name[128]; int i_ret; @@ -314,12 +349,10 @@ static int Open( vlc_object_t *p_this ) p_access->info.b_eof = false; p_access->info.i_title = 0; p_access->info.i_seekpoint = 0; - p_access->p_sys = p_sys = (access_sys_t *)malloc( sizeof( access_sys_t ) ); + p_access->p_sys = p_sys = calloc( 1, sizeof( access_sys_t ) ); if( !p_sys ) return VLC_ENOMEM; - memset( p_sys, 0, sizeof( access_sys_t ) ); - for( int i = 0; i < i_param_count; i++ ) { snprintf( psz_full_name, 128, "%s-%s\0", psz_module, @@ -383,8 +416,8 @@ static int Open( vlc_object_t *p_this ) static int ParsePath( access_t *p_access, const char* psz_module, const int i_param_count, const char** psz_param, const int* i_type ) { - const int MAXPARAM = 20; - BOOL b_used[MAXPARAM]; + const int MAXPARAM = 40; + bool b_used[MAXPARAM]; char* psz_parser; char* psz_token; char* psz_value; @@ -400,7 +433,7 @@ static int ParsePath( access_t *p_access, const char* psz_module, return VLC_EGENERIC; } for( int i = 0; i < i_param_count; i++ ) - b_used[i] = FALSE; + b_used[i] = false; psz_parser = p_access->psz_path; if( strlen( psz_parser ) <= 0 ) return VLC_SUCCESS; @@ -408,7 +441,7 @@ static int ParsePath( access_t *p_access, const char* psz_module, i_token_len = strcspn( psz_parser, ":" ); if( i_token_len <= 0 ) i_token_len = strcspn( ++psz_parser, ":" ); - + do { psz_token = strndup( psz_parser, i_token_len ); @@ -417,8 +450,7 @@ static int ParsePath( access_t *p_access, const char* psz_module, { msg_Warn( p_access, "ParsePath: Unspecified parameter %s", psz_token ); - if( psz_token ) - free( psz_token ); + free( psz_token ); return VLC_EGENERIC; } i_this_param = -1; @@ -433,19 +465,17 @@ static int ParsePath( access_t *p_access, const char* psz_module, if( i_this_param < 0 ) { msg_Warn( p_access, "ParsePath: Unknown parameter %s", psz_token ); - if( psz_token ) - free( psz_token ); + free( psz_token ); return VLC_EGENERIC; } if( b_used[i_this_param] ) { msg_Warn( p_access, "ParsePath: Duplicate parameter %s", psz_token ); - if( psz_token ) - free( psz_token ); + free( psz_token ); return VLC_EGENERIC; } - b_used[i_this_param] = TRUE; + b_used[i_this_param] = true; /* if "=" was found in token then value starts at * psz_token + i_paramlen + 1 @@ -461,14 +491,13 @@ static int ParsePath( access_t *p_access, const char* psz_module, psz_param[i_this_param] ); var_Set( p_access, psz_full_name, v_value ); - if( psz_token ) - free( psz_token ); + free( psz_token ); if( i_token_len >= strlen( psz_parser ) ) break; psz_parser += i_token_len + 1; i_token_len = strcspn( psz_parser, ":" ); } - while( TRUE ); + while( true ); return VLC_SUCCESS; } @@ -506,10 +535,6 @@ static int Control( access_t *p_access, int i_query, va_list args ) pb_bool = (bool*)va_arg( args, bool* ); *pb_bool = false; break; - case ACCESS_GET_MTU: /* 4 */ - pi_int = (int*)va_arg( args, int * ); - *pi_int = 0; - break; case ACCESS_GET_PTS_DELAY: /* 5 */ pi_64 = (int64_t*)va_arg( args, int64_t * ); *pi_64 = var_GetInteger( p_access, "dvb-caching" ) * 1000; @@ -546,7 +571,7 @@ static block_t *Block( access_t *p_access ) block_t *p_block; long l_buffer_len; - if( p_access->b_die ) + if( !vlc_object_alive (p_access) ) return NULL; l_buffer_len = dvb_GetBufferSize( p_access );