Indirect set surface to video buffer will leak memory,
- when video buffer is destroy, the surface is not returned back to surface pool.
- gst_vaapi_video_buffer_set_surface_from_pool() is correct,
- while the following is incorrect:
surface = gst_vaapi_video_pool_get_object(priv->surfaces);
gst_vaapi_video_buffer_set_surface(vbuffer, surface);
gst_vaapi_uploader_get_buffer(GstVaapiUploader *uploader)
{
GstVaapiUploaderPrivate *priv;
- GstVaapiSurface *surface;
GstVaapiImage *image;
GstVaapiVideoBuffer *vbuffer;
GstBuffer *buffer = NULL;
}
vbuffer = GST_VAAPI_VIDEO_BUFFER(buffer);
- surface = gst_vaapi_video_pool_get_object(priv->surfaces);
- if (!surface) {
- GST_WARNING("failed to allocate VA surface");
- goto error;
- }
-
- gst_vaapi_video_buffer_set_surface(vbuffer, surface);
+ gst_vaapi_video_buffer_set_surface_from_pool(vbuffer, priv->surfaces);
image = gst_vaapi_video_buffer_get_image(vbuffer);
if (!gst_vaapi_image_map(image)) {