vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Fri Mar 25 13:26:05 2011 +0200| [223d42467bf7a3fb5ae3b6b7d1c8e8fc4d65cc1a] | committer: Rémi Denis-Courmont
DTV: represent guard intervals as ints rather than strings internally > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=223d42467bf7a3fb5ae3b6b7d1c8e8fc4d65cc1a --- modules/access/dtv/access.c | 28 ++++++++++++++++++++++++++-- modules/access/dtv/dtv.h | 5 ++++- modules/access/dtv/linux.c | 34 +++++++++++++++++----------------- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/modules/access/dtv/access.c b/modules/access/dtv/access.c index 78ee862..3e758d5 100644 --- a/modules/access/dtv/access.c +++ b/modules/access/dtv/access.c @@ -583,6 +583,31 @@ static char *var_InheritModulation (vlc_object_t *obj) return strdup (str); } +static unsigned var_InheritGuardInterval (vlc_object_t *obj) +{ + char *guard = var_InheritString (obj, "dvb-guard"); + if (guard == NULL) + return VLC_GUARD_AUTO; + + uint16_t a, b; + int v = sscanf (guard, "%"SCNu16"/%"SCNu16, &a, &b); + free (guard); + switch (v) + { + case 1: + /* Backward compatibility with VLC < 1.2 */ + if (a == 0) + break; + msg_Warn (obj, "\"guard=%"PRIu16"\" option is obsolete. " + "Use \"guard=1/%"PRIu16" instead.", a, a); + b = a; + a = 1; + case 2: + return VLC_GUARD(a, b); + } + return VLC_GUARD_AUTO; +} + /*** ATSC ***/ static int atsc_setup (vlc_object_t *obj, dvb_device_t *dev, unsigned freq) @@ -700,13 +725,12 @@ 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"); char *fec_lp = var_InheritString (obj, "dvb-code-rate-lp"); - char *guard = var_InheritString (obj, "dvb-guard"); + uint32_t guard = var_InheritGuardInterval (obj); uint32_t bw = var_InheritInteger (obj, "dvb-bandwidth"); int tx = var_InheritInteger (obj, "dvb-transmission"); int h = var_InheritInteger (obj, "dvb-hierarchy"); int ret = dvb_set_dvbt (dev, freq, mod, fec_hp, fec_lp, bw, tx, guard, h); - free (guard); free (fec_lp); free (fec_hp); free (mod); diff --git a/modules/access/dtv/dtv.h b/modules/access/dtv/dtv.h index f4883e3..ab48aa5 100644 --- a/modules/access/dtv/dtv.h +++ b/modules/access/dtv/dtv.h @@ -40,6 +40,9 @@ float dvb_get_snr (dvb_device_t *); int dvb_set_inversion (dvb_device_t *, int); int dvb_tune (dvb_device_t *); +#define VLC_GUARD(a,b) (((a) << 16u) | (b)) +#define VLC_GUARD_AUTO 0xFFFFFFFF + /* DVB-C */ int dvb_set_dvbc (dvb_device_t *, uint32_t freq, const char *mod, uint32_t srate, const char *fec); @@ -55,7 +58,7 @@ int dvb_set_sec (dvb_device_t *, uint32_t freq, char pol, /* DVB-T */ int dvb_set_dvbt (dvb_device_t *, uint32_t freq, const char *mod, const char *fec_hp, const char *fec_lp, uint32_t bandwidth, - int transmission, const char *guard, int hierarchy); + int transmission, uint32_t guard, int hierarchy); /* ATSC */ int dvb_set_atsc (dvb_device_t *, uint32_t freq, const char *mod); diff --git a/modules/access/dtv/linux.c b/modules/access/dtv/linux.c index 090b960..aa2a297 100644 --- a/modules/access/dtv/linux.c +++ b/modules/access/dtv/linux.c @@ -712,19 +712,19 @@ static int dvb_parse_transmit_mode (int i) TRANSMISSION_MODE_AUTO); } -static int dvb_parse_guard (const char *str) -{ - static const dvb_str_map_t tab[] = { - { "", GUARD_INTERVAL_AUTO }, - /*{ "1/128", GUARD_INTERVAL_1_128 },*/ - { "1/16", GUARD_INTERVAL_1_16 }, - { "1/32", GUARD_INTERVAL_1_32 }, - { "1/4", GUARD_INTERVAL_1_4 }, - { "1/8", GUARD_INTERVAL_1_8 }, - /*{ "19/128", GUARD_INTERVAL_19_128 },*/ - /*{ "9/256", GUARD_INTERVAL_9_256 },*/ +static int dvb_parse_guard (uint32_t guard) +{ + static const dvb_int_map_t tab[] = { + /*{ VLC_GUARD(1,128), GUARD_INTERVAL_1_128 },*/ + { VLC_GUARD(1,16), GUARD_INTERVAL_1_16 }, + { VLC_GUARD(1,32), GUARD_INTERVAL_1_32 }, + { VLC_GUARD(1,4), GUARD_INTERVAL_1_4 }, + { VLC_GUARD(1,8), GUARD_INTERVAL_1_8 }, + /*{ VLC_GUARD(19,128), GUARD_INTERVAL_19_128 },*/ + /*{ VLC_GUARD(9,256), GUARD_INTERVAL_9_256 },*/ + { VLC_GUARD_AUTO, GUARD_INTERVAL_AUTO }, }; - return dvb_parse_str (str, tab, sizeof (tab) / sizeof (*tab), + return dvb_parse_int (guard, tab, sizeof (tab) / sizeof (*tab), GUARD_INTERVAL_AUTO); } @@ -743,22 +743,22 @@ static int dvb_parse_hierarchy (int i) int dvb_set_dvbt (dvb_device_t *d, uint32_t freq, const char *modstr, const char *fechstr, const char *feclstr, uint32_t bandwidth, - int transmit_val, const char *guardstr, int hierarchy_val) + int transmit_mode, uint32_t guard, int hierarchy) { uint32_t mod = dvb_parse_modulation (modstr, QAM_AUTO); uint32_t fec_hp = dvb_parse_fec (fechstr); uint32_t fec_lp = dvb_parse_fec (feclstr); bandwidth *= 1000000; - uint32_t transmit_mode = dvb_parse_transmit_mode (transmit_val); - uint32_t guard_it = dvb_parse_guard (guardstr); - uint32_t hierarchy = dvb_parse_hierarchy (hierarchy_val); + transmit_mode = dvb_parse_transmit_mode (transmit_mode); + guard = dvb_parse_guard (guard); + hierarchy = dvb_parse_hierarchy (hierarchy); return dvb_set_props (d, 10, DTV_CLEAR, 0, DTV_DELIVERY_SYSTEM, SYS_DVBT, 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, - DTV_GUARD_INTERVAL, guard_it, + DTV_GUARD_INTERVAL, guard, DTV_HIERARCHY, hierarchy); } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
