mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
sys/v4l2/: Fix memory leaks. Small code cleanups : No need for empty _init(). No need to memset instance structures. ...
Original commit message from CVS: * sys/v4l2/gstv4l2object.c: * sys/v4l2/gstv4l2src.c: * sys/v4l2/gstv4l2src.h: * sys/v4l2/v4l2_calls.c: * sys/v4l2/v4l2src_calls.c: Fix memory leaks. Small code cleanups : No need for empty _init(). No need to memset instance structures. Some more FIXME's.
This commit is contained in:
parent
4e2a12368b
commit
2ea5c05241
6 changed files with 39 additions and 16 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2008-08-26 Stefan Kost <ensonic@users.sf.net>
|
||||
|
||||
* sys/v4l2/gstv4l2object.c:
|
||||
* sys/v4l2/gstv4l2src.c:
|
||||
* sys/v4l2/gstv4l2src.h:
|
||||
* sys/v4l2/v4l2_calls.c:
|
||||
* sys/v4l2/v4l2src_calls.c:
|
||||
Fix memory leaks. Small code cleanups : No need for empty _init(). No
|
||||
need to memset instance structures. Some more FIXME's and comments.
|
||||
|
||||
2008-08-26 Stefan Kost <ensonic@users.sf.net>
|
||||
|
||||
* tests/icles/.cvsignore:
|
||||
|
|
|
@ -290,6 +290,12 @@ gst_v4l2_object_destroy (GstV4l2Object * v4l2object)
|
|||
if (v4l2object->videodev)
|
||||
g_free (v4l2object->videodev);
|
||||
|
||||
if (v4l2object->channel)
|
||||
g_free (v4l2object->channel);
|
||||
|
||||
if (v4l2object->norm)
|
||||
g_free (v4l2object->norm);
|
||||
|
||||
g_free (v4l2object);
|
||||
}
|
||||
|
||||
|
|
|
@ -354,6 +354,11 @@ gst_v4l2src_dispose (GObject * object)
|
|||
gst_v4l2src_clear_format_list (v4l2src);
|
||||
}
|
||||
|
||||
if (v4l2src->probed_caps) {
|
||||
gst_caps_unref (v4l2src->probed_caps);
|
||||
}
|
||||
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ struct _GstV4l2Buffer {
|
|||
|
||||
struct v4l2_buffer vbuffer;
|
||||
|
||||
/* FIXME: have GstV4l2Src* instead, as this has GstV4l2BufferPool* */
|
||||
GstV4l2BufferPool *pool;
|
||||
};
|
||||
|
||||
|
|
|
@ -313,8 +313,9 @@ gst_v4l2_fill_lists (GstV4l2Object * v4l2object)
|
|||
channel->label = g_strdup ((const gchar *) control.name);
|
||||
v4l2channel->id = n;
|
||||
|
||||
#if 0 /* FIXME: it will be need just when handling private controls
|
||||
(currently none of base controls are of this type) */
|
||||
#if 0
|
||||
/* FIXME: it will be need just when handling private controls
|
||||
*(currently none of base controls are of this type) */
|
||||
if (control.type == V4L2_CTRL_TYPE_MENU) {
|
||||
struct v4l2_querymenu menu, *mptr;
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@ static GstBufferClass *v4l2buffer_parent_class = NULL;
|
|||
static gboolean
|
||||
gst_v4l2src_get_nearest_size (GstV4l2Src * v4l2src, guint32 pixelformat,
|
||||
gint * width, gint * height);
|
||||
static void gst_v4l2_buffer_pool_destroy (GstV4l2BufferPool * pool);
|
||||
|
||||
static void
|
||||
gst_v4l2_buffer_finalize (GstV4l2Buffer * buffer)
|
||||
|
@ -112,12 +113,6 @@ gst_v4l2_buffer_finalize (GstV4l2Buffer * buffer)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gst_v4l2_buffer_init (GstV4l2Buffer * xvimage, gpointer g_class)
|
||||
{
|
||||
/* NOP */
|
||||
}
|
||||
|
||||
static void
|
||||
gst_v4l2_buffer_class_init (gpointer g_class, gpointer class_data)
|
||||
{
|
||||
|
@ -144,7 +139,7 @@ gst_v4l2_buffer_get_type (void)
|
|||
NULL,
|
||||
sizeof (GstV4l2Buffer),
|
||||
0,
|
||||
(GInstanceInitFunc) gst_v4l2_buffer_init,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
_gst_v4l2_buffer_type = g_type_register_static (GST_TYPE_BUFFER,
|
||||
|
@ -163,9 +158,8 @@ gst_v4l2_buffer_new (GstV4l2BufferPool * pool, guint index, GstCaps * caps)
|
|||
|
||||
GST_LOG ("creating buffer %u, %p in pool %p", index, ret, pool);
|
||||
|
||||
ret->pool = pool;
|
||||
gst_mini_object_ref (GST_MINI_OBJECT (pool));
|
||||
memset (&ret->vbuffer, 0x00, sizeof (ret->vbuffer));
|
||||
ret->pool =
|
||||
(GstV4l2BufferPool *) gst_mini_object_ref (GST_MINI_OBJECT (pool));
|
||||
|
||||
ret->vbuffer.index = index;
|
||||
ret->vbuffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
@ -237,9 +231,11 @@ gst_v4l2_buffer_pool_finalize (GstV4l2BufferPool * pool)
|
|||
if (pool->video_fd >= 0)
|
||||
close (pool->video_fd);
|
||||
|
||||
if (pool->buffers)
|
||||
if (pool->buffers) {
|
||||
g_free (pool->buffers);
|
||||
pool->buffers = NULL;
|
||||
pool->buffers = NULL;
|
||||
}
|
||||
|
||||
GST_MINI_OBJECT_CLASS (buffer_pool_parent_class)->finalize (GST_MINI_OBJECT
|
||||
(pool));
|
||||
}
|
||||
|
@ -326,7 +322,7 @@ buffer_new_failed:
|
|||
{
|
||||
gint errnosave = errno;
|
||||
|
||||
gst_mini_object_unref (GST_MINI_OBJECT (pool));
|
||||
gst_v4l2_buffer_pool_destroy (pool);
|
||||
|
||||
errno = errnosave;
|
||||
|
||||
|
@ -379,10 +375,14 @@ gst_v4l2_buffer_pool_destroy (GstV4l2BufferPool * pool)
|
|||
pool->running = FALSE;
|
||||
g_mutex_unlock (pool->lock);
|
||||
|
||||
GST_DEBUG ("destroy pool");
|
||||
|
||||
/* after this point, no more buffers will be queued or dequeued; no buffer
|
||||
* from pool->buffers that is NULL will be set to a buffer, and no buffer that
|
||||
* is not NULL will be pushed out. */
|
||||
|
||||
/* miniobjects have no dispose, so they can't break ref-cycles, as buffers ref
|
||||
* the pool, we need to unref the buffer to properly finalize te pool */
|
||||
for (n = 0; n < pool->buffer_count; n++) {
|
||||
GstBuffer *buf;
|
||||
|
||||
|
@ -956,7 +956,7 @@ default_frame_sizes:
|
|||
/******************************************************
|
||||
* gst_v4l2src_grab_frame ():
|
||||
* grab a frame for capturing
|
||||
* return value: The captured frame number or -1 on error.
|
||||
* return value: GST_FLOW_OK or GST_FLOW_ERROR
|
||||
******************************************************/
|
||||
GstFlowReturn
|
||||
gst_v4l2src_grab_frame (GstV4l2Src * v4l2src, GstBuffer ** buf)
|
||||
|
|
Loading…
Reference in a new issue