summaryrefslogtreecommitdiff
path: root/sys/dvb
diff options
context:
space:
mode:
authorReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>2016-05-13 00:04:08 -0700
committerReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>2016-05-15 17:12:28 -0700
commitf0d7a8cb893df08d5f7e9ea555944ed7a6d3b66d (patch)
treeff55dc2c61ca0013045ef91b6a66a2093866bbf5 /sys/dvb
parent15e21fee71658389aaaaf532d8b8a63b32d737f3 (diff)
downloadgstreamer-plugins-bad-f0d7a8cb893df08d5f7e9ea555944ed7a6d3b66d.tar.gz
dvbsrc: factor out transmission mode check against delsys
Diffstat (limited to 'sys/dvb')
-rw-r--r--sys/dvb/gstdvbsrc.c51
1 files changed, 34 insertions, 17 deletions
diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
index 5d53c3c68..0bc86d99e 100644
--- a/sys/dvb/gstdvbsrc.c
+++ b/sys/dvb/gstdvbsrc.c
@@ -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:
@@ -2052,6 +2053,33 @@ gst_dvbsrc_is_seekable (GstBaseSrc * bsrc)
}
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)
{
/* FIXME: check valid modulations for other broadcast standards */
@@ -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;