]> code.ossystems Code Review - openembedded-core.git/blob
f666adc8199e6c53ff92f3c80265a5e9903ed695
[openembedded-core.git] /
1 Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
2 Upstream-Status: Backport [commit 59a731be6b in '1.10' branch]
3
4
5 From 02a6002c3a80b3a5301c0943b1a1518bbdf439fc Mon Sep 17 00:00:00 2001
6 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?=
7  <vjaquez@igalia.com>
8 Date: Fri, 21 Apr 2017 19:07:18 +0200
9 Subject: [PATCH] vaapivideobufferpool: create allocator if needed
10
11 Backport to branch 1.10
12
13 Sometimes a video decoder could set different buffer pool
14 configurations, because their frame size changes. In this case we
15 did not reconfigure the allocator.
16
17 This patch enables this use case, creating a new allocator inside
18 the VAAPI buffer pool if the caps changed, if it is not dmabuf-based.
19 If so, it is just reconfigured, since it doesn't have a surface pool.
20
21 https://bugzilla.gnome.org/show_bug.cgi?id=781577
22 ---
23  gst/vaapi/gstvaapivideobufferpool.c | 21 +++++++++++++++++++++
24  1 file changed, 21 insertions(+)
25
26 diff --git a/gst/vaapi/gstvaapivideobufferpool.c b/gst/vaapi/gstvaapivideobufferpool.c
27 index a3b9223f..9a50614b 100644
28 --- a/gst/vaapi/gstvaapivideobufferpool.c
29 +++ b/gst/vaapi/gstvaapivideobufferpool.c
30 @@ -159,6 +159,27 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
31      gst_object_replace ((GstObject **) & priv->allocator, NULL);
32    priv->video_info = new_vip;
33  
34 +  {
35 +    guint surface_alloc_flags;
36 +    gboolean vinfo_changed = FALSE;
37 +
38 +    if (allocator) {
39 +      const GstVideoInfo *alloc_vinfo =
40 +          gst_allocator_get_vaapi_video_info (allocator, &surface_alloc_flags);
41 +      vinfo_changed = gst_video_info_changed (alloc_vinfo, &new_vip);
42 +    }
43 +
44 +    if (vinfo_changed && allocator && priv->use_dmabuf_memory) {
45 +      gst_allocator_set_vaapi_video_info (allocator, &new_vip,
46 +          surface_alloc_flags);
47 +    } else if (!priv->use_dmabuf_memory && (vinfo_changed || !allocator)) {
48 +      /* let's destroy the other allocator and create a new one */
49 +      allocator = gst_vaapi_video_allocator_new (priv->display, &new_vip,
50 +          surface_alloc_flags);
51 +      gst_buffer_pool_config_set_allocator (config, allocator, NULL);
52 +    }
53 +  }
54 +
55    if (!gst_buffer_pool_config_has_option (config,
56            GST_BUFFER_POOL_OPTION_VAAPI_VIDEO_META))
57      goto error_no_vaapi_video_meta_option;
58 -- 
59 2.11.0
60
61