[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