static void gst_vaapi_image_get_property( GObject *object, guint prop_id, GValue *value, GParamSpec *pspec ) { GstVaapiImage * const image = GST_VAAPI_IMAGE(object); switch (prop_id) { case PROP_IMAGE: g_value_set_boxed(value, &image->priv->image); break; case PROP_FORMAT: g_value_set_uint(value, gst_vaapi_image_get_format(image)); break; case PROP_WIDTH: g_value_set_uint(value, gst_vaapi_image_get_width(image)); break; case PROP_HEIGHT: g_value_set_uint(value, gst_vaapi_image_get_height(image)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }
static gboolean gst_video_info_update_from_image (GstVideoInfo * vip, GstVaapiImage * image) { GstVideoFormat format; const guchar *data; guint i, num_planes, data_size, width, height; /* Reset format from image */ format = gst_vaapi_image_get_format (image); gst_vaapi_image_get_size (image, &width, &height); gst_video_info_set_format (vip, format, width, height); num_planes = gst_vaapi_image_get_plane_count (image); g_return_val_if_fail (num_planes == GST_VIDEO_INFO_N_PLANES (vip), FALSE); /* Determine the base data pointer */ data = get_image_data (image); g_return_val_if_fail (data != NULL, FALSE); data_size = gst_vaapi_image_get_data_size (image); /* Check that we don't have disjoint planes */ for (i = 0; i < num_planes; i++) { const guchar *const plane = gst_vaapi_image_get_plane (image, i); if (plane - data > data_size) return FALSE; } /* Update GstVideoInfo structure */ for (i = 0; i < num_planes; i++) { const guchar *const plane = gst_vaapi_image_get_plane (image, i); GST_VIDEO_INFO_PLANE_OFFSET (vip, i) = plane - data; GST_VIDEO_INFO_PLANE_STRIDE (vip, i) = gst_vaapi_image_get_pitch (image, i); } GST_VIDEO_INFO_SIZE (vip) = data_size; return TRUE; }