static gboolean gst_gdk_pixbuf_overlay_start (GstBaseTransform * trans) { GstGdkPixbufOverlay *overlay = GST_GDK_PIXBUF_OVERLAY (trans); GError *err = NULL; if (overlay->location != NULL) { if (!gst_gdk_pixbuf_overlay_load_image (overlay, &err)) goto error_loading_image; gst_base_transform_set_passthrough (trans, FALSE); } else { GST_WARNING_OBJECT (overlay, "no image location set, doing nothing"); gst_base_transform_set_passthrough (trans, TRUE); } return TRUE; /* ERRORS */ error_loading_image: { GST_ELEMENT_ERROR (overlay, RESOURCE, OPEN_READ, ("Could not load overlay image."), ("%s", err->message)); g_error_free (err); return FALSE; } }
void gst_gdk_pixbuf_overlay_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { GstGdkPixbufOverlay *overlay = GST_GDK_PIXBUF_OVERLAY (object); GST_OBJECT_LOCK (overlay); switch (property_id) { case PROP_LOCATION:{ GError *err = NULL; g_free (overlay->location); overlay->location = g_value_dup_string (value); if (!gst_gdk_pixbuf_overlay_load_image (overlay, &err)) { GST_ERROR_OBJECT (overlay, "Could not load overlay image: %s", err->message); g_error_free (err); } } break; case PROP_OFFSET_X: overlay->offset_x = g_value_get_int (value); overlay->update_composition = TRUE; break; case PROP_OFFSET_Y: overlay->offset_y = g_value_get_int (value); overlay->update_composition = TRUE; break; case PROP_RELATIVE_X: overlay->relative_x = g_value_get_double (value); overlay->update_composition = TRUE; break; case PROP_RELATIVE_Y: overlay->relative_y = g_value_get_double (value); overlay->update_composition = TRUE; break; case PROP_OVERLAY_WIDTH: overlay->overlay_width = g_value_get_int (value); overlay->update_composition = TRUE; break; case PROP_OVERLAY_HEIGHT: overlay->overlay_height = g_value_get_int (value); overlay->update_composition = TRUE; break; case PROP_ALPHA: overlay->alpha = g_value_get_double (value); overlay->update_composition = TRUE; break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } GST_OBJECT_UNLOCK (overlay); }