[Pkg-gstreamer-commits] [gstreamer-vaapi] 102/176: encoder: fix possible memory leak of coded buffer pools.

Vincent Cheng vcheng at moszumanska.debian.org
Tue Jun 3 08:09:31 UTC 2014


This is an automated email from the git hooks/post-receive script.

vcheng pushed a commit to branch upstream
in repository gstreamer-vaapi.

commit 20ab910d15b4d748ed747ebbdedfbfa2d5f9bf9f
Author: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
Date:   Fri Jan 10 11:30:25 2014 +0100

    encoder: fix possible memory leak of coded buffer pools.
    
    Fix gst_vaapi_encoder_reconfigure_internal() to re-/allocate the coded
    buffer pool only if the coded buffer size actually changed.
---
 gst-libs/gst/vaapi/gstvaapicodedbufferpool.c | 17 +++++++++++++++++
 gst-libs/gst/vaapi/gstvaapicodedbufferpool.h |  3 +++
 gst-libs/gst/vaapi/gstvaapiencoder.c         | 21 ++++++++++++++-------
 3 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/gst-libs/gst/vaapi/gstvaapicodedbufferpool.c b/gst-libs/gst/vaapi/gstvaapicodedbufferpool.c
index c5a8acd..44b2e3d 100644
--- a/gst-libs/gst/vaapi/gstvaapicodedbufferpool.c
+++ b/gst-libs/gst/vaapi/gstvaapicodedbufferpool.c
@@ -111,3 +111,20 @@ gst_vaapi_coded_buffer_pool_new (GstVaapiEncoder * encoder, gsize buf_size)
       context, buf_size);
   return pool;
 }
+
+/**
+ * gst_vaapi_coded_buffer_pool_get_buffer_size:
+ * @pool: a #GstVaapiCodedBufferPool
+ *
+ * Determines the maximum size of each #GstVaapiCodedBuffer held in
+ * the @pool.
+ *
+ * Return value: size of a #GstVaapiCodedBuffer in @pool
+ */
+gsize
+gst_vaapi_coded_buffer_pool_get_buffer_size (GstVaapiCodedBufferPool * pool)
+{
+  g_return_val_if_fail (pool != NULL, 0);
+
+  return pool->buf_size;
+}
diff --git a/gst-libs/gst/vaapi/gstvaapicodedbufferpool.h b/gst-libs/gst/vaapi/gstvaapicodedbufferpool.h
index 3480d48..0185ee3 100644
--- a/gst-libs/gst/vaapi/gstvaapicodedbufferpool.h
+++ b/gst-libs/gst/vaapi/gstvaapicodedbufferpool.h
@@ -37,6 +37,9 @@ GstVaapiVideoPool *
 gst_vaapi_coded_buffer_pool_new (struct _GstVaapiEncoder * encoder,
     gsize buf_size);
 
+gsize
+gst_vaapi_coded_buffer_pool_get_buffer_size (GstVaapiCodedBufferPool * pool);
+
 G_END_DECLS
 
 #endif /* GST_VAAPI_CODED_BUFFER_POOL_H */
diff --git a/gst-libs/gst/vaapi/gstvaapiencoder.c b/gst-libs/gst/vaapi/gstvaapiencoder.c
index 555eaf0..7d19458 100644
--- a/gst-libs/gst/vaapi/gstvaapiencoder.c
+++ b/gst-libs/gst/vaapi/gstvaapiencoder.c
@@ -481,6 +481,8 @@ gst_vaapi_encoder_reconfigure_internal (GstVaapiEncoder * encoder)
 {
   GstVaapiEncoderClass *const klass = GST_VAAPI_ENCODER_GET_CLASS (encoder);
   GstVaapiEncoderStatus status;
+  GstVaapiVideoPool *pool;
+  guint codedbuf_size;
 
   status = klass->reconfigure (encoder);
   if (status != GST_VAAPI_ENCODER_STATUS_SUCCESS)
@@ -489,16 +491,21 @@ gst_vaapi_encoder_reconfigure_internal (GstVaapiEncoder * encoder)
   if (!gst_vaapi_encoder_ensure_context (encoder))
     goto error_reset_context;
 
-  encoder->codedbuf_pool = gst_vaapi_coded_buffer_pool_new (encoder,
-      encoder->codedbuf_size);
-  if (!encoder->codedbuf_pool)
-    goto error_codedbuf_pool_allocation_failed;
-
-  gst_vaapi_video_pool_set_capacity (encoder->codedbuf_pool, 5);
+  codedbuf_size = encoder->codedbuf_pool ?
+      gst_vaapi_coded_buffer_pool_get_buffer_size (GST_VAAPI_CODED_BUFFER_POOL
+      (encoder)) : 0;
+  if (codedbuf_size != encoder->codedbuf_size) {
+    pool = gst_vaapi_coded_buffer_pool_new (encoder, encoder->codedbuf_size);
+    if (!pool)
+      goto error_alloc_codedbuf_pool;
+    gst_vaapi_video_pool_set_capacity (pool, 5);
+    gst_vaapi_video_pool_replace (&encoder->codedbuf_pool, pool);
+    gst_vaapi_video_pool_unref (pool);
+  }
   return GST_VAAPI_ENCODER_STATUS_SUCCESS;
 
   /* ERRORS */
-error_codedbuf_pool_allocation_failed:
+error_alloc_codedbuf_pool:
   {
     GST_ERROR ("failed to initialize coded buffer pool");
     return GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gstreamer/gstreamer-vaapi.git



More information about the Pkg-gstreamer-commits mailing list