static gboolean parse_and_configure_from_zap_conf_file (GstElement * dvbbasebin, const gchar * filename, const gchar * channel_name, GError ** error) { gboolean ret = FALSE; GHashTable *channels, *params; gchar *type; /** * Assumptions are made here about a format that is loosely * defined. Particularly, we assume a given delivery system * out of counting the number of fields per line. dvbsrc has * smarter code to auto-detect a delivery system based on * known-correct combinations of parameters so if you ever * encounter cases where the delivery system is being * wrongly set here, just remove the offending * g_object_set line and let dvbsrc work his magic out. */ channels = parse_channels_conf_from_file (dvbbasebin, filename, error); if (!channels) goto beach; params = g_hash_table_lookup (channels, channel_name); if (!params) goto unknown_channel; g_object_set (dvbbasebin, "program-numbers", g_hash_table_lookup (params, "sid"), NULL); /* check if it is terrestrial or satellite */ g_object_set (dvbbasebin, "frequency", atoi (g_hash_table_lookup (params, "frequency")), NULL); type = g_hash_table_lookup (params, "type"); if (strcmp (type, "terrestrial") == 0) { gchar *val; val = g_hash_table_lookup (params, "inversion"); if (strcmp (val, "INVERSION_OFF") == 0) g_object_set (dvbbasebin, "inversion", INVERSION_OFF, NULL); else if (strcmp (val, "INVERSION_ON") == 0) g_object_set (dvbbasebin, "inversion", INVERSION_ON, NULL); else g_object_set (dvbbasebin, "inversion", INVERSION_AUTO, NULL); val = g_hash_table_lookup (params, "bandwidth"); if (strcmp (val, "BANDWIDTH_8_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 0, NULL); else if (strcmp (val, "BANDWIDTH_7_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 1, NULL); else if (strcmp (val, "BANDWIDTH_6_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 2, NULL); else if (strcmp (val, "BANDWIDTH_5_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 4, NULL); else if (strcmp (val, "BANDWIDTH_10_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 5, NULL); else if (strcmp (val, "BANDWIDTH_1_712_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 6, NULL); else g_object_set (dvbbasebin, "bandwidth", 3, NULL); val = g_hash_table_lookup (params, "code-rate-hp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-hp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-hp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-hp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-hp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-hp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-hp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-hp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-hp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-hp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-hp", 9, NULL); val = g_hash_table_lookup (params, "code-rate-lp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-lp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-lp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-lp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-lp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-lp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-lp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-lp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-lp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-lp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-lp", 9, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QPSK") == 0) g_object_set (dvbbasebin, "modulation", 0, NULL); else if (strcmp (val, "QAM_16") == 0) g_object_set (dvbbasebin, "modulation", 1, NULL); else if (strcmp (val, "QAM_32") == 0) g_object_set (dvbbasebin, "modulation", 2, NULL); else if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_128") == 0) g_object_set (dvbbasebin, "modulation", 4, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else g_object_set (dvbbasebin, "modulation", 6, NULL); val = g_hash_table_lookup (params, "transmission-mode"); if (strcmp (val, "TRANSMISSION_MODE_2K") == 0) g_object_set (dvbbasebin, "trans-mode", 0, NULL); else if (strcmp (val, "TRANSMISSION_MODE_8K") == 0) g_object_set (dvbbasebin, "trans-mode", 1, NULL); else g_object_set (dvbbasebin, "trans-mode", 2, NULL); val = g_hash_table_lookup (params, "guard"); if (strcmp (val, "GUARD_INTERVAL_1_32") == 0) g_object_set (dvbbasebin, "guard", 0, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_16") == 0) g_object_set (dvbbasebin, "guard", 1, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_8") == 0) g_object_set (dvbbasebin, "guard", 2, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_4") == 0) g_object_set (dvbbasebin, "guard", 3, NULL); else g_object_set (dvbbasebin, "guard", 4, NULL); val = g_hash_table_lookup (params, "hierarchy"); if (strcmp (val, "HIERARCHY_NONE") == 0) g_object_set (dvbbasebin, "hierarchy", 0, NULL); else if (strcmp (val, "HIERARCHY_1") == 0) g_object_set (dvbbasebin, "hierarchy", 1, NULL); else if (strcmp (val, "HIERARCHY_2") == 0) g_object_set (dvbbasebin, "hierarchy", 2, NULL); else if (strcmp (val, "HIERARCHY_4") == 0) g_object_set (dvbbasebin, "hierarchy", 3, NULL); else g_object_set (dvbbasebin, "hierarchy", 4, NULL); ret = TRUE; } else if (strcmp (type, "satellite") == 0) { gchar *val; ret = TRUE; g_object_set (dvbbasebin, "delsys", SYS_DVBS, NULL); val = g_hash_table_lookup (params, "polarity"); if (val) g_object_set (dvbbasebin, "polarity", val, NULL); else ret = FALSE; val = g_hash_table_lookup (params, "diseqc-source"); if (val) g_object_set (dvbbasebin, "diseqc-source", atoi (val), NULL); val = g_hash_table_lookup (params, "symbol-rate"); if (val) g_object_set (dvbbasebin, "symbol-rate", atoi (val), NULL); else ret = FALSE; } else if (strcmp (type, "cable") == 0) { gchar *val; g_object_set (dvbbasebin, "delsys", SYS_DVBC_ANNEX_A, NULL); ret = TRUE; val = g_hash_table_lookup (params, "symbol-rate"); if (val) g_object_set (dvbbasebin, "symbol-rate", atoi (val) / 1000, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QPSK") == 0) g_object_set (dvbbasebin, "modulation", 0, NULL); else if (strcmp (val, "QAM_16") == 0) g_object_set (dvbbasebin, "modulation", 1, NULL); else if (strcmp (val, "QAM_32") == 0) g_object_set (dvbbasebin, "modulation", 2, NULL); else if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_128") == 0) g_object_set (dvbbasebin, "modulation", 4, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else g_object_set (dvbbasebin, "modulation", 6, NULL); val = g_hash_table_lookup (params, "code-rate-hp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-hp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-hp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-hp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-hp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-hp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-hp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-hp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-hp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-hp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-hp", 9, NULL); val = g_hash_table_lookup (params, "inversion"); if (strcmp (val, "INVERSION_OFF") == 0) g_object_set (dvbbasebin, "inversion", 0, NULL); else if (strcmp (val, "INVERSION_ON") == 0) g_object_set (dvbbasebin, "inversion", 1, NULL); else g_object_set (dvbbasebin, "inversion", 2, NULL); } else if (strcmp (type, "atsc") == 0) { gchar *val; ret = TRUE; g_object_set (dvbbasebin, "delsys", SYS_ATSC, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else if (strcmp (val, "8VSB") == 0) g_object_set (dvbbasebin, "modulation", 7, NULL); else if (strcmp (val, "16VSB") == 0) g_object_set (dvbbasebin, "modulation", 8, NULL); else ret = FALSE; } destroy_channels_hash (channels); beach: return ret; unknown_channel: { /* FIXME: is channel name guaranteed to be ASCII or UTF-8? */ g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_FOUND, _("Couldn't find details for DVB channel %s"), channel_name); destroy_channels_hash (channels); return FALSE; } }
gboolean set_properties_for_channel (GstElement * dvbbasebin, const gchar * channel_name, GError ** error) { gboolean ret = FALSE; GHashTable *channels, *params; gchar *filename; gchar *type; const gchar *adapter; filename = g_strdup (g_getenv ("GST_DVB_CHANNELS_CONF")); if (filename == NULL) { filename = g_build_filename (g_get_user_config_dir (), "gstreamer-" GST_API_VERSION, "dvb-channels.conf", NULL); } channels = parse_channels_conf_from_file (dvbbasebin, filename, error); g_free (filename); if (!channels) goto beach; params = g_hash_table_lookup (channels, channel_name); if (!params) goto unknown_channel; g_object_set (dvbbasebin, "program-numbers", g_hash_table_lookup (params, "sid"), NULL); /* check if it is terrestrial or satellite */ adapter = g_getenv ("GST_DVB_ADAPTER"); if (adapter) g_object_set (dvbbasebin, "adapter", atoi (adapter), NULL); g_object_set (dvbbasebin, "frequency", atoi (g_hash_table_lookup (params, "frequency")), NULL); type = g_hash_table_lookup (params, "type"); if (strcmp (type, "terrestrial") == 0) { gchar *val; g_object_set (dvbbasebin, "delsys", SYS_DVBT, NULL); val = g_hash_table_lookup (params, "inversion"); if (strcmp (val, "INVERSION_OFF") == 0) g_object_set (dvbbasebin, "inversion", 0, NULL); else if (strcmp (val, "INVERSION_ON") == 0) g_object_set (dvbbasebin, "inversion", 1, NULL); else g_object_set (dvbbasebin, "inversion", 2, NULL); val = g_hash_table_lookup (params, "bandwidth"); if (strcmp (val, "BANDWIDTH_8_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 0, NULL); else if (strcmp (val, "BANDWIDTH_7_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 1, NULL); else if (strcmp (val, "BANDWIDTH_6_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 2, NULL); else g_object_set (dvbbasebin, "bandwidth", 3, NULL); val = g_hash_table_lookup (params, "code-rate-hp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-hp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-hp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-hp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-hp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-hp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-hp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-hp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-hp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-hp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-hp", 9, NULL); val = g_hash_table_lookup (params, "code-rate-lp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-lp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-lp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-lp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-lp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-lp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-lp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-lp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-lp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-lp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-lp", 9, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QPSK") == 0) g_object_set (dvbbasebin, "modulation", 0, NULL); else if (strcmp (val, "QAM_16") == 0) g_object_set (dvbbasebin, "modulation", 1, NULL); else if (strcmp (val, "QAM_32") == 0) g_object_set (dvbbasebin, "modulation", 2, NULL); else if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_128") == 0) g_object_set (dvbbasebin, "modulation", 4, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else g_object_set (dvbbasebin, "modulation", 6, NULL); val = g_hash_table_lookup (params, "transmission-mode"); if (strcmp (val, "TRANSMISSION_MODE_2K") == 0) g_object_set (dvbbasebin, "trans-mode", 0, NULL); else if (strcmp (val, "TRANSMISSION_MODE_8K") == 0) g_object_set (dvbbasebin, "trans-mode", 1, NULL); else g_object_set (dvbbasebin, "trans-mode", 2, NULL); val = g_hash_table_lookup (params, "guard"); if (strcmp (val, "GUARD_INTERVAL_1_32") == 0) g_object_set (dvbbasebin, "guard", 0, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_16") == 0) g_object_set (dvbbasebin, "guard", 1, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_8") == 0) g_object_set (dvbbasebin, "guard", 2, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_4") == 0) g_object_set (dvbbasebin, "guard", 3, NULL); else g_object_set (dvbbasebin, "guard", 4, NULL); val = g_hash_table_lookup (params, "hierarchy"); if (strcmp (val, "HIERARCHY_NONE") == 0) g_object_set (dvbbasebin, "hierarchy", 0, NULL); else if (strcmp (val, "HIERARCHY_1") == 0) g_object_set (dvbbasebin, "hierarchy", 1, NULL); else if (strcmp (val, "HIERARCHY_2") == 0) g_object_set (dvbbasebin, "hierarchy", 2, NULL); else if (strcmp (val, "HIERARCHY_4") == 0) g_object_set (dvbbasebin, "hierarchy", 3, NULL); else g_object_set (dvbbasebin, "hierarchy", 4, NULL); ret = TRUE; } else if (strcmp (type, "satellite") == 0) { gchar *val; ret = TRUE; g_object_set (dvbbasebin, "delsys", SYS_DVBS, NULL); val = g_hash_table_lookup (params, "polarity"); if (val) g_object_set (dvbbasebin, "polarity", val, NULL); else ret = FALSE; val = g_hash_table_lookup (params, "diseqc-source"); if (val) g_object_set (dvbbasebin, "diseqc-source", atoi (val), NULL); val = g_hash_table_lookup (params, "symbol-rate"); if (val) g_object_set (dvbbasebin, "symbol-rate", atoi (val), NULL); else ret = FALSE; } else if (strcmp (type, "cable") == 0) { gchar *val; g_object_set (dvbbasebin, "delsys", SYS_DVBC_ANNEX_A, NULL); ret = TRUE; val = g_hash_table_lookup (params, "symbol-rate"); if (val) g_object_set (dvbbasebin, "symbol-rate", atoi (val) / 1000, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QPSK") == 0) g_object_set (dvbbasebin, "modulation", 0, NULL); else if (strcmp (val, "QAM_16") == 0) g_object_set (dvbbasebin, "modulation", 1, NULL); else if (strcmp (val, "QAM_32") == 0) g_object_set (dvbbasebin, "modulation", 2, NULL); else if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_128") == 0) g_object_set (dvbbasebin, "modulation", 4, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else g_object_set (dvbbasebin, "modulation", 6, NULL); val = g_hash_table_lookup (params, "code-rate-hp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-hp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-hp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-hp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-hp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-hp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-hp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-hp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-hp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-hp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-hp", 9, NULL); val = g_hash_table_lookup (params, "inversion"); if (strcmp (val, "INVERSION_OFF") == 0) g_object_set (dvbbasebin, "inversion", 0, NULL); else if (strcmp (val, "INVERSION_ON") == 0) g_object_set (dvbbasebin, "inversion", 1, NULL); else g_object_set (dvbbasebin, "inversion", 2, NULL); } else if (strcmp (type, "atsc") == 0) { gchar *val; ret = TRUE; g_object_set (dvbbasebin, "delsys", SYS_ATSC, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else if (strcmp (val, "8VSB") == 0) g_object_set (dvbbasebin, "modulation", 7, NULL); else if (strcmp (val, "16VSB") == 0) g_object_set (dvbbasebin, "modulation", 8, NULL); else ret = FALSE; } destroy_channels_hash (channels); beach: return ret; unknown_channel: { /* FIXME: is channel name guaranteed to be ASCII or UTF-8? */ g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_FOUND, _("Couldn't find details for DVB channel %s"), channel_name); destroy_channels_hash (channels); return FALSE; } }
gboolean set_properties_for_channel (GObject * dvbbasebin, const gchar * channel_name) { gboolean ret = FALSE; GHashTable *channels; gchar *filename; filename = g_strdup (g_getenv ("GST_DVB_CHANNELS_CONF")); if (filename == NULL) { guint major, minor, micro, nano; gst_version (&major, &minor, µ, &nano); filename = g_strdup_printf ("%s/.gstreamer-%d.%d/dvb-channels.conf", g_get_home_dir (), major, minor); } channels = parse_channels_conf_from_file (filename); g_free (filename); if (channels) { GHashTable *params = g_hash_table_lookup (channels, channel_name); if (params) { gchar *type; const gchar *adapter; g_object_set (dvbbasebin, "program-numbers", g_hash_table_lookup (params, "sid"), NULL); /* check if it is terrestrial or satellite */ adapter = g_getenv ("GST_DVB_ADAPTER"); if (adapter) g_object_set (dvbbasebin, "adapter", atoi (adapter), NULL); g_object_set (dvbbasebin, "frequency", atoi (g_hash_table_lookup (params, "frequency")), NULL); type = g_hash_table_lookup (params, "type"); if (strcmp (type, "terrestrial") == 0) { gchar *val; val = g_hash_table_lookup (params, "inversion"); if (strcmp (val, "INVERSION_OFF") == 0) g_object_set (dvbbasebin, "inversion", 0, NULL); else if (strcmp (val, "INVERSION_ON") == 0) g_object_set (dvbbasebin, "inversion", 1, NULL); else g_object_set (dvbbasebin, "inversion", 2, NULL); val = g_hash_table_lookup (params, "bandwidth"); if (strcmp (val, "BANDWIDTH_8_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 0, NULL); else if (strcmp (val, "BANDWIDTH_7_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 1, NULL); else if (strcmp (val, "BANDWIDTH_6_MHZ") == 0) g_object_set (dvbbasebin, "bandwidth", 2, NULL); else g_object_set (dvbbasebin, "bandwidth", 3, NULL); val = g_hash_table_lookup (params, "code-rate-hp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-hp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-hp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-hp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-hp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-hp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-hp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-hp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-hp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-hp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-hp", 9, NULL); val = g_hash_table_lookup (params, "code-rate-lp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-lp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-lp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-lp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-lp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-lp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-lp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-lp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-lp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-lp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-lp", 9, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QPSK") == 0) g_object_set (dvbbasebin, "modulation", 0, NULL); else if (strcmp (val, "QAM_16") == 0) g_object_set (dvbbasebin, "modulation", 1, NULL); else if (strcmp (val, "QAM_32") == 0) g_object_set (dvbbasebin, "modulation", 2, NULL); else if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_128") == 0) g_object_set (dvbbasebin, "modulation", 4, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else g_object_set (dvbbasebin, "modulation", 6, NULL); val = g_hash_table_lookup (params, "transmission-mode"); if (strcmp (val, "TRANSMISSION_MODE_2K") == 0) g_object_set (dvbbasebin, "trans-mode", 0, NULL); else if (strcmp (val, "TRANSMISSION_MODE_8K") == 0) g_object_set (dvbbasebin, "trans-mode", 1, NULL); else g_object_set (dvbbasebin, "trans-mode", 2, NULL); val = g_hash_table_lookup (params, "guard"); if (strcmp (val, "GUARD_INTERVAL_1_32") == 0) g_object_set (dvbbasebin, "guard", 0, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_16") == 0) g_object_set (dvbbasebin, "guard", 1, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_8") == 0) g_object_set (dvbbasebin, "guard", 2, NULL); else if (strcmp (val, "GUARD_INTERVAL_1_4") == 0) g_object_set (dvbbasebin, "guard", 3, NULL); else g_object_set (dvbbasebin, "guard", 4, NULL); val = g_hash_table_lookup (params, "hierarchy"); if (strcmp (val, "HIERARCHY_NONE") == 0) g_object_set (dvbbasebin, "hierarchy", 0, NULL); else if (strcmp (val, "HIERARCHY_1") == 0) g_object_set (dvbbasebin, "hierarchy", 1, NULL); else if (strcmp (val, "HIERARCHY_2") == 0) g_object_set (dvbbasebin, "hierarchy", 2, NULL); else if (strcmp (val, "HIERARCHY_4") == 0) g_object_set (dvbbasebin, "hierarchy", 3, NULL); else g_object_set (dvbbasebin, "hierarchy", 4, NULL); ret = TRUE; } else if (strcmp (type, "satellite") == 0) { gchar *val; ret = TRUE; val = g_hash_table_lookup (params, "polarity"); if (val) g_object_set (dvbbasebin, "polarity", val, NULL); else ret = FALSE; val = g_hash_table_lookup (params, "diseqc-source"); if (val) g_object_set (dvbbasebin, "diseqc-source", atoi (val), NULL); val = g_hash_table_lookup (params, "symbol-rate"); if (val) g_object_set (dvbbasebin, "symbol-rate", atoi (val), NULL); else ret = FALSE; } else if (strcmp (type, "cable") == 0) { gchar *val; ret = TRUE; val = g_hash_table_lookup (params, "symbol-rate"); if (val) g_object_set (dvbbasebin, "symbol-rate", atoi (val) / 1000, NULL); val = g_hash_table_lookup (params, "modulation"); if (strcmp (val, "QPSK") == 0) g_object_set (dvbbasebin, "modulation", 0, NULL); else if (strcmp (val, "QAM_16") == 0) g_object_set (dvbbasebin, "modulation", 1, NULL); else if (strcmp (val, "QAM_32") == 0) g_object_set (dvbbasebin, "modulation", 2, NULL); else if (strcmp (val, "QAM_64") == 0) g_object_set (dvbbasebin, "modulation", 3, NULL); else if (strcmp (val, "QAM_128") == 0) g_object_set (dvbbasebin, "modulation", 4, NULL); else if (strcmp (val, "QAM_256") == 0) g_object_set (dvbbasebin, "modulation", 5, NULL); else g_object_set (dvbbasebin, "modulation", 6, NULL); val = g_hash_table_lookup (params, "code-rate-hp"); if (strcmp (val, "FEC_NONE") == 0) g_object_set (dvbbasebin, "code-rate-hp", 0, NULL); else if (strcmp (val, "FEC_1_2") == 0) g_object_set (dvbbasebin, "code-rate-hp", 1, NULL); else if (strcmp (val, "FEC_2_3") == 0) g_object_set (dvbbasebin, "code-rate-hp", 2, NULL); else if (strcmp (val, "FEC_3_4") == 0) g_object_set (dvbbasebin, "code-rate-hp", 3, NULL); else if (strcmp (val, "FEC_4_5") == 0) g_object_set (dvbbasebin, "code-rate-hp", 4, NULL); else if (strcmp (val, "FEC_5_6") == 0) g_object_set (dvbbasebin, "code-rate-hp", 5, NULL); else if (strcmp (val, "FEC_6_7") == 0) g_object_set (dvbbasebin, "code-rate-hp", 6, NULL); else if (strcmp (val, "FEC_7_8") == 0) g_object_set (dvbbasebin, "code-rate-hp", 7, NULL); else if (strcmp (val, "FEC_8_9") == 0) g_object_set (dvbbasebin, "code-rate-hp", 8, NULL); else g_object_set (dvbbasebin, "code-rate-hp", 9, NULL); val = g_hash_table_lookup (params, "inversion"); if (strcmp (val, "INVERSION_OFF") == 0) g_object_set (dvbbasebin, "inversion", 0, NULL); else if (strcmp (val, "INVERSION_ON") == 0) g_object_set (dvbbasebin, "inversion", 1, NULL); else g_object_set (dvbbasebin, "inversion", 2, NULL); } } destroy_channels_hash (channels); } return ret; }