diff options
-rw-r--r-- | meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/videodec-Don-t-use-non-growable-pool.patch | 75 | ||||
-rw-r--r-- | meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.4.0.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.4.bb) | 7 |
2 files changed, 3 insertions, 79 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 deleted file mode 100644 index d9b796b6bc..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/videodec-Don-t-use-non-growable-pool.patch +++ /dev/null | |||
@@ -1,75 +0,0 @@ | |||
1 | From 62a4d065ed7bd117d869fd8bcb61274c2870ddf5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nicolas Dufresne <nicolas.dufresne@collabora.com> | ||
3 | Date: Thu, 27 Mar 2014 18:53:53 -0400 | ||
4 | Subject: [PATCH] videodec: Don't use non-growable pool | ||
5 | |||
6 | As we don't know how many output buffers we need to operate, we need to | ||
7 | avoid pool that can't grow. Otherwise the pipeline may stall, waiting | ||
8 | for buffers. For now, we require it to be able to grow to at least | ||
9 | 32 buffers, which I think is a fair amount of buffers for decoders. | ||
10 | |||
11 | https://bugzilla.gnome.org/show_bug.cgi?id=726299 | ||
12 | |||
13 | Commit 2a337d926cc30cd7eaae13a4b46eea68ba89e368 in master branch | ||
14 | |||
15 | Upstream Status: Backported | ||
16 | |||
17 | Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> | ||
18 | --- | ||
19 | ext/libav/gstavviddec.c | 22 +++++++++++++++++++++- | ||
20 | 1 file changed, 21 insertions(+), 1 deletion(-) | ||
21 | |||
22 | diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c | ||
23 | index 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); | ||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.4.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.4.0.bb index 9e2321956c..bc79d54f5f 100644 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.4.bb +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.4.0.bb | |||
@@ -3,7 +3,7 @@ include gstreamer1.0-libav.inc | |||
3 | LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ | 3 | LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ |
4 | file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ | 4 | file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ |
5 | file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \ | 5 | file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \ |
6 | file://gst-libs/ext/libav/LICENSE;md5=23a54f59b82572c203a559346e89ed57 \ | 6 | file://gst-libs/ext/libav/LICENSE;md5=df1087a33b5cafe5e70b3452aac81515 \ |
7 | file://gst-libs/ext/libav/COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ | 7 | file://gst-libs/ext/libav/COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ |
8 | file://gst-libs/ext/libav/COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \ | 8 | file://gst-libs/ext/libav/COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \ |
9 | file://gst-libs/ext/libav/COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \ | 9 | file://gst-libs/ext/libav/COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \ |
@@ -12,10 +12,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ | |||
12 | SRC_URI = " \ | 12 | SRC_URI = " \ |
13 | http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \ | 13 | http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \ |
14 | file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \ | 14 | file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \ |
15 | file://videodec-Don-t-use-non-growable-pool.patch \ | ||
16 | " | 15 | " |
17 | SRC_URI[md5sum] = "6454f9f22b3aa37694781633e0d20a9c" | 16 | SRC_URI[md5sum] = "60811ae08c26fa093a96996582962c75" |
18 | SRC_URI[sha256sum] = "2a69480d63fc2db93249d9e2e229ab3541bbc2db881b0f64de13d0bfc7d1f037" | 17 | SRC_URI[sha256sum] = "c82c7a657863f2e27ac5cba539b0bd0a8114ad6bd4ba33bae777e4dbfab9e380" |
19 | LIBAV_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux \ | 18 | LIBAV_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux \ |
20 | --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \ | 19 | --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \ |
21 | --ranlib='${RANLIB}' \ | 20 | --ranlib='${RANLIB}' \ |