static GstFlowReturn gst_jp2k_decimator_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * inbuf) { GstJP2kDecimator *self = GST_JP2K_DECIMATOR (parent); GstFlowReturn ret; GstBuffer *outbuf = NULL; GST_LOG_OBJECT (pad, "Handling inbuf with timestamp %" GST_TIME_FORMAT " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_PTS (inbuf)), GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf))); if (self->max_layers == 0 && self->max_decomposition_levels == -1) { outbuf = inbuf; inbuf = NULL; ret = GST_FLOW_OK; } else { ret = gst_jp2k_decimator_decimate_jpc (self, inbuf, &outbuf); } if (G_UNLIKELY (ret != GST_FLOW_OK)) return ret; ret = gst_pad_push (self->srcpad, outbuf); return ret; }
static gboolean gst_jp2k_decimator_sink_setcaps (GstPad * pad, GstCaps * caps) { GstJP2kDecimator *self = GST_JP2K_DECIMATOR (gst_pad_get_parent (pad)); gboolean ret; GST_DEBUG_OBJECT (pad, "Setting caps: %" GST_PTR_FORMAT, caps); ret = gst_pad_set_caps (self->srcpad, caps); gst_object_unref (self); return ret; }
static gboolean gst_jp2k_decimator_event (GstPad * pad, GstEvent * event) { GstJP2kDecimator *self = GST_JP2K_DECIMATOR (gst_pad_get_parent (pad)); GstPad *otherpad; gboolean ret; GST_LOG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event)); otherpad = (pad == self->srcpad) ? self->sinkpad : self->srcpad; ret = gst_pad_push_event (otherpad, event); gst_object_unref (self); return ret; }
static gboolean gst_jp2k_decimator_query (GstPad * pad, GstQuery * query) { GstJP2kDecimator *self = GST_JP2K_DECIMATOR (gst_pad_get_parent (pad)); gboolean ret; GstPad *otherpad; otherpad = (pad == self->srcpad) ? self->sinkpad : self->srcpad; GST_LOG_OBJECT (pad, "Handling query of type '%s'", gst_query_type_get_name (GST_QUERY_TYPE (query))); ret = gst_pad_peer_query (otherpad, query); gst_object_unref (self); return ret; }
static void gst_jp2k_decimator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstJP2kDecimator *self = GST_JP2K_DECIMATOR (object); switch (prop_id) { case PROP_MAX_LAYERS: g_value_set_int (value, self->max_layers); break; case PROP_MAX_DECOMPOSITION_LEVELS: g_value_set_int (value, self->max_decomposition_levels); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static const GstQueryType * gst_jp2k_decimator_query_type (GstPad * pad) { GstJP2kDecimator *self = GST_JP2K_DECIMATOR (gst_pad_get_parent (pad)); GstPad *otherpad, *peer; const GstQueryType *types = NULL; otherpad = (pad == self->srcpad) ? self->sinkpad : self->srcpad; peer = gst_pad_get_peer (otherpad); if (peer) { types = gst_pad_get_query_types (peer); gst_object_unref (peer); } gst_object_unref (self); return types; }
static GstCaps * gst_jp2k_decimator_getcaps (GstPad * pad) { GstJP2kDecimator *self = GST_JP2K_DECIMATOR (gst_pad_get_parent (pad)); GstPad *otherpad; GstCaps *tmp, *ret; otherpad = (pad == self->srcpad) ? self->sinkpad : self->srcpad; tmp = gst_pad_peer_get_caps_reffed (otherpad); if (tmp) { ret = gst_caps_intersect (tmp, gst_pad_get_pad_template_caps (pad)); gst_caps_unref (tmp); } else { ret = gst_caps_copy (gst_pad_get_pad_template_caps (pad)); } gst_object_unref (self); GST_LOG_OBJECT (pad, "Returning caps: %" GST_PTR_FORMAT, ret); return ret; }