void gst_gl_set_affine_transformation_meta_from_ndc (GstVideoAffineTransformationMeta * meta, const gfloat * matrix) { float tmp[16]; g_return_if_fail (meta != NULL); /* change of basis multiplications */ gst_gl_multiply_matrix4 (from_ndc_matrix, matrix, tmp); gst_gl_multiply_matrix4 (tmp, to_ndc_matrix, meta->matrix); }
void gst_gl_get_affine_transformation_meta_as_ndc (GstVideoAffineTransformationMeta * meta, gfloat * matrix) { if (!meta) { int i; for (i = 0; i < 16; i++) { matrix[i] = identity_matrix[i]; } } else { gfloat tmp[16] = { 0.0f }; gst_gl_multiply_matrix4 (from_ndc_matrix, meta->matrix, tmp); gst_gl_multiply_matrix4 (tmp, to_ndc_matrix, matrix); } }
/* * gst_gl_get_affine_transformation_meta_as_ndc: * @meta: (nullable): a #GstVideoAffineTransformationMeta * @matrix: (out): result of the 4x4 matrix * * Retrieves the stored 4x4 affine transformation matrix stored in @meta in * NDC coordinates. if @meta is NULL, an identity matrix is returned. * * NDC is a left-handed coordinate sytem * - x - [-1, 1] - +ve X moves right * - y - [-1, 1] - +ve Y moves up * - z - [-1, 1] - +ve Z moves into */ void gst_gl_get_affine_transformation_meta_as_ndc (GstVideoAffineTransformationMeta * meta, gfloat * matrix) { if (!meta) { int i; for (i = 0; i < 16; i++) { matrix[i] = identity_matrix[i]; } } else { float tmp[16]; /* change of basis multiplications */ gst_gl_multiply_matrix4 (to_ndc_matrix, meta->matrix, tmp); gst_gl_multiply_matrix4 (tmp, from_ndc_matrix, matrix); } }