vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Wed Mar 23 19:12:58 2011 +0200| [849c98b34594a3d3e3daa982ab4204042ac2dd77] | committer: Rémi Denis-Courmont
DTV: use kHz for all frequencies This is the simplest option. Hz resolution is useless for this purpose, exhibits so many trailing zeroes that the preferences dialog overflows, and overflows 32-bits values for satellite carrier frequencies. This is also the default resolution for BDA. I see no need to copy the "inconsistent" resolution if Linux-DVB (Hz for C/T, kHz for S). For backward compatibility, frequencies beyond the radar bands are divided by 1000. This corresponds to EHF and infrared in kHz. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=849c98b34594a3d3e3daa982ab4204042ac2dd77 --- modules/access/dtv/access.c | 39 ++++++++++++++++++++++++++------------- modules/access/dtv/dtv.h | 4 ++-- modules/access/dtv/linux.c | 16 +++++++--------- 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/modules/access/dtv/access.c b/modules/access/dtv/access.c index 51faf17..902ff0e 100644 --- a/modules/access/dtv/access.c +++ b/modules/access/dtv/access.c @@ -50,7 +50,7 @@ "Only useful programs are normally demultiplexed from the transponder. " \ "This option will disable demultiplexing and receive all programs.") -#define FREQ_TEXT N_("Frequency (Hz)") +#define FREQ_TEXT N_("Frequency (kHz)") #define FREQ_LONGTEXT N_( \ "TV channels are grouped by transponder (a.k.a. multiplex) " \ "on a given frequency. This is required to tune the receiver.") @@ -171,7 +171,7 @@ vlc_module_begin () add_bool ("dvb-budget-mode", false, BUDGET_TEXT, BUDGET_LONGTEXT, true) #endif add_integer ("dvb-frequency", 0, FREQ_TEXT, FREQ_LONGTEXT, false) - change_integer_range (0, UINT64_C(0xffffffff) * 1000) + change_integer_range (0, 107999999) change_safe () add_integer ("dvb-inversion", -1, INVERSION_TEXT, INVERSION_LONGTEXT, true) change_integer_list (auto_off_on_vlc, auto_off_on_user) @@ -200,7 +200,7 @@ vlc_module_begin () change_integer_list (hierarchy_vlc, hierarchy_user) change_safe () - set_section (N_("Cable and satellite parameters"), NULL) + set_section (N_("Cable and satellite reception parameters"), NULL) add_string ("dvb-modulation", 0, MODULATION_TEXT, MODULATION_LONGTEXT, false) change_string_list (modulation_vlc, modulation_user, NULL) @@ -254,14 +254,15 @@ struct access_sys_t struct delsys { - int (*setup) (vlc_object_t *, dvb_device_t *, uint64_t freq); + int (*setup) (vlc_object_t *, dvb_device_t *, unsigned freq); /* TODO: scan stuff */ }; static block_t *Read (access_t *); static int Control (access_t *, int, va_list); static const delsys_t *GuessSystem (const char *, dvb_device_t *); -static int Tune (vlc_object_t *, dvb_device_t *, const delsys_t *, uint64_t); +static int Tune (vlc_object_t *, dvb_device_t *, const delsys_t *, unsigned); +static unsigned var_InheritFrequency (vlc_object_t *); static int Open (vlc_object_t *obj) { @@ -271,7 +272,7 @@ static int Open (vlc_object_t *obj) return VLC_ENOMEM; var_LocationParse (obj, access->psz_location, "dvb-"); - uint64_t freq = var_InheritInteger (obj, "dvb-frequency"); + unsigned freq = var_InheritFrequency (obj); dvb_device_t *dev = dvb_open (obj, freq != 0); if (dev == NULL) @@ -288,7 +289,7 @@ static int Open (vlc_object_t *obj) const delsys_t *delsys = GuessSystem (access->psz_access, dev); if (delsys == NULL || Tune (obj, dev, delsys, freq)) { - msg_Err (obj, "tuning to %"PRIu64" Hz failed", freq); + msg_Err (obj, "tuning to %u kHz failed", freq); dialog_Fatal (obj, N_("Digital broadcasting"), N_("The selected digital tuner does not support " "the specified parameters.\n" @@ -459,7 +460,7 @@ static const delsys_t *GuessSystem (const char *scheme, dvb_device_t *dev) /** Set parameters and tune the device */ static int Tune (vlc_object_t *obj, dvb_device_t *dev, const delsys_t *delsys, - uint64_t freq) + unsigned freq) { if (delsys->setup (obj, dev, freq) || dvb_set_inversion (dev, var_InheritInteger (obj, "dvb-inversion")) @@ -468,6 +469,18 @@ static int Tune (vlc_object_t *obj, dvb_device_t *dev, const delsys_t *delsys, return VLC_SUCCESS; } +static unsigned var_InheritFrequency (vlc_object_t *obj) +{ + unsigned freq = var_InheritInteger (obj, "dvb-frequency"); + if (freq >= 108000000) + { + msg_Err (obj, "%u kHz frequency is too high.", freq); + freq /= 1000; + msg_Info (obj, "Assuming %u kHz carrier frequency instead.", freq); + } + return freq; +} + static char *var_InheritCodeRate (vlc_object_t *obj) { char *code_rate = var_InheritString (obj, "dvb-code-rate"); @@ -520,7 +533,7 @@ static char *var_InheritModulation (vlc_object_t *obj) /*** ATSC ***/ -static int atsc_setup (vlc_object_t *obj, dvb_device_t *dev, uint64_t freq) +static int atsc_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq) { char *mod = var_InheritModulation (obj); @@ -533,7 +546,7 @@ const delsys_t atsc = { .setup = atsc_setup }; /*** DVB-C ***/ -static int dvbc_setup (vlc_object_t *obj, dvb_device_t *dev, uint64_t freq) +static int dvbc_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq) { char *mod = var_InheritModulation (obj); char *fec = var_InheritCodeRate (obj); @@ -549,7 +562,7 @@ const delsys_t dvbc = { .setup = dvbc_setup }; /*** DVB-S ***/ -static int dvbs_setup (vlc_object_t *obj, dvb_device_t *dev, uint64_t freq) +static int dvbs_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq) { char *fec = var_InheritCodeRate (obj); uint32_t srate = var_InheritInteger (obj, "dvb-srate"); @@ -562,7 +575,7 @@ static int dvbs_setup (vlc_object_t *obj, dvb_device_t *dev, uint64_t freq) return ret; } -static int dvbs2_setup (vlc_object_t *obj, dvb_device_t *dev, uint64_t freq) +static int dvbs2_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq) { char *mod = var_InheritModulation (obj); char *fec = var_InheritCodeRate (obj); @@ -582,7 +595,7 @@ const delsys_t dvbs2 = { .setup = dvbs2_setup }; /*** DVB-T ***/ -static int dvbt_setup (vlc_object_t *obj, dvb_device_t *dev, uint64_t freq) +static int dvbt_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq) { char *mod = var_InheritModulation (obj); char *fec_hp = var_InheritString (obj, "dvb-code-rate-hp"); diff --git a/modules/access/dtv/dtv.h b/modules/access/dtv/dtv.h index 0017a6f..7b5d49a 100644 --- a/modules/access/dtv/dtv.h +++ b/modules/access/dtv/dtv.h @@ -45,9 +45,9 @@ int dvb_set_dvbc (dvb_device_t *, uint32_t freq, const char *mod, uint32_t srate, const char *fec); /* DVB-S */ -int dvb_set_dvbs (dvb_device_t *, uint64_t freq, uint32_t srate, +int dvb_set_dvbs (dvb_device_t *, uint32_t freq, uint32_t srate, const char *fec); -int dvb_set_dvbs2 (dvb_device_t *, uint64_t freq, const char *mod, +int dvb_set_dvbs2 (dvb_device_t *, uint32_t freq, const char *mod, uint32_t srate, const char *fec, int pilot, int rolloff); int dvb_set_sec (dvb_device_t *, bool tone, int voltage, bool high_voltage); /* XXX^^ */ diff --git a/modules/access/dtv/linux.c b/modules/access/dtv/linux.c index 0290789..9416938 100644 --- a/modules/access/dtv/linux.c +++ b/modules/access/dtv/linux.c @@ -530,27 +530,25 @@ int dvb_set_dvbc (dvb_device_t *d, uint32_t freq, const char *modstr, return dvb_set_props (d, 6, DTV_CLEAR, 0, DTV_DELIVERY_SYSTEM, SYS_DVBC_ANNEX_AC, - DTV_FREQUENCY, freq, DTV_MODULATION, mod, + DTV_FREQUENCY, freq * 1000, DTV_MODULATION, mod, DTV_SYMBOL_RATE, srate, DTV_INNER_FEC, fec); } /*** DVB-S ***/ -int dvb_set_dvbs (dvb_device_t *d, uint64_t freq, +int dvb_set_dvbs (dvb_device_t *d, uint32_t freq, uint32_t srate, const char *fecstr) { - unsigned f = freq / 1000; unsigned fec = dvb_parse_fec (fecstr); return dvb_set_props (d, 5, DTV_CLEAR, 0, DTV_DELIVERY_SYSTEM, SYS_DVBS, - DTV_FREQUENCY, f, DTV_SYMBOL_RATE, srate, + DTV_FREQUENCY, freq, DTV_SYMBOL_RATE, srate, DTV_INNER_FEC, fec); } -int dvb_set_dvbs2 (dvb_device_t *d, uint64_t freq, const char *modstr, +int dvb_set_dvbs2 (dvb_device_t *d, uint32_t freq, const char *modstr, uint32_t srate, const char *fecstr, int pilot, int rolloff) { - unsigned f = freq / 1000; unsigned mod = dvb_parse_modulation (modstr, QPSK); unsigned fec = dvb_parse_fec (fecstr); @@ -570,7 +568,7 @@ int dvb_set_dvbs2 (dvb_device_t *d, uint64_t freq, const char *modstr, } return dvb_set_props (d, 8, DTV_CLEAR, 0, DTV_DELIVERY_SYSTEM, SYS_DVBS2, - DTV_FREQUENCY, f, DTV_MODULATION, mod, + DTV_FREQUENCY, freq, DTV_MODULATION, mod, DTV_SYMBOL_RATE, srate, DTV_INNER_FEC, fec, DTV_PILOT, pilot, DTV_ROLLOFF, rolloff); } @@ -635,7 +633,7 @@ int dvb_set_dvbt (dvb_device_t *d, uint32_t freq, const char *modstr, uint32_t hierarchy = dvb_parse_hierarchy (hierarchy_val); return dvb_set_props (d, 10, DTV_CLEAR, 0, DTV_DELIVERY_SYSTEM, SYS_DVBT, - DTV_FREQUENCY, freq, DTV_MODULATION, mod, + DTV_FREQUENCY, freq * 1000, DTV_MODULATION, mod, DTV_CODE_RATE_HP, fec_hp, DTV_CODE_RATE_LP, fec_lp, DTV_BANDWIDTH_HZ, bandwidth, DTV_TRANSMISSION_MODE, transmit_mode, @@ -650,5 +648,5 @@ int dvb_set_atsc (dvb_device_t *d, uint32_t freq, const char *modstr) unsigned mod = dvb_parse_modulation (modstr, VSB_8); return dvb_set_props (d, 4, DTV_CLEAR, 0, DTV_DELIVERY_SYSTEM, SYS_ATSC, - DTV_FREQUENCY, freq, DTV_MODULATION, mod); + DTV_FREQUENCY, freq * 1000, DTV_MODULATION, mod); } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
