diff --git a/docs/reference/libs/libs-sections.txt b/docs/reference/libs/libs-sections.txt index e619f19cfb..9b005e61d2 100644 --- a/docs/reference/libs/libs-sections.txt +++ b/docs/reference/libs/libs-sections.txt @@ -228,6 +228,7 @@ gst_vaapi_image_get_data_size gst_vaapi_image_get_buffer gst_vaapi_image_get_raw gst_vaapi_image_update_from_buffer +gst_vaapi_image_copy GST_VAAPI_IMAGE diff --git a/gst-libs/gst/vaapi/gstvaapiimage.c b/gst-libs/gst/vaapi/gstvaapiimage.c index 30df81da94..3ddf124083 100644 --- a/gst-libs/gst/vaapi/gstvaapiimage.c +++ b/gst-libs/gst/vaapi/gstvaapiimage.c @@ -1116,3 +1116,35 @@ gst_vaapi_image_update_from_raw( return success; } + +/** + * gst_vaapi_image_copy: + * @dst_image: the target #GstVaapiImage + * @src_image: the source #GstVaapiImage + * + * Copies pixels data from @src_image to @dst_image. Both images shall + * have the same format and size. + * + * Return value: %TRUE on success + */ +gboolean +gst_vaapi_image_copy(GstVaapiImage *dst_image, GstVaapiImage *src_image) +{ + GstVaapiImageRaw dst_image_raw, src_image_raw; + gboolean success = FALSE; + + g_return_val_if_fail(dst_image != NULL, FALSE); + g_return_val_if_fail(src_image != NULL, FALSE); + + if (!_gst_vaapi_image_map(dst_image, &dst_image_raw)) + goto end; + if (!_gst_vaapi_image_map(src_image, &src_image_raw)) + goto end; + + success = copy_image(&dst_image_raw, &src_image_raw, NULL); + +end: + _gst_vaapi_image_unmap(src_image); + _gst_vaapi_image_unmap(dst_image); + return success; +} diff --git a/gst-libs/gst/vaapi/gstvaapiimage.h b/gst-libs/gst/vaapi/gstvaapiimage.h index 94eff61362..124bdad54d 100644 --- a/gst-libs/gst/vaapi/gstvaapiimage.h +++ b/gst-libs/gst/vaapi/gstvaapiimage.h @@ -156,6 +156,9 @@ gst_vaapi_image_update_from_raw( GstVaapiRectangle *rect ); +gboolean +gst_vaapi_image_copy(GstVaapiImage *dst_image, GstVaapiImage *src_image); + G_END_DECLS #endif /* GST_VAAPI_IMAGE_H */