weston: Add patch to improve gst-record robustness 37/19037/2
authorScott Murray <scott.murray@konsulko.com>
Fri, 7 Dec 2018 17:09:20 +0000 (12:09 -0500)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 20 Dec 2018 20:03:03 +0000 (20:03 +0000)
Add a patch to do some retries with a delay when the gst-record
feature is initializing and attempts to query the omx encoder plugin
for its buffer pools.  It is not clear why exactly the encoder is
not consistently ready at this point, but in my testing this change
greatly improved the robustness of weston startup with gst-record
enabled.

Change-Id: Ibd26ad64be035e1f9d40cc3cd9337e9efeabfad4
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch [new file with mode: 0644]
meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston_2.0.0.bbappend

diff --git a/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch b/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch
new file mode 100644 (file)
index 0000000..d6a7a1b
--- /dev/null
@@ -0,0 +1,51 @@
+gst-record: Add retry on omx buffer pool query
+
+The omx encoder plugin seems to sometimes not be ready immediately to
+answer the pad query to get the buffer pool, add a retry loop with a
+slight delay between attempts to avoid failing.
+
+Upstream-Status: Inappropriate [bugfix]
+
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+
+diff --git a/libweston/gst-recorder.c b/libweston/gst-recorder.c
+index 7dafd956..9c29d04b 100644
+--- a/libweston/gst-recorder.c
++++ b/libweston/gst-recorder.c
+@@ -833,6 +833,7 @@ static int
+ gst_recorder_find_omx_pool(struct gst_recorder *r)
+ {
+       int ret = 0;
++      int i;
+       GstCaps *caps;
+       GstQuery *query;
+       GstBufferPool *pool;
+@@ -853,14 +854,24 @@ gst_recorder_find_omx_pool(struct gst_recorder *r)
+       /* find a pool for the negotiated caps now */
+       query = gst_query_new_allocation (caps, TRUE);
+-      if (!gst_pad_peer_query (r->appsrc_pad, query)) {
+-              /* query failed, not a problem, we use the query defaults */
+-              weston_log("allocation query failed\n");
++      /*
++       * The omx plugin seems to not always be ready to respond to queries
++       * immediately, try a few times with a delay to avoid failures.
++       */
++      for (i = 0; i < 5; i++) {
++              usleep(100000);
++              if (gst_pad_peer_query (r->appsrc_pad, query)) {
++                      break;
++              } else {
++                      weston_log("allocation query attempt %d failed\n", i + 1);
++              }
++      }
++      if (i == 5) {
+               ret = -1;
+               goto err;
+       }
+-      weston_log("goot %d pools\n", gst_query_get_n_allocation_pools (query));
++      weston_log("got %d pools\n", gst_query_get_n_allocation_pools (query));
+       if (gst_query_get_n_allocation_pools (query) > 0) {
+               /* we got configuration from our peer, parse them */
+               gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
index 51b75ce..7ba1fbc 100644 (file)
@@ -5,6 +5,7 @@ SRC_URI_append_rcar-gen3 = " \
     file://0002-Add-gst-recorder-for-h264-output-streaming.patch \
     file://0003-gst-recorder-Use-USERPTR-instead-of-DMABUF-for-VSP-o.patch \
     file://0004-gst-record-Specify-bytesused-and-length-of-VSP-input.patch \
+    file://0005-gst-record-Add-omx-pool-retries.patch \
 "
 
 COMPATIBLE_MACHINE = "salvator-x|m3ulcb|h3ulcb"