From dcd0deba57faf981a07615bc7708b4b9c53e24d9 Mon Sep 17 00:00:00 2001 From: Wang Zidan Date: Tue, 22 Jul 2014 14:49:21 +0800 Subject: 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 Signed-off-by: Richard Purdie --- .../videodec-Don-t-use-non-growable-pool.patch | 75 ++++++++++++++++++++++ .../gstreamer/gstreamer1.0-libav_1.2.4.bb | 3 +- 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/videodec-Don-t-use-non-growable-pool.patch (limited to 'meta') 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 @@ +From 62a4d065ed7bd117d869fd8bcb61274c2870ddf5 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Thu, 27 Mar 2014 18:53:53 -0400 +Subject: [PATCH] videodec: Don't use non-growable pool + +As we don't know how many output buffers we need to operate, we need to +avoid pool that can't grow. Otherwise the pipeline may stall, waiting +for buffers. For now, we require it to be able to grow to at least +32 buffers, which I think is a fair amount of buffers for decoders. + +https://bugzilla.gnome.org/show_bug.cgi?id=726299 + +Commit 2a337d926cc30cd7eaae13a4b46eea68ba89e368 in master branch + +Upstream Status: Backported + +Signed-off-by: Nicolas Dufresne +--- + ext/libav/gstavviddec.c | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c +index 6c9c0c9..d80fd52 100644 +--- a/ext/libav/gstavviddec.c ++++ b/ext/libav/gstavviddec.c +@@ -46,6 +46,7 @@ GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); + #define DEFAULT_DIRECT_RENDERING TRUE + #define DEFAULT_DEBUG_MV FALSE + #define DEFAULT_MAX_THREADS 0 ++#define REQUIRED_POOL_MAX_BUFFERS 32 + + enum + { +@@ -1620,7 +1621,7 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) + GstBufferPool *pool; + guint size, min, max; + GstStructure *config; +- gboolean have_videometa, have_alignment; ++ gboolean have_videometa, have_alignment, update_pool; + GstAllocator *allocator = NULL; + GstAllocationParams params = { 0, 15, 0, 0, }; + +@@ -1639,6 +1640,22 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) + + gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max); + ++ /* Don't use pool that can't grow, as we don't know how many buffer we'll ++ * need, otherwise we may stall */ ++ if (max != 0 && max < REQUIRED_POOL_MAX_BUFFERS) { ++ gst_object_unref (pool); ++ pool = gst_video_buffer_pool_new (); ++ max = 0; ++ update_pool = TRUE; ++ ++ /* if there is an allocator, also drop it, as it might be the reason we ++ * have this limit. Default will be used */ ++ if (allocator) { ++ gst_object_unref (allocator); ++ allocator = NULL; ++ } ++ } ++ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_set_params (config, state->caps, size, min, max); + /* we are happy with the default allocator but we would like to have 16 bytes +@@ -1726,6 +1743,9 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) + /* and store */ + gst_buffer_pool_set_config (pool, config); + ++ if (update_pool) ++ gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); ++ + gst_object_unref (pool); + if (allocator) + gst_object_unref (allocator); diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.4.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.4.bb index 350b528e94..9e2321956c 100644 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.4.bb +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.4.bb @@ -12,7 +12,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ SRC_URI = " \ http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \ file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \ - " + file://videodec-Don-t-use-non-growable-pool.patch \ +" SRC_URI[md5sum] = "6454f9f22b3aa37694781633e0d20a9c" SRC_URI[sha256sum] = "2a69480d63fc2db93249d9e2e229ab3541bbc2db881b0f64de13d0bfc7d1f037" LIBAV_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux \ -- cgit v1.2.3-54-g00ecf