aboutsummaryrefslogtreecommitdiffstats
path: root/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch')
-rw-r--r--meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch51
1 files changed, 51 insertions, 0 deletions
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
index 00000000..d6a7a1b3
--- /dev/null
+++ b/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch
@@ -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);