aboutsummaryrefslogtreecommitdiffstats
path: root/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch
blob: d6a7a1b34356a6aafcab7f5c5bb2b53ceb624df2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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);