Fix memory leak when doing YUV data upload
authorZhao Halley <halley.zhao@intel.com>
Fri, 19 Apr 2013 08:10:22 +0000 (16:10 +0800)
committerZhao Halley <halley.zhao@intel.com>
Fri, 19 Apr 2013 11:02:47 +0000 (19:02 +0800)
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/gstvaapiuploader.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index e6bf74d..dc3e934
@@ -441,7 +441,6 @@ GstBuffer *
 gst_vaapi_uploader_get_buffer(GstVaapiUploader *uploader)
 {
     GstVaapiUploaderPrivate *priv;
-    GstVaapiSurface *surface;
     GstVaapiImage *image;
     GstVaapiVideoBuffer *vbuffer;
     GstBuffer *buffer = NULL;
@@ -457,13 +456,7 @@ gst_vaapi_uploader_get_buffer(GstVaapiUploader *uploader)
     }
     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)) {