Esempio n. 1
0
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;
}
Esempio n. 2
0
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;

}
Esempio n. 3
0
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;

}