Exemple #1
0
static gboolean
gst_raw_parse_sink_activatepull (GstPad * sinkpad, gboolean active)
{
  GstRawParse *rp = GST_RAW_PARSE (gst_pad_get_parent (sinkpad));
  gboolean result;

  if (active) {
    GstFormat format;
    gint64 duration;

    /* get the duration in bytes */
    format = GST_FORMAT_BYTES;
    result = gst_pad_query_peer_duration (sinkpad, &format, &duration);
    if (result) {
      GST_DEBUG_OBJECT (rp, "got duration %" GST_TIME_FORMAT,
          GST_TIME_ARGS (duration));
      rp->upstream_length = duration;
      /* convert to time */
      gst_raw_parse_convert (rp, format, duration, GST_FORMAT_TIME, &duration);
    } else {
      rp->upstream_length = -1;
      duration = -1;
    }
    gst_segment_set_duration (&rp->segment, GST_FORMAT_TIME, duration);

    result = gst_raw_parse_handle_seek_pull (rp, NULL);
  } else {
    result = gst_pad_stop_task (sinkpad);
  }

  gst_object_unref (rp);

  return result;
}
static gboolean
gst_raw_parse_sink_activatemode (GstPad * sinkpad, GstObject * parent,
    GstPadMode mode, gboolean active)
{
  GstRawParse *rp = GST_RAW_PARSE (parent);
  gboolean result;

  switch (mode) {
    case GST_PAD_MODE_PULL:
      if (active) {
        GstFormat format;
        gint64 duration;

        /* get the duration in bytes */
        format = GST_FORMAT_BYTES;
        result = gst_pad_peer_query_duration (sinkpad, format, &duration);
        if (result) {
          GST_DEBUG_OBJECT (rp, "got duration %" GST_TIME_FORMAT,
              GST_TIME_ARGS (duration));
          rp->upstream_length = duration;
          /* convert to time */
          gst_raw_parse_convert (rp, format, duration, GST_FORMAT_TIME,
              &duration);
        } else {
          rp->upstream_length = -1;
          duration = -1;
        }
        rp->segment.duration = duration;

        rp->push_stream_start = TRUE;

        result = gst_raw_parse_handle_seek_pull (rp, NULL);
        rp->mode = mode;
      } else {
        result = gst_pad_stop_task (sinkpad);
      }
      return result;
    case GST_PAD_MODE_PUSH:
      rp->mode = mode;
      return TRUE;
    default:
      return FALSE;
  }
}
static gboolean
gst_raw_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
  GstRawParse *rp = GST_RAW_PARSE (parent);
  gboolean ret;

  switch (GST_EVENT_TYPE (event)) {
    case GST_EVENT_SEEK:
      if (rp->mode == GST_PAD_MODE_PUSH)
        ret = gst_raw_parse_handle_seek_push (rp, event);
      else
        ret = gst_raw_parse_handle_seek_pull (rp, event);
      break;
    default:
      ret = gst_pad_event_default (rp->srcpad, parent, event);
      break;
  }

  return ret;
}
Exemple #4
0
static gboolean
gst_raw_parse_src_event (GstPad * pad, GstEvent * event)
{
  GstRawParse *rp = GST_RAW_PARSE (gst_pad_get_parent (pad));
  gboolean ret;

  switch (GST_EVENT_TYPE (event)) {
    case GST_EVENT_SEEK:
      if (rp->mode == GST_ACTIVATE_PUSH)
        ret = gst_raw_parse_handle_seek_push (rp, event);
      else
        ret = gst_raw_parse_handle_seek_pull (rp, event);
      break;
    default:
      ret = gst_pad_event_default (rp->srcpad, event);
      break;
  }

  gst_object_unref (rp);

  return ret;
}