static gboolean gst_dvbsrc_frontend_status (GstDvbSrc * object) { fe_status_t status = 0; gint i; GST_INFO_OBJECT (object, "gst_dvbsrc_frontend_status\n"); if (object->fd_frontend < 0) { GST_ERROR_OBJECT (object, "Trying to get frontend status from not opened device!"); return FALSE; } else GST_INFO_OBJECT (object, "fd-frontend: %d", object->fd_frontend); for (i = 0; i < 15; i++) { usleep (1000000); GST_INFO_OBJECT (object, "."); if (ioctl (object->fd_frontend, FE_READ_STATUS, &status) == -1) { GST_ERROR_OBJECT (object, "Failed reading frontend status."); return FALSE; } gst_dvbsrc_output_frontend_stats (object); if (status & FE_HAS_LOCK) { break; } } if (!(status & FE_HAS_LOCK)) { GST_INFO_OBJECT (object, "Not able to lock to the signal on the given frequency.\n"); return FALSE; } else return TRUE; }
static GstFlowReturn gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf) { gint buffer_size; GstFlowReturn retval = GST_FLOW_ERROR; GstDvbSrc *object; object = GST_DVBSRC (element); GST_LOG ("fd_dvr: %d", object->fd_dvr); //g_object_get(G_OBJECT(object), "blocksize", &buffer_size, NULL); buffer_size = DEFAULT_BUFFER_SIZE; /* device can not be tuned during read */ g_mutex_lock (&object->tune_mutex); if (object->fd_dvr > -1) { /* --- Read TS from DVR device --- */ GST_DEBUG_OBJECT (object, "Reading from DVR device"); retval = gst_dvbsrc_read_device (object, buffer_size, buf); if (object->stats_interval != 0 && ++object->stats_counter == object->stats_interval) { gst_dvbsrc_output_frontend_stats (object); object->stats_counter = 0; } } g_mutex_unlock (&object->tune_mutex); return retval; }
static GstFlowReturn gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf) { gint buffer_size; GstFlowReturn retval = GST_FLOW_ERROR; GstDvbSrc *object; object = GST_DVBSRC (element); GST_LOG ("fd_dvr: %d", object->fd_dvr); //g_object_get(G_OBJECT(object), "blocksize", &buffer_size, NULL); buffer_size = DEFAULT_BUFFER_SIZE; /* device can not be tuned during read */ g_mutex_lock (object->tune_mutex); if (object->fd_dvr > -1) { /* --- Read TS from DVR device --- */ GST_DEBUG_OBJECT (object, "Reading from DVR device"); *buf = read_device (object->fd_dvr, object->adapter_number, object->frontend_number, buffer_size, object); if (*buf != NULL) { GstCaps *caps; retval = GST_FLOW_OK; caps = gst_pad_get_caps (GST_BASE_SRC_PAD (object)); gst_buffer_set_caps (*buf, caps); gst_caps_unref (caps); } else { GST_DEBUG_OBJECT (object, "Failed to read from device"); gst_element_post_message (GST_ELEMENT_CAST (object), gst_message_new_element (GST_OBJECT (object), gst_structure_empty_new ("dvb-read-failure"))); } if (object->stats_interval != 0 && ++object->stats_counter == object->stats_interval) { gst_dvbsrc_output_frontend_stats (object); object->stats_counter = 0; } } g_mutex_unlock (object->tune_mutex); return retval; }