summaryrefslogtreecommitdiffstats
path: root/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav
diff options
context:
space:
mode:
authorWang Zidan <b50113@freescale.com>2014-07-22 14:49:21 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-07-23 21:59:14 +0100
commitdcd0deba57faf981a07615bc7708b4b9c53e24d9 (patch)
treec8cb246989e1f770826a4d59476481221a955f60 /meta/recipes-multimedia/gstreamer/gstreamer1.0-libav
parent4fc9259563a5cd8d990ae1da165dd24898bff08e (diff)
downloadpoky-dcd0deba57faf981a07615bc7708b4b9c53e24d9.tar.gz
gstreamer1.0-libav: avoid using non-growable pool for videodec
Using growable pool with at least 32 buffers for decoders. (From OE-Core rev: 81ae7794ddbc7e2d97118092e0613249793214ef) Signed-off-by: Wang Zidan <b50113@freescale.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-multimedia/gstreamer/gstreamer1.0-libav')
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/videodec-Don-t-use-non-growable-pool.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/videodec-Don-t-use-non-growable-pool.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/videodec-Don-t-use-non-growable-pool.patch
new file mode 100644
index 0000000000..d9b796b6bc
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/videodec-Don-t-use-non-growable-pool.patch
@@ -0,0 +1,75 @@
1From 62a4d065ed7bd117d869fd8bcb61274c2870ddf5 Mon Sep 17 00:00:00 2001
2From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
3Date: Thu, 27 Mar 2014 18:53:53 -0400
4Subject: [PATCH] videodec: Don't use non-growable pool
5
6As we don't know how many output buffers we need to operate, we need to
7avoid pool that can't grow. Otherwise the pipeline may stall, waiting
8for buffers. For now, we require it to be able to grow to at least
932 buffers, which I think is a fair amount of buffers for decoders.
10
11https://bugzilla.gnome.org/show_bug.cgi?id=726299
12
13Commit 2a337d926cc30cd7eaae13a4b46eea68ba89e368 in master branch
14
15Upstream Status: Backported
16
17Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
18---
19 ext/libav/gstavviddec.c | 22 +++++++++++++++++++++-
20 1 file changed, 21 insertions(+), 1 deletion(-)
21
22diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
23index 6c9c0c9..d80fd52 100644
24--- a/ext/libav/gstavviddec.c
25+++ b/ext/libav/gstavviddec.c
26@@ -46,6 +46,7 @@ GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
27 #define DEFAULT_DIRECT_RENDERING TRUE
28 #define DEFAULT_DEBUG_MV FALSE
29 #define DEFAULT_MAX_THREADS 0
30+#define REQUIRED_POOL_MAX_BUFFERS 32
31
32 enum
33 {
34@@ -1620,7 +1621,7 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
35 GstBufferPool *pool;
36 guint size, min, max;
37 GstStructure *config;
38- gboolean have_videometa, have_alignment;
39+ gboolean have_videometa, have_alignment, update_pool;
40 GstAllocator *allocator = NULL;
41 GstAllocationParams params = { 0, 15, 0, 0, };
42
43@@ -1639,6 +1640,22 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
44
45 gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
46
47+ /* Don't use pool that can't grow, as we don't know how many buffer we'll
48+ * need, otherwise we may stall */
49+ if (max != 0 && max < REQUIRED_POOL_MAX_BUFFERS) {
50+ gst_object_unref (pool);
51+ pool = gst_video_buffer_pool_new ();
52+ max = 0;
53+ update_pool = TRUE;
54+
55+ /* if there is an allocator, also drop it, as it might be the reason we
56+ * have this limit. Default will be used */
57+ if (allocator) {
58+ gst_object_unref (allocator);
59+ allocator = NULL;
60+ }
61+ }
62+
63 config = gst_buffer_pool_get_config (pool);
64 gst_buffer_pool_config_set_params (config, state->caps, size, min, max);
65 /* we are happy with the default allocator but we would like to have 16 bytes
66@@ -1726,6 +1743,9 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
67 /* and store */
68 gst_buffer_pool_set_config (pool, config);
69
70+ if (update_pool)
71+ gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
72+
73 gst_object_unref (pool);
74 if (allocator)
75 gst_object_unref (allocator);