mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
dvb: src: consolidate tuning stats gathering
Additionally: drop unneeded fe_fd variable.
This commit is contained in:
parent
da44d1f0a9
commit
43335d31c6
1 changed files with 31 additions and 28 deletions
|
@ -253,7 +253,8 @@ enum
|
||||||
#define DEFAULT_INTERLEAVING 0
|
#define DEFAULT_INTERLEAVING 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void gst_dvbsrc_output_frontend_stats (GstDvbSrc * src);
|
static gboolean gst_dvbsrc_output_frontend_stats (GstDvbSrc * src,
|
||||||
|
fe_status_t * status);
|
||||||
|
|
||||||
#define GST_TYPE_DVBSRC_CODE_RATE (gst_dvbsrc_code_rate_get_type ())
|
#define GST_TYPE_DVBSRC_CODE_RATE (gst_dvbsrc_code_rate_get_type ())
|
||||||
static GType
|
static GType
|
||||||
|
@ -1931,6 +1932,7 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf)
|
||||||
gint buffer_size;
|
gint buffer_size;
|
||||||
GstFlowReturn retval = GST_FLOW_ERROR;
|
GstFlowReturn retval = GST_FLOW_ERROR;
|
||||||
GstDvbSrc *object;
|
GstDvbSrc *object;
|
||||||
|
fe_status_t status;
|
||||||
|
|
||||||
object = GST_DVBSRC (element);
|
object = GST_DVBSRC (element);
|
||||||
GST_LOG ("fd_dvr: %d", object->fd_dvr);
|
GST_LOG ("fd_dvr: %d", object->fd_dvr);
|
||||||
|
@ -1948,7 +1950,7 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf)
|
||||||
|
|
||||||
if (object->stats_interval &&
|
if (object->stats_interval &&
|
||||||
++object->stats_counter == object->stats_interval) {
|
++object->stats_counter == object->stats_interval) {
|
||||||
gst_dvbsrc_output_frontend_stats (object);
|
gst_dvbsrc_output_frontend_stats (object, &status);
|
||||||
object->stats_counter = 0;
|
object->stats_counter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2178,55 +2180,60 @@ gst_dvbsrc_do_tune (GstDvbSrc * src)
|
||||||
gst_dvbsrc_tune (src);
|
gst_dvbsrc_tune (src);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
gst_dvbsrc_output_frontend_stats (GstDvbSrc * src)
|
gst_dvbsrc_output_frontend_stats (GstDvbSrc * src, fe_status_t * status)
|
||||||
{
|
{
|
||||||
fe_status_t status;
|
|
||||||
guint16 snr, signal;
|
guint16 snr, signal;
|
||||||
guint32 ber, bad_blks;
|
guint32 ber, bad_blks;
|
||||||
GstMessage *message;
|
GstMessage *message;
|
||||||
GstStructure *structure;
|
GstStructure *structure;
|
||||||
int fe_fd = src->fd_frontend;
|
|
||||||
gint err;
|
gint err;
|
||||||
|
|
||||||
LOOP_WHILE_EINTR (err, ioctl (fe_fd, FE_READ_STATUS, &status));
|
errno = 0;
|
||||||
if (!err) {
|
|
||||||
structure = gst_structure_new ("dvb-frontend-stats",
|
LOOP_WHILE_EINTR (err, ioctl (src->fd_frontend, FE_READ_STATUS, status));
|
||||||
"status", G_TYPE_INT, status,
|
if (err) {
|
||||||
"lock", G_TYPE_BOOLEAN, status & FE_HAS_LOCK, NULL);
|
GST_ERROR_OBJECT (src, "Failed querying frontend for tuning status"
|
||||||
} else {
|
" %s (%d)", g_strerror (errno), errno);
|
||||||
GST_ERROR_OBJECT (src, "Error getting frontend status: '%s'",
|
return FALSE;
|
||||||
g_strerror (errno));
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
errno = 0;
|
structure = gst_structure_new ("dvb-frontend-stats",
|
||||||
LOOP_WHILE_EINTR (err, ioctl (fe_fd, FE_READ_SIGNAL_STRENGTH, &signal));
|
"status", G_TYPE_INT, status,
|
||||||
|
"lock", G_TYPE_BOOLEAN, *status & FE_HAS_LOCK, NULL);
|
||||||
|
|
||||||
|
LOOP_WHILE_EINTR (err, ioctl (src->fd_frontend, FE_READ_SIGNAL_STRENGTH,
|
||||||
|
&signal));
|
||||||
if (!err)
|
if (!err)
|
||||||
gst_structure_set (structure, "signal", G_TYPE_INT, signal, NULL);
|
gst_structure_set (structure, "signal", G_TYPE_INT, signal, NULL);
|
||||||
|
|
||||||
LOOP_WHILE_EINTR (err, ioctl (fe_fd, FE_READ_SNR, &snr));
|
LOOP_WHILE_EINTR (err, ioctl (src->fd_frontend, FE_READ_SNR, &snr));
|
||||||
if (!err)
|
if (!err)
|
||||||
gst_structure_set (structure, "snr", G_TYPE_INT, snr, NULL);
|
gst_structure_set (structure, "snr", G_TYPE_INT, snr, NULL);
|
||||||
|
|
||||||
LOOP_WHILE_EINTR (err, ioctl (fe_fd, FE_READ_BER, &ber));
|
LOOP_WHILE_EINTR (err, ioctl (src->fd_frontend, FE_READ_BER, &ber));
|
||||||
if (!err)
|
if (!err)
|
||||||
gst_structure_set (structure, "ber", G_TYPE_INT, ber, NULL);
|
gst_structure_set (structure, "ber", G_TYPE_INT, ber, NULL);
|
||||||
|
|
||||||
LOOP_WHILE_EINTR (err, ioctl (fe_fd, FE_READ_UNCORRECTED_BLOCKS, &bad_blks));
|
LOOP_WHILE_EINTR (err, ioctl (src->fd_frontend, FE_READ_UNCORRECTED_BLOCKS,
|
||||||
|
&bad_blks));
|
||||||
if (!err)
|
if (!err)
|
||||||
gst_structure_set (structure, "unc", G_TYPE_INT, bad_blks, NULL);
|
gst_structure_set (structure, "unc", G_TYPE_INT, bad_blks, NULL);
|
||||||
|
|
||||||
if (errno)
|
if (errno) {
|
||||||
GST_WARNING_OBJECT (src,
|
GST_WARNING_OBJECT (src,
|
||||||
"There were errors getting frontend status information: '%s'",
|
"There were errors getting frontend status information: '%s'",
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
|
}
|
||||||
|
|
||||||
GST_INFO_OBJECT (src, "Frontend stats: %" GST_PTR_FORMAT, structure);
|
GST_INFO_OBJECT (src, "Frontend stats: %" GST_PTR_FORMAT, structure);
|
||||||
message = gst_message_new_element (GST_OBJECT (src), structure);
|
message = gst_message_new_element (GST_OBJECT (src), structure);
|
||||||
gst_element_post_message (GST_ELEMENT (src), message);
|
gst_element_post_message (GST_ELEMENT (src), message);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
diseqc_send_msg (int fd, fe_sec_voltage_t v, struct dvb_diseqc_master_cmd *cmd,
|
diseqc_send_msg (int fd, fe_sec_voltage_t v, struct dvb_diseqc_master_cmd *cmd,
|
||||||
fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b)
|
fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b)
|
||||||
|
@ -2374,14 +2381,10 @@ gst_dvbsrc_tune_fe (GstDvbSrc * object)
|
||||||
|
|
||||||
/* signal locking loop */
|
/* signal locking loop */
|
||||||
do {
|
do {
|
||||||
LOOP_WHILE_EINTR (err, ioctl (object->fd_frontend, FE_READ_STATUS,
|
|
||||||
&status));
|
if (!gst_dvbsrc_output_frontend_stats (object, &status))
|
||||||
if (err) {
|
|
||||||
GST_WARNING_OBJECT (object, "Failed querying frontend for tuning status"
|
|
||||||
" %s (%d)", g_strerror (errno), errno);
|
|
||||||
goto fail_with_signal;
|
goto fail_with_signal;
|
||||||
}
|
|
||||||
gst_dvbsrc_output_frontend_stats (object);
|
|
||||||
/* keep retrying forever if tuning_timeout = 0 */
|
/* keep retrying forever if tuning_timeout = 0 */
|
||||||
if (object->tuning_timeout)
|
if (object->tuning_timeout)
|
||||||
elapsed_time = GST_CLOCK_DIFF (start, gst_util_get_timestamp ());
|
elapsed_time = GST_CLOCK_DIFF (start, gst_util_get_timestamp ());
|
||||||
|
|
Loading…
Reference in a new issue