From 48ea4b565dddfdc52e5ff3b5b235d3643693110a Mon Sep 17 00:00:00 2001 From: "Joshua M. Doe" Date: Thu, 28 Jun 2012 14:53:16 -0400 Subject: [PATCH] niimaq: more cleanup, rely more on base and video libraries --- sys/niimaq/gstniimaq.c | 107 ++++------------------------------------- sys/niimaq/gstniimaq.h | 7 --- 2 files changed, 10 insertions(+), 104 deletions(-) diff --git a/sys/niimaq/gstniimaq.c b/sys/niimaq/gstniimaq.c index f185de2..bf206c8 100644 --- a/sys/niimaq/gstniimaq.c +++ b/sys/niimaq/gstniimaq.c @@ -59,7 +59,6 @@ enum PROP_INTERFACE, PROP_TIMESTAMP_OFFSET, PROP_BUFSIZE - /* FILL ME */ }; #define DEFAULT_PROP_INTERFACE "img0" @@ -98,9 +97,6 @@ static GstFlowReturn gst_niimaqsrc_create (GstPushSrc * psrc, GstBuffer ** buffer); /* GstNiImaq methods */ -static gboolean gst_niimaqsrc_parse_caps (const GstCaps * caps, - gint * width, gint * height, gint * depth, gint * bpp); - static GstCaps *gst_niimaqsrc_get_cam_caps (GstNiImaqSrc * src); static void gst_niimaqsrc_close_interface (GstNiImaqSrc * niimaqsrc); @@ -498,7 +494,6 @@ gst_niimaqsrc_init (GstNiImaqSrc * niimaqsrc, GstNiImaqSrcClass * g_class) /* initialize member variables */ niimaqsrc->timestamp_offset = 0; - niimaqsrc->caps = NULL; niimaqsrc->bufsize = 10; niimaqsrc->n_frames = 0; niimaqsrc->cumbufnum = 0; @@ -546,11 +541,6 @@ gst_niimaqsrc_dispose (GObject * object) niimaqsrc->start_time = NULL; } - if (niimaqsrc->caps) { - gst_caps_unref (niimaqsrc->caps); - niimaqsrc->caps = NULL; - } - /* chain dispose fuction of parent class */ G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -610,48 +600,26 @@ gst_niimaqsrc_get_caps (GstBaseSrc * bsrc) GST_DEBUG_OBJECT (bsrc, "Entering function get_caps"); - /* return template caps if we don't know the actual camera caps */ - if (!niimaqsrc->caps) { + /* return template caps if the session hasn't started yet */ + if (!niimaqsrc->sid) { return gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD (niimaqsrc))); } - return gst_caps_copy (niimaqsrc->caps); + return gst_niimaqsrc_get_cam_caps (niimaqsrc); } static gboolean gst_niimaqsrc_set_caps (GstBaseSrc * bsrc, GstCaps * caps) { - + GstNiImaqSrc *niimaqsrc = GST_NIIMAQSRC (bsrc); gboolean res = TRUE; - GstNiImaqSrc *niimaqsrc; - gint width, height; - gint bpp, depth; - niimaqsrc = GST_NIIMAQSRC (bsrc); + res = gst_video_get_size_from_caps (caps, &niimaqsrc->framesize); - GST_DEBUG_OBJECT (bsrc, "Entering function set_caps"); - - GST_DEBUG_OBJECT (caps, "are the caps being set"); - - if (niimaqsrc->caps) { - gst_caps_unref (niimaqsrc->caps); - niimaqsrc->caps = gst_caps_copy (caps); - } - - res = - gst_niimaqsrc_parse_caps (niimaqsrc->caps, &width, &height, &depth, &bpp); - - if (res) { - /* looks ok here */ - niimaqsrc->width = width; - niimaqsrc->height = height; - niimaqsrc->depth = depth; - niimaqsrc->bpp = bpp; - niimaqsrc->framesize = width * height * (depth / 8); - } + GST_DEBUG_OBJECT (niimaqsrc, "Caps set, framesize=%d", niimaqsrc->framesize); return res; } @@ -845,9 +813,11 @@ gst_niimaqsrc_create (GstPushSrc * psrc, GstBuffer ** buffer) GstTagList *tl = gst_tag_list_new_full (GST_TAG_DATE_TIME, niimaqsrc->start_time, NULL); GstEvent *e = gst_event_new_tag (tl); - gst_pad_push_event (GST_PAD (GST_BASE_SRC_PAD (niimaqsrc)), e); + GST_DEBUG_OBJECT (niimaqsrc, "Sending start time event: %" GST_PTR_FORMAT, + e); + gst_pad_push_event (GST_BASE_SRC_PAD (niimaqsrc), e); + niimaqsrc->start_time_sent = TRUE; } - return res; error: @@ -856,43 +826,6 @@ error: } } -/** -* gst_niimaqsrc_parse_caps: -* caps: a #GstCaps to parse -* width: -* height: -* depth: -* bpp: -* -* Parses a given caps and sets critical values. -* -* Returns: TRUE on success -*/ -static gboolean -gst_niimaqsrc_parse_caps (const GstCaps * caps, gint * width, gint * height, - gint * depth, gint * bpp) -{ - GstStructure *structure; - gboolean ret; - - if (gst_caps_get_size (caps) < 1) - return FALSE; - - structure = gst_caps_get_structure (caps, 0); - - ret = gst_structure_get (structure, - "width", G_TYPE_INT, width, - "height", G_TYPE_INT, height, - "depth", G_TYPE_INT, depth, "bpp", G_TYPE_INT, bpp, NULL); - - if (!ret) { - GST_DEBUG ("Failed to retrieve width, height, depth, or bpp"); - return FALSE; - } - - return TRUE; -} - /** * gst_niimaqsrc_get_cam_caps: * src: #GstNiImaq instance @@ -1006,21 +939,6 @@ gst_niimaqsrc_start (GstBaseSrc * src) goto error; } - if (niimaqsrc->caps) { - gst_caps_unref (niimaqsrc->caps); - niimaqsrc->caps = NULL; - } - - GST_LOG_OBJECT (niimaqsrc, "Getting caps from camera"); - - /* get caps from camera and set to src pad */ - niimaqsrc->caps = gst_niimaqsrc_get_cam_caps (niimaqsrc); - if (niimaqsrc->caps == NULL) { - GST_ELEMENT_ERROR (niimaqsrc, RESOURCE, FAILED, - ("Failed to get caps from IMAQ"), ("Failed to get caps from IMAQ")); - goto error; - } - GST_LOG_OBJECT (niimaqsrc, "Creating ring with %d buffers", niimaqsrc->bufsize); @@ -1089,11 +1007,6 @@ gst_niimaqsrc_stop (GstBaseSrc * src) gst_niimaqsrc_close_interface (niimaqsrc); - if (niimaqsrc->caps) { - gst_caps_unref (niimaqsrc->caps); - niimaqsrc->caps = NULL; - } - return TRUE; } diff --git a/sys/niimaq/gstniimaq.h b/sys/niimaq/gstniimaq.h index 3bdcb33..2f6bbd0 100644 --- a/sys/niimaq/gstniimaq.h +++ b/sys/niimaq/gstniimaq.h @@ -47,11 +47,6 @@ typedef struct _GstNiImaqSrcClass GstNiImaqSrcClass; struct _GstNiImaqSrc { GstPushSrc element; - /* video state */ - gint width; - gint height; - gint depth; - gint bpp; gint framesize; /* private */ @@ -71,8 +66,6 @@ struct _GstNiImaqSrc { gboolean session_started; - GstCaps *caps; - GSList *timelist; GMutex *frametime_mutex;