summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6b8f1ee)
raw | patch | inline | side by side (parent: 6b8f1ee)
author | Alessandro Decina <alessandro.decina@collabora.co.uk> | |
Fri, 20 Jan 2012 10:32:23 +0000 (11:32 +0100) | ||
committer | Alessandro Decina <alessandro.decina@collabora.co.uk> | |
Fri, 20 Jan 2012 11:00:37 +0000 (12:00 +0100) |
src/gstducatibufferpool.c | patch | blob | history | |
src/gstducatibufferpool.h | patch | blob | history | |
src/gstducatividdec.c | patch | blob | history |
index 684b9a383f874d33925067e5f364e1b36d389a95..254d4823e390f6f6f76e89244dd08113560aab45 100644 (file)
GST_BUFFER_DATA (self) = buf;
GST_BUFFER_SIZE (self) = sz;
- gst_buffer_set_caps (GST_BUFFER (self), pool->caps);
+ if (pool->caps)
+ gst_buffer_set_caps (GST_BUFFER (self), pool->caps);
return self;
}
gst_mini_object_new (GST_TYPE_DUCATIBUFFERPOOL);
self->element = gst_object_ref (element);
+ self->caps = NULL;
+ gst_ducati_bufferpool_set_caps (self, caps);
+ self->size = size;
+ self->freelist = NULL;
+ self->lock = g_mutex_new ();
+ self->running = TRUE;
+
+ return self;
+}
+
+void
+gst_ducati_bufferpool_set_caps (GstDucatiBufferPool * self, GstCaps * caps)
+{
+ gst_caps_replace (&self->caps, caps);
if (caps) {
GstStructure *s = gst_caps_get_structure (caps, 0);
self->strided =
!strcmp (gst_structure_get_name (s), "video/x-raw-yuv-strided");
- self->caps = gst_caps_ref (caps);
gst_structure_get_int (s, "width", &self->padded_width);
gst_structure_get_int (s, "height", &self->padded_height);
} else {
self->padded_width = 0;
self->padded_height = 0;
- self->caps = NULL;
self->strided = FALSE;
}
- self->size = size;
- self->freelist = NULL;
- self->lock = g_mutex_new ();
- self->running = TRUE;
-
- return self;
}
/** destroy existing bufferpool */
buf = gst_ducati_buffer_new (self);
}
buf->orig = orig;
+ if (self->caps)
+ gst_buffer_set_caps (GST_BUFFER (buf), self->caps);
}
GST_DUCATI_BUFFERPOOL_UNLOCK (self);
return buf;
}
+
static void
gst_ducati_bufferpool_finalize (GstDucatiBufferPool * self)
{
index 9a2f1abf5069ab35129f5ba51bef402fcb094ca9..45e749a9b6452f127a2cb06369d884637620b609 100644 (file)
GstDucatiBufferPool * gst_ducati_bufferpool_new (GstElement * element, GstCaps * caps, guint size);
void gst_ducati_bufferpool_destroy (GstDucatiBufferPool * pool);
+void gst_ducati_bufferpool_set_caps (GstDucatiBufferPool * self, GstCaps * caps);
GstDucatiBuffer * gst_ducati_bufferpool_get (GstDucatiBufferPool * self, GstBuffer * orig);
#define GST_DUCATI_BUFFERPOOL_LOCK(self) g_mutex_lock ((self)->lock)
diff --git a/src/gstducatividdec.c b/src/gstducatividdec.c
index 7d98d402a83ca8d0c035bdded3bfd3ab6d999fe2..622c2f305ddec83ab6a4f3a6507d6bbb9bcc6262 100644 (file)
--- a/src/gstducatividdec.c
+++ b/src/gstducatividdec.c
caps = gst_caps_make_writable (gst_pad_get_negotiated_caps (self->srcpad));
GST_INFO_OBJECT (self, "changing interlace field in caps");
gst_caps_set_simple (caps, "interlaced", G_TYPE_BOOLEAN, interlaced, NULL);
+ gst_ducati_bufferpool_set_caps (self->pool, caps);
if (!gst_pad_set_caps (self->srcpad, caps)) {
GST_ERROR_OBJECT (self, "downstream didn't want to change interlace mode");
err = XDM_EFAIL;