static gboolean gst_v4l2_transform_decide_allocation (GstBaseTransform * trans, GstQuery * query) { GstV4l2Transform *self = GST_V4L2_TRANSFORM (trans); gboolean ret = FALSE; GST_DEBUG_OBJECT (self, "called"); if (gst_v4l2_object_decide_allocation (self->v4l2capture, query)) { GstBufferPool *pool = GST_BUFFER_POOL (self->v4l2capture->pool); ret = GST_BASE_TRANSFORM_CLASS (parent_class)->decide_allocation (trans, query); if (!gst_buffer_pool_set_active (pool, TRUE)) goto activate_failed; } return ret; activate_failed: GST_ELEMENT_ERROR (self, RESOURCE, SETTINGS, ("failed to activate bufferpool"), ("failed to activate bufferpool")); return TRUE; }
static gboolean gst_v4l2_video_dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) { GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (decoder); GstClockTime latency; gboolean ret = FALSE; if (gst_v4l2_object_decide_allocation (self->v4l2capture, query)) ret = GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder, query); latency = self->v4l2capture->min_buffers * self->v4l2capture->duration; gst_video_decoder_set_latency (decoder, latency, latency); return ret; }
static gboolean gst_v4l2src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query) { GstV4l2Src *src = GST_V4L2SRC (bsrc); gboolean ret = TRUE; if (src->pending_set_fmt) { GstCaps *caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (bsrc)); if (!gst_v4l2_object_stop (src->v4l2object)) return FALSE; ret = gst_v4l2src_set_format (src, caps); gst_caps_unref (caps); src->pending_set_fmt = FALSE; } if (ret) { ret = gst_v4l2_object_decide_allocation (src->v4l2object, query); if (ret) ret = GST_BASE_SRC_CLASS (parent_class)->decide_allocation (bsrc, query); } if (ret) { if (!gst_buffer_pool_set_active (src->v4l2object->pool, TRUE)) goto activate_failed; } return ret; activate_failed: { GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (_("Failed to allocate required memory.")), ("Buffer pool activation failed")); return FALSE; } }
static gboolean gst_v4l2src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query) { GstV4l2Src *src = GST_V4L2SRC (bsrc); gboolean ret = FALSE; if (gst_v4l2_object_decide_allocation (src->v4l2object, query)) ret = GST_BASE_SRC_CLASS (parent_class)->decide_allocation (bsrc, query); if (ret) { if (!gst_buffer_pool_set_active (src->v4l2object->pool, TRUE)) goto activate_failed; } return ret; activate_failed: { GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (_("Failed to allocate required memory.")), ("Buffer pool activation failed")); return FALSE; } }
static gboolean gst_v4l2_video_dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) { GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (decoder); GstClockTime latency; gboolean ret = FALSE; if (gst_v4l2_object_decide_allocation (self->v4l2capture, query)) ret = GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder, query); if (GST_CLOCK_TIME_IS_VALID (self->v4l2capture->duration)) { latency = self->v4l2capture->min_buffers * self->v4l2capture->duration; GST_DEBUG_OBJECT (self, "Setting latency: %" GST_TIME_FORMAT " (%" G_GUINT32_FORMAT " * %" G_GUINT64_FORMAT, GST_TIME_ARGS (latency), self->v4l2capture->min_buffers, self->v4l2capture->duration); gst_video_decoder_set_latency (decoder, latency, latency); } else { GST_WARNING_OBJECT (self, "Duration invalid, not setting latency"); } return ret; }