Esempio n. 1
0
static gboolean
gst_flxdec_sink_event_handler (GstPad * pad, GstObject * parent,
    GstEvent * event)
{
  GstFlxDec *flxdec;
  gboolean ret;

  flxdec = GST_FLXDEC (parent);

  switch (GST_EVENT_TYPE (event)) {
    case GST_EVENT_SEGMENT:
    {
      GstSegment segment;

      gst_event_copy_segment (event, &segment);
      if (segment.format != GST_FORMAT_TIME) {
        GST_DEBUG_OBJECT (flxdec, "generating TIME segment");
        gst_segment_init (&segment, GST_FORMAT_TIME);
        gst_event_unref (event);
        event = gst_event_new_segment (&segment);
      }
      /* fall-through */
    }
    default:
      ret = gst_pad_event_default (pad, parent, event);
      break;
  }

  return ret;
}
Esempio n. 2
0
static gboolean
gst_flxdec_sink_event_handler (GstPad * pad, GstEvent * event)
{
    GstFlxDec *flxdec;
    gboolean ret;

    flxdec = GST_FLXDEC (gst_pad_get_parent (pad));

    ret = gst_pad_push_event (flxdec->srcpad, event);

    gst_object_unref (flxdec);
    return ret;
}
static GstStateChangeReturn
gst_flxdec_change_state (GstElement * element, GstStateChange transition)
{
  GstFlxDec *flxdec;
  GstStateChangeReturn ret;

  flxdec = GST_FLXDEC (element);

  switch (transition) {
    case GST_STATE_CHANGE_NULL_TO_READY:
      break;
    case GST_STATE_CHANGE_READY_TO_PAUSED:
      gst_adapter_clear (flxdec->adapter);
      flxdec->state = GST_FLXDEC_READ_HEADER;
      gst_segment_init (&flxdec->segment, GST_FORMAT_UNDEFINED);
      flxdec->need_segment = TRUE;
      break;
    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
      break;
    default:
      break;
  }

  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);

  switch (transition) {
    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
      break;
    case GST_STATE_CHANGE_PAUSED_TO_READY:
      if (flxdec->frame_data) {
        g_free (flxdec->frame_data);
        flxdec->frame_data = NULL;
      }
      if (flxdec->delta_data) {
        g_free (flxdec->delta_data);
        flxdec->delta_data = NULL;
      }
      if (flxdec->converter) {
        flx_colorspace_converter_destroy (flxdec->converter);
        flxdec->converter = NULL;
      }
      break;
    case GST_STATE_CHANGE_READY_TO_NULL:
      break;
    default:
      break;
  }
  return ret;
}
Esempio n. 4
0
static GstStateChangeReturn
gst_flxdec_change_state (GstElement * element, GstStateChange transition)
{
    GstFlxDec *flxdec;
    GstStateChangeReturn ret;

    flxdec = GST_FLXDEC (element);

    switch (transition) {
    case GST_STATE_CHANGE_NULL_TO_READY:
        break;
    case GST_STATE_CHANGE_READY_TO_PAUSED:
        gst_adapter_clear (flxdec->adapter);
        flxdec->state = GST_FLXDEC_READ_HEADER;
        break;
    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
        break;
    default:
        break;
    }

    ret = parent_class->change_state (element, transition);

    switch (transition) {
    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
        break;
    case GST_STATE_CHANGE_PAUSED_TO_READY:
        if (flxdec->frame) {
            gst_buffer_unref (flxdec->frame);
            flxdec->frame = NULL;
        }
        if (flxdec->delta) {
            gst_buffer_unref (flxdec->delta);
            flxdec->delta = NULL;
        }
        break;
    case GST_STATE_CHANGE_READY_TO_NULL:
        break;
    default:
        break;
    }
    return ret;
}
static gboolean
gst_flxdec_sink_event_handler (GstPad * pad, GstObject * parent,
    GstEvent * event)
{
  GstFlxDec *flxdec;
  gboolean ret;

  flxdec = GST_FLXDEC (parent);

  switch (GST_EVENT_TYPE (event)) {
    case GST_EVENT_SEGMENT:
    {
      gst_event_copy_segment (event, &flxdec->segment);
      if (flxdec->segment.format != GST_FORMAT_TIME) {
        GST_DEBUG_OBJECT (flxdec, "generating TIME segment");
        gst_segment_init (&flxdec->segment, GST_FORMAT_TIME);
        gst_event_unref (event);
        event = gst_event_new_segment (&flxdec->segment);
      }

      if (gst_pad_has_current_caps (flxdec->srcpad)) {
        ret = gst_pad_event_default (pad, parent, event);
      } else {
        flxdec->need_segment = TRUE;
        gst_event_unref (event);
        ret = TRUE;
      }
      break;
    }
    case GST_EVENT_FLUSH_STOP:
      gst_segment_init (&flxdec->segment, GST_FORMAT_UNDEFINED);
      ret = gst_pad_event_default (pad, parent, event);
      break;
    default:
      ret = gst_pad_event_default (pad, parent, event);
      break;
  }

  return ret;
}