summaryrefslogtreecommitdiff
path: root/gst/camerabin2
diff options
context:
space:
mode:
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>2010-12-07 19:40:28 -0300
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>2010-12-08 15:38:30 -0300
commitb6d5763e05d8dd4067c2c0b4c5f3ac8ac142753a (patch)
tree07903cafe1c9462ae8ec1628adb318215ceedd98 /gst/camerabin2
parent91d8bbd8a151dca3614bcc8343fc7592e325d4d2 (diff)
basecamerasrc: Remove ghostpads
Remove ghost pads from basecamerasrc. Different implementations of camera sources might not use ghostpads and use default pads.
Diffstat (limited to 'gst/camerabin2')
-rw-r--r--gst/camerabin2/gstbasecamerasrc.c41
-rw-r--r--gst/camerabin2/gstbasecamerasrc.h17
-rw-r--r--gst/camerabin2/gstv4l2camerasrc.c36
-rw-r--r--gst/camerabin2/gstv4l2camerasrc.h4
4 files changed, 44 insertions, 54 deletions
diff --git a/gst/camerabin2/gstbasecamerasrc.c b/gst/camerabin2/gstbasecamerasrc.c
index 7c24ac394..fac9c43de 100644
--- a/gst/camerabin2/gstbasecamerasrc.c
+++ b/gst/camerabin2/gstbasecamerasrc.c
@@ -50,17 +50,20 @@ GST_DEBUG_CATEGORY (base_camera_src_debug);
GST_BOILERPLATE (GstBaseCameraSrc, gst_base_camera_src, GstBin, GST_TYPE_BIN);
-static GstStaticPadTemplate vfsrc_template = GST_STATIC_PAD_TEMPLATE ("vfsrc",
+static GstStaticPadTemplate vfsrc_template =
+GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME,
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS_ANY);
-static GstStaticPadTemplate imgsrc_template = GST_STATIC_PAD_TEMPLATE ("imgsrc",
+static GstStaticPadTemplate imgsrc_template =
+GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME,
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS_ANY);
-static GstStaticPadTemplate vidsrc_template = GST_STATIC_PAD_TEMPLATE ("vidsrc",
+static GstStaticPadTemplate vidsrc_template =
+GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME,
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS_ANY);
@@ -368,35 +371,14 @@ static gboolean
construct_pipeline (GstBaseCameraSrc * self)
{
GstBaseCameraSrcClass *bclass = GST_BASE_CAMERA_SRC_GET_CLASS (self);
- GstPad *vfsrc = NULL;
- GstPad *imgsrc = NULL;
- GstPad *vidsrc = NULL;
g_return_val_if_fail (bclass->construct_pipeline, FALSE);
- if (!bclass->construct_pipeline (self, &vfsrc, &imgsrc, &vidsrc)) {
+ if (!bclass->construct_pipeline (self)) {
GST_ERROR_OBJECT (self, "pipeline construction failed");
return FALSE;
}
- if (!vfsrc || !imgsrc || !vidsrc) {
- GST_ERROR_OBJECT (self, "derived class must return src pads");
- return FALSE;
- }
-
- GST_DEBUG_OBJECT (self, "vfsrc: %" GST_PTR_FORMAT, vfsrc);
- GST_DEBUG_OBJECT (self, "imgsrc: %" GST_PTR_FORMAT, imgsrc);
- GST_DEBUG_OBJECT (self, "vidsrc: %" GST_PTR_FORMAT, vidsrc);
-
- /* hook-up the ghostpads */
- gst_ghost_pad_set_target (GST_GHOST_PAD (self->vfsrc), vfsrc);
- gst_ghost_pad_set_target (GST_GHOST_PAD (self->imgsrc), imgsrc);
- gst_ghost_pad_set_target (GST_GHOST_PAD (self->vidsrc), vidsrc);
-
- gst_pad_set_active (self->vfsrc, TRUE);
- gst_pad_set_active (self->imgsrc, TRUE); /* XXX ??? */
- gst_pad_set_active (self->vidsrc, TRUE); /* XXX ??? */
-
return TRUE;
}
@@ -527,15 +509,6 @@ static void
gst_base_camera_src_init (GstBaseCameraSrc * self,
GstBaseCameraSrcClass * klass)
{
- self->vfsrc = gst_ghost_pad_new_no_target ("vfsrc", GST_PAD_SRC);
- gst_element_add_pad (GST_ELEMENT (self), self->vfsrc);
-
- self->imgsrc = gst_ghost_pad_new_no_target ("imgsrc", GST_PAD_SRC);
- gst_element_add_pad (GST_ELEMENT (self), self->imgsrc);
-
- self->vidsrc = gst_ghost_pad_new_no_target ("vidsrc", GST_PAD_SRC);
- gst_element_add_pad (GST_ELEMENT (self), self->vidsrc);
-
self->width = DEFAULT_WIDTH;
self->height = DEFAULT_HEIGHT;
self->zoom = DEFAULT_ZOOM;
diff --git a/gst/camerabin2/gstbasecamerasrc.h b/gst/camerabin2/gstbasecamerasrc.h
index 14b2a4d0d..c40b1b38e 100644
--- a/gst/camerabin2/gstbasecamerasrc.h
+++ b/gst/camerabin2/gstbasecamerasrc.h
@@ -48,6 +48,9 @@ GType gst_base_camera_src_get_type (void);
typedef struct _GstBaseCameraSrc GstBaseCameraSrc;
typedef struct _GstBaseCameraSrcClass GstBaseCameraSrcClass;
+#define GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME "vfsrc"
+#define GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME "imgsrc"
+#define GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME "vidsrc"
/**
* GstBaseCameraSrc:
@@ -56,10 +59,6 @@ struct _GstBaseCameraSrc
{
GstBin parent;
- GstPad *vfsrc;
- GstPad *imgsrc;
- GstPad *vidsrc;
-
gint mode;
gboolean capturing;
@@ -105,13 +104,8 @@ struct _GstBaseCameraSrcClass
{
GstBinClass parent;
- /* construct pipeline must be implemented by derived class, and return by
- * reference vfsrc, imgsrc, and vidsrc pads of the contained pipeline, which
- * will be ghosted to the src pads of the camerasrc bin (and optionally the
- * preview src pads?) */
- gboolean (*construct_pipeline) (GstBaseCameraSrc *self,
- GstPad **vfsrc, GstPad **imgsrc,
- GstPad **vidsrc);
+ /* construct pipeline must be implemented by derived class */
+ gboolean (*construct_pipeline) (GstBaseCameraSrc *self);
/* optional */
gboolean (*setup_pipeline) (GstBaseCameraSrc *self);
@@ -131,7 +125,6 @@ struct _GstBaseCameraSrcClass
gboolean (*start_capture) (GstBaseCameraSrc * src);
void (*stop_capture) (GstBaseCameraSrc * src);
-
gpointer _gst_reserved[GST_PADDING_LARGE];
};
diff --git a/gst/camerabin2/gstv4l2camerasrc.c b/gst/camerabin2/gstv4l2camerasrc.c
index feecccfaa..c8cd2b231 100644
--- a/gst/camerabin2/gstv4l2camerasrc.c
+++ b/gst/camerabin2/gstv4l2camerasrc.c
@@ -199,9 +199,6 @@ gst_v4l2_camera_src_vidsrc_probe (GstPad * pad, GstBuffer * buffer,
/**
* gst_v4l2_camera_src_construct_pipeline:
* @bcamsrc: camerasrc object
- * @vfsrc: viewfinder src element (returned by reference)
- * @imgsrc: image src element (returned by reference)
- * @vidsrc: video src element (returned by reference)
*
* This function creates and links the elements of the camerasrc bin
* videosrc ! cspconv ! capsfilter ! crop ! scale ! capsfilter ! tee ! ..
@@ -209,8 +206,7 @@ gst_v4l2_camera_src_vidsrc_probe (GstPad * pad, GstBuffer * buffer,
* Returns: TRUE, if elements were successfully created, FALSE otherwise
*/
static gboolean
-gst_v4l2_camera_src_construct_pipeline (GstBaseCameraSrc * bcamsrc,
- GstPad ** vfsrc, GstPad ** imgsrc, GstPad ** vidsrc)
+gst_v4l2_camera_src_construct_pipeline (GstBaseCameraSrc * bcamsrc)
{
GstV4l2CameraSrc *self = GST_V4L2_CAMERA_SRC (bcamsrc);
GstBin *cbin = GST_BIN (bcamsrc);
@@ -265,9 +261,17 @@ gst_v4l2_camera_src_construct_pipeline (GstBaseCameraSrc * bcamsrc,
gst_pad_add_buffer_probe (self->tee_video_srcpad,
G_CALLBACK (gst_v4l2_camera_src_vidsrc_probe), self);
- *vfsrc = self->tee_vf_srcpad;
- *imgsrc = self->tee_image_srcpad;
- *vidsrc = self->tee_video_srcpad;
+ /* hook-up the ghostpads */
+ gst_ghost_pad_set_target (GST_GHOST_PAD (self->vfsrc), self->tee_vf_srcpad);
+ gst_ghost_pad_set_target (GST_GHOST_PAD (self->imgsrc),
+ self->tee_image_srcpad);
+ gst_ghost_pad_set_target (GST_GHOST_PAD (self->vidsrc),
+ self->tee_video_srcpad);
+
+ gst_pad_set_active (self->vfsrc, TRUE);
+ gst_pad_set_active (self->imgsrc, TRUE); /* XXX ??? */
+ gst_pad_set_active (self->vidsrc, TRUE); /* XXX ??? */
+
ret = TRUE;
done:
@@ -1036,6 +1040,22 @@ static void
gst_v4l2_camera_src_init (GstV4l2CameraSrc * self,
GstV4l2CameraSrcClass * klass)
{
+ self->vfsrc =
+ gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME,
+ GST_PAD_SRC);
+ gst_element_add_pad (GST_ELEMENT (self), self->vfsrc);
+
+ self->imgsrc =
+ gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME,
+ GST_PAD_SRC);
+ gst_element_add_pad (GST_ELEMENT (self), self->imgsrc);
+
+ self->vidsrc =
+ gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME,
+ GST_PAD_SRC);
+ gst_element_add_pad (GST_ELEMENT (self), self->vidsrc);
+
+
/* TODO where are variables reset? */
self->image_capture_count = 0;
self->video_rec_status = GST_VIDEO_RECORDING_STATUS_DONE;
diff --git a/gst/camerabin2/gstv4l2camerasrc.h b/gst/camerabin2/gstv4l2camerasrc.h
index 7bc8285c0..5f476fcc2 100644
--- a/gst/camerabin2/gstv4l2camerasrc.h
+++ b/gst/camerabin2/gstv4l2camerasrc.h
@@ -57,6 +57,10 @@ struct _GstV4l2CameraSrc
{
GstBaseCameraSrc parent;
+ GstPad *vfsrc;
+ GstPad *imgsrc;
+ GstPad *vidsrc;
+
/* video recording controls */
gint video_rec_status;