/** * gst_memory_resize: * @mem: a #GstMemory * @offset: a new offset * @size: a new size * * Resize the memory region. @mem should be writable and offset + size should be * less than the maxsize of @mem. * * #GST_MEMORY_FLAG_ZERO_PREFIXED and #GST_MEMORY_FLAG_ZERO_PADDED will be * cleared when offset or padding is increased respectively. */ void gst_memory_resize (GstMemory * mem, gssize offset, gsize size) { g_return_if_fail (mem != NULL); g_return_if_fail (gst_memory_is_writable (mem)); g_return_if_fail (offset >= 0 || mem->offset >= -offset); g_return_if_fail (size + mem->offset + offset <= mem->maxsize); /* if we increase the prefix, we can't guarantee it is still 0 filled */ if ((offset > 0) && GST_MEMORY_IS_ZERO_PREFIXED (mem)) GST_MEMORY_FLAG_UNSET (mem, GST_MEMORY_FLAG_ZERO_PREFIXED); /* if we increase the padding, we can't guarantee it is still 0 filled */ if ((offset + size < mem->size) && GST_MEMORY_IS_ZERO_PADDED (mem)) GST_MEMORY_FLAG_UNSET (mem, GST_MEMORY_FLAG_ZERO_PADDED); mem->offset += offset; mem->size = size; }
static gboolean gst_v4l2_is_buffer_valid (GstBuffer * buffer, GstV4l2MemoryGroup ** out_group) { GstMemory *mem = gst_buffer_peek_memory (buffer, 0); gboolean valid = FALSE; if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY)) goto done; if (gst_is_dmabuf_memory (mem)) mem = gst_mini_object_get_qdata (GST_MINI_OBJECT (mem), GST_V4L2_MEMORY_QUARK); if (mem && gst_is_v4l2_memory (mem)) { GstV4l2Memory *vmem = (GstV4l2Memory *) mem; GstV4l2MemoryGroup *group = vmem->group; gint i; if (group->n_mem != gst_buffer_n_memory (buffer)) goto done; for (i = 0; i < group->n_mem; i++) { if (group->mem[i] != gst_buffer_peek_memory (buffer, i)) goto done; if (!gst_memory_is_writable (group->mem[i])) goto done; } valid = TRUE; if (out_group) *out_group = group; } done: return valid; }