summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLauri Lehtinen <lauri.lehtinen@digia.com>2011-02-24 17:42:21 -0300
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>2011-03-10 08:42:01 -0300
commit76b3ff361fa051f892e7b3e74816b5c09dc63594 (patch)
treef9ef5cb9cd2d52e1eea56ddeb953901eaf0bfa4d
parent0633901dd54de2e987d9315b29ee6e68db689927 (diff)
downloadgstreamer-plugins-bad-76b3ff361fa051f892e7b3e74816b5c09dc63594.tar.gz
basecamerasrc: add virtual function to notify subclass of changing preview caps
Adds a virtual function to basecamerasrc in case subclasses want to be notified of changing preview caps. This is useful if the subclass wants to post the preview itself or if it wants to provide a preview buffer as close to as possible to the user's requested resolution to the preview generation pipeline.
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c31
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h5
2 files changed, 29 insertions, 7 deletions
diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
index a26533fc8..cf332be00 100644
--- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
+++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
@@ -201,6 +201,28 @@ gst_base_camera_src_setup_zoom (GstBaseCameraSrc * self)
bclass->set_zoom (self, zoom);
}
+/**
+ * gst_base_camera_src_setup_preview:
+ * @self: camerasrc bin
+ * @preview_caps: preview caps to set
+ *
+ * Apply preview caps to preview pipeline and to video source.
+ */
+void
+gst_base_camera_src_setup_preview (GstBaseCameraSrc * self,
+ GstCaps * preview_caps)
+{
+ GstBaseCameraSrcClass *bclass = GST_BASE_CAMERA_SRC_GET_CLASS (self);
+
+ if (self->preview_pipeline) {
+ GST_DEBUG_OBJECT (self,
+ "Setting preview pipeline caps %" GST_PTR_FORMAT, self->preview_caps);
+ gst_camerabin_preview_set_caps (self->preview_pipeline, preview_caps);
+ }
+
+ if (bclass->set_preview)
+ bclass->set_preview (self, preview_caps);
+}
/**
* gst_base_camera_src_get_allowed_input_caps:
@@ -327,13 +349,8 @@ gst_base_camera_src_set_property (GObject * object,
case PROP_PREVIEW_CAPS:
gst_caps_replace (&self->preview_caps,
(GstCaps *) gst_value_get_caps (value));
- if (self->preview_pipeline) {
- GST_DEBUG_OBJECT (self,
- "Setting preview pipeline caps %" GST_PTR_FORMAT,
- self->preview_caps);
- gst_camerabin_preview_set_caps (self->preview_pipeline,
- (GstCaps *) gst_value_get_caps (value));
- }
+ gst_base_camera_src_setup_preview (self,
+ (GstCaps *) gst_value_get_caps (value));
break;
case PROP_PREVIEW_FILTER:
if (self->preview_filter)
diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h
index 4ff5e8842..ef9ae9e87 100644
--- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h
+++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h
@@ -109,6 +109,10 @@ struct _GstBaseCameraSrcClass
gboolean (*set_mode) (GstBaseCameraSrc *self,
GstCameraBinMode mode);
+ /* set preview caps */
+ gboolean (*set_preview) (GstBaseCameraSrc *self,
+ GstCaps *preview_caps);
+
/* */
GstCaps * (*get_allowed_input_caps) (GstBaseCameraSrc * self);
@@ -130,6 +134,7 @@ GstColorBalance * gst_base_camera_src_get_color_balance (GstBaseCameraSrc *self)
gboolean gst_base_camera_src_set_mode (GstBaseCameraSrc *self, GstCameraBinMode mode);
void gst_base_camera_src_setup_zoom (GstBaseCameraSrc * self);
+void gst_base_camera_src_setup_preview (GstBaseCameraSrc * self, GstCaps * preview_caps);
GstCaps * gst_base_camera_src_get_allowed_input_caps (GstBaseCameraSrc * self);
void gst_base_camera_src_finish_capture (GstBaseCameraSrc *self);