mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-04 05:22:30 +00:00
dvbsrc: make slof/lof1/lof2 settable properties
Allows proper tuning around high/low band boundaries when using non "standard" LNBs. Not all LNBs (Low noise block down converters) are made equal. This is particularly true for universal LNBFs, where, even though there are seemingly standard values for the local oscillator frequencies, these can vary from manufacturer to manufacturer and LNB model. Change also proxies the new LNB properties in dvbbasebin. https://bugzilla.gnome.org/show_bug.cgi?id=732818
This commit is contained in:
parent
13c63154b0
commit
8391112af5
3 changed files with 73 additions and 15 deletions
|
@ -79,8 +79,10 @@ enum
|
||||||
PROP_PILOT,
|
PROP_PILOT,
|
||||||
PROP_ROLLOFF,
|
PROP_ROLLOFF,
|
||||||
PROP_STREAM_ID,
|
PROP_STREAM_ID,
|
||||||
PROP_BANDWIDTH_HZ
|
PROP_BANDWIDTH_HZ,
|
||||||
/* FILL ME */
|
PROP_LNB_SLOF,
|
||||||
|
PROP_LNB_LOF1,
|
||||||
|
PROP_LNB_LOF2
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -267,6 +269,9 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass)
|
||||||
{PROP_ROLLOFF, "rolloff"},
|
{PROP_ROLLOFF, "rolloff"},
|
||||||
{PROP_STREAM_ID, "stream-id"},
|
{PROP_STREAM_ID, "stream-id"},
|
||||||
{PROP_BANDWIDTH_HZ, "bandwidth-hz"},
|
{PROP_BANDWIDTH_HZ, "bandwidth-hz"},
|
||||||
|
{PROP_LNB_SLOF, "lnb-slof"},
|
||||||
|
{PROP_LNB_LOF1, "lnb-lof1"},
|
||||||
|
{PROP_LNB_LOF2, "lnb-lof2"},
|
||||||
{0, NULL}
|
{0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -561,6 +566,9 @@ dvb_base_bin_set_property (GObject * object, guint prop_id,
|
||||||
case PROP_ROLLOFF:
|
case PROP_ROLLOFF:
|
||||||
case PROP_STREAM_ID:
|
case PROP_STREAM_ID:
|
||||||
case PROP_BANDWIDTH_HZ:
|
case PROP_BANDWIDTH_HZ:
|
||||||
|
case PROP_LNB_SLOF:
|
||||||
|
case PROP_LNB_LOF1:
|
||||||
|
case PROP_LNB_LOF2:
|
||||||
/* FIXME: check if we can tune (state < PLAYING || program-numbers == "") */
|
/* FIXME: check if we can tune (state < PLAYING || program-numbers == "") */
|
||||||
g_object_set_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
|
g_object_set_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
|
||||||
break;
|
break;
|
||||||
|
@ -600,6 +608,9 @@ dvb_base_bin_get_property (GObject * object, guint prop_id,
|
||||||
case PROP_ROLLOFF:
|
case PROP_ROLLOFF:
|
||||||
case PROP_STREAM_ID:
|
case PROP_STREAM_ID:
|
||||||
case PROP_BANDWIDTH_HZ:
|
case PROP_BANDWIDTH_HZ:
|
||||||
|
case PROP_LNB_SLOF:
|
||||||
|
case PROP_LNB_LOF1:
|
||||||
|
case PROP_LNB_LOF2:
|
||||||
g_object_get_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
|
g_object_get_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
|
||||||
break;
|
break;
|
||||||
case PROP_PROGRAM_NUMBERS:
|
case PROP_PROGRAM_NUMBERS:
|
||||||
|
|
|
@ -143,10 +143,6 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (gstdvbsrc_debug);
|
GST_DEBUG_CATEGORY_STATIC (gstdvbsrc_debug);
|
||||||
#define GST_CAT_DEFAULT (gstdvbsrc_debug)
|
#define GST_CAT_DEFAULT (gstdvbsrc_debug)
|
||||||
|
|
||||||
#define SLOF (11700*1000UL)
|
|
||||||
#define LOF1 (9750*1000UL)
|
|
||||||
#define LOF2 (10600*1000UL)
|
|
||||||
|
|
||||||
#define NUM_DTV_PROPS 16
|
#define NUM_DTV_PROPS 16
|
||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
|
@ -186,7 +182,10 @@ enum
|
||||||
ARG_DVBSRC_PILOT,
|
ARG_DVBSRC_PILOT,
|
||||||
ARG_DVBSRC_ROLLOFF,
|
ARG_DVBSRC_ROLLOFF,
|
||||||
ARG_DVBSRC_STREAM_ID,
|
ARG_DVBSRC_STREAM_ID,
|
||||||
ARG_DVBSRC_BANDWIDTH_HZ
|
ARG_DVBSRC_BANDWIDTH_HZ,
|
||||||
|
ARG_DVBSRC_LNB_SLOF,
|
||||||
|
ARG_DVBSRC_LNB_LOF1,
|
||||||
|
ARG_DVBSRC_LNB_LOF2
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_ADAPTER 0
|
#define DEFAULT_ADAPTER 0
|
||||||
|
@ -214,6 +213,9 @@ enum
|
||||||
#define DEFAULT_PILOT PILOT_AUTO
|
#define DEFAULT_PILOT PILOT_AUTO
|
||||||
#define DEFAULT_ROLLOFF ROLLOFF_AUTO
|
#define DEFAULT_ROLLOFF ROLLOFF_AUTO
|
||||||
#define DEFAULT_STREAM_ID NO_STREAM_ID_FILTER
|
#define DEFAULT_STREAM_ID NO_STREAM_ID_FILTER
|
||||||
|
#define DEFAULT_LNB_SLOF (11700*1000UL)
|
||||||
|
#define DEFAULT_LNB_LOF1 (9750*1000UL)
|
||||||
|
#define DEFAULT_LNB_LOF2 (10600*1000UL)
|
||||||
|
|
||||||
static void gst_dvbsrc_output_frontend_stats (GstDvbSrc * src);
|
static void gst_dvbsrc_output_frontend_stats (GstDvbSrc * src);
|
||||||
|
|
||||||
|
@ -671,6 +673,23 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass)
|
||||||
"(DVB-T2 and DVB-S2 max 255, ISDB max 65535) Stream ID "
|
"(DVB-T2 and DVB-S2 max 255, ISDB max 65535) Stream ID "
|
||||||
"(-1 = disabled)", -1, 65535, DEFAULT_STREAM_ID, G_PARAM_READWRITE));
|
"(-1 = disabled)", -1, 65535, DEFAULT_STREAM_ID, G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
/* LNB properties (Satellite distribution standards) */
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, ARG_DVBSRC_LNB_SLOF,
|
||||||
|
g_param_spec_uint ("lnb-slof", "Tuning Timeout",
|
||||||
|
"LNB's Upper bound for low band reception (kHz)",
|
||||||
|
0, G_MAXUINT, DEFAULT_LNB_SLOF, G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, ARG_DVBSRC_LNB_LOF1,
|
||||||
|
g_param_spec_uint ("lnb-lof1", "Low band local oscillator frequency",
|
||||||
|
"LNB's Local oscillator frequency used for low band reception (kHz)",
|
||||||
|
0, G_MAXUINT, DEFAULT_LNB_LOF1, G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, ARG_DVBSRC_LNB_LOF2,
|
||||||
|
g_param_spec_uint ("lnb-lof2", "High band local oscillator frequency",
|
||||||
|
"LNB's Local oscillator frequency used for high band reception (kHz)",
|
||||||
|
0, G_MAXUINT, DEFAULT_LNB_LOF2, G_PARAM_READWRITE));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstDvbSrc::tuning-start:
|
* GstDvbSrc::tuning-start:
|
||||||
* @gstdvbsrc: the element on which the signal is emitted
|
* @gstdvbsrc: the element on which the signal is emitted
|
||||||
|
@ -753,6 +772,9 @@ gst_dvbsrc_init (GstDvbSrc * object)
|
||||||
object->pilot = DEFAULT_PILOT;
|
object->pilot = DEFAULT_PILOT;
|
||||||
object->rolloff = DEFAULT_ROLLOFF;
|
object->rolloff = DEFAULT_ROLLOFF;
|
||||||
object->stream_id = DEFAULT_STREAM_ID;
|
object->stream_id = DEFAULT_STREAM_ID;
|
||||||
|
object->lnb_slof = DEFAULT_LNB_SLOF;
|
||||||
|
object->lnb_lof1 = DEFAULT_LNB_LOF1;
|
||||||
|
object->lnb_lof2 = DEFAULT_LNB_LOF2;
|
||||||
|
|
||||||
g_mutex_init (&object->tune_mutex);
|
g_mutex_init (&object->tune_mutex);
|
||||||
object->timeout = DEFAULT_TIMEOUT;
|
object->timeout = DEFAULT_TIMEOUT;
|
||||||
|
@ -964,6 +986,21 @@ gst_dvbsrc_set_property (GObject * _object, guint prop_id,
|
||||||
case ARG_DVBSRC_STREAM_ID:
|
case ARG_DVBSRC_STREAM_ID:
|
||||||
object->stream_id = g_value_get_int (value);
|
object->stream_id = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
|
case ARG_DVBSRC_LNB_SLOF:
|
||||||
|
g_mutex_lock (&object->tune_mutex);
|
||||||
|
object->lnb_slof = g_value_get_uint (value);
|
||||||
|
g_mutex_unlock (&object->tune_mutex);
|
||||||
|
break;
|
||||||
|
case ARG_DVBSRC_LNB_LOF1:
|
||||||
|
g_mutex_lock (&object->tune_mutex);
|
||||||
|
object->lnb_lof1 = g_value_get_uint (value);
|
||||||
|
g_mutex_unlock (&object->tune_mutex);
|
||||||
|
break;
|
||||||
|
case ARG_DVBSRC_LNB_LOF2:
|
||||||
|
g_mutex_lock (&object->tune_mutex);
|
||||||
|
object->lnb_lof2 = g_value_get_uint (value);
|
||||||
|
g_mutex_unlock (&object->tune_mutex);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -1064,6 +1101,15 @@ gst_dvbsrc_get_property (GObject * _object, guint prop_id,
|
||||||
case ARG_DVBSRC_STREAM_ID:
|
case ARG_DVBSRC_STREAM_ID:
|
||||||
g_value_set_int (value, object->stream_id);
|
g_value_set_int (value, object->stream_id);
|
||||||
break;
|
break;
|
||||||
|
case ARG_DVBSRC_LNB_SLOF:
|
||||||
|
g_value_set_uint (value, object->lnb_slof);
|
||||||
|
break;
|
||||||
|
case ARG_DVBSRC_LNB_LOF1:
|
||||||
|
g_value_set_uint (value, object->lnb_lof1);
|
||||||
|
break;
|
||||||
|
case ARG_DVBSRC_LNB_LOF2:
|
||||||
|
g_value_set_uint (value, object->lnb_lof2);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -1822,16 +1868,12 @@ gst_dvbsrc_set_fe_params (GstDvbSrc * object, struct dtv_properties *props)
|
||||||
case SYS_DVBS2:
|
case SYS_DVBS2:
|
||||||
case SYS_TURBO:
|
case SYS_TURBO:
|
||||||
if (freq > 2200000) {
|
if (freq > 2200000) {
|
||||||
/* FIXME: Make SLOF/LOF1/LOF2 seteable props with a sane default.
|
/* this must be an absolute frequency */
|
||||||
* These values shouldn't be fixed because not all universal LNBs
|
if (freq < object->lnb_slof) {
|
||||||
* share the same parameters.
|
freq -= object->lnb_lof1;
|
||||||
*
|
|
||||||
* this must be an absolute frequency */
|
|
||||||
if (freq < SLOF) {
|
|
||||||
freq -= LOF1;
|
|
||||||
object->tone = SEC_TONE_OFF;
|
object->tone = SEC_TONE_OFF;
|
||||||
} else {
|
} else {
|
||||||
freq -= LOF2;
|
freq -= object->lnb_lof2;
|
||||||
object->tone = SEC_TONE_ON;
|
object->tone = SEC_TONE_ON;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,11 @@ struct _GstDvbSrc
|
||||||
gboolean need_unlock;
|
gboolean need_unlock;
|
||||||
|
|
||||||
guint dvb_buffer_size;
|
guint dvb_buffer_size;
|
||||||
|
|
||||||
|
/* LNB properties */
|
||||||
|
unsigned int lnb_slof;
|
||||||
|
unsigned int lnb_lof1;
|
||||||
|
unsigned int lnb_lof2;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstDvbSrcClass
|
struct _GstDvbSrcClass
|
||||||
|
|
Loading…
Reference in a new issue