dvbsrc: factor out transmission mode check against delsys

This commit is contained in:
Reynaldo H. Verdejo Pinochet 2016-05-13 00:04:08 -07:00
parent 15e21fee71
commit f0d7a8cb89

View file

@ -557,6 +557,7 @@ static gboolean gst_dvbsrc_tune_fe (GstDvbSrc * object);
static void gst_dvbsrc_set_pes_filters (GstDvbSrc * object);
static void gst_dvbsrc_unset_pes_filters (GstDvbSrc * object);
static gboolean gst_dvbsrc_is_valid_modulation (guint delsys, guint mod);
static gboolean gst_dvbsrc_is_valid_trans_mode (guint delsys, guint mode);
/**
* This loop should be safe enough considering:
@ -2051,6 +2052,33 @@ gst_dvbsrc_is_seekable (GstBaseSrc * bsrc)
return FALSE;
}
static gboolean
gst_dvbsrc_is_valid_trans_mode (guint delsys, guint mode)
{
/* FIXME: check valid transmission modes for other broadcast standards */
switch (delsys) {
case SYS_DVBT:
if (mode == TRANSMISSION_MODE_AUTO || mode == TRANSMISSION_MODE_2K ||
mode == TRANSMISSION_MODE_8K) {
return TRUE;
}
break;
case SYS_DVBT2:
if (mode == TRANSMISSION_MODE_AUTO || mode == TRANSMISSION_MODE_1K ||
mode == TRANSMISSION_MODE_2K || mode == TRANSMISSION_MODE_4K ||
mode == TRANSMISSION_MODE_8K || mode == TRANSMISSION_MODE_16K ||
mode == TRANSMISSION_MODE_32K) {
return TRUE;
}
break;
default:
GST_FIXME ("No delsys/transmission-mode sanity checks implemented for "
"this delivery system");
return TRUE;
}
return FALSE;
}
static gboolean
gst_dvbsrc_is_valid_modulation (guint delsys, guint mod)
{
@ -2469,29 +2497,12 @@ gst_dvbsrc_set_fe_params (GstDvbSrc * object, struct dtv_properties *props)
case SYS_DVBT:
case SYS_DVBT2:
if (object->delsys == SYS_DVBT) {
if (object->transmission_mode != TRANSMISSION_MODE_AUTO &&
object->transmission_mode != TRANSMISSION_MODE_2K &&
object->transmission_mode != TRANSMISSION_MODE_8K) {
GST_WARNING_OBJECT (object, "Wrong DVB-T parameter combination: "
"transmission mode should be either AUTO, 2K or 8K");
}
if (object->bandwidth != 6000000 && object->bandwidth != 7000000 &&
object->bandwidth != 8000000) {
GST_WARNING_OBJECT (object, "Wrong DVB-T parameter value: bandwidth "
"is %d but only 6, 7 and 8 MHz are allowed", object->bandwidth);
}
} else if (object->delsys == SYS_DVBT2) {
if (object->transmission_mode != TRANSMISSION_MODE_AUTO &&
object->transmission_mode != TRANSMISSION_MODE_1K &&
object->transmission_mode != TRANSMISSION_MODE_2K &&
object->transmission_mode != TRANSMISSION_MODE_4K &&
object->transmission_mode != TRANSMISSION_MODE_8K &&
object->transmission_mode != TRANSMISSION_MODE_16K &&
object->transmission_mode != TRANSMISSION_MODE_32K) {
GST_WARNING_OBJECT (object, "Wrong DVB-T2 parameter combination: "
"transmission mode should be either AUTO, 1K, 2K, 4K, 8K, 16K "
"or 32K");
}
if (object->stream_id > 255) {
GST_WARNING_OBJECT (object, "Wrong DVB-T2 stream ID '%d'. Value "
"can't be greater than 255", object->stream_id);
@ -2633,6 +2644,12 @@ gst_dvbsrc_set_fe_params (GstDvbSrc * object, struct dtv_properties *props)
"Attempting invalid modulation '%u' for delivery system '%u'",
object->modulation, object->delsys);
}
if (!gst_dvbsrc_is_valid_trans_mode (object->delsys,
object->transmission_mode)) {
GST_WARNING_OBJECT (object,
"Attempting invalid transmission mode '%u' for delivery system '%u'",
object->transmission_mode, object->delsys);
}
set_prop (props->props, &n, DTV_TUNE, 0);
props->num = n;