From 55b755085d36fbc0436d2c598401d385342d4897 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Fri, 7 Dec 2018 12:09:20 -0500 Subject: weston: Add patch to improve gst-record robustness 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 --- .../0005-gst-record-Add-omx-pool-retries.patch | 51 ++++++++++++++++++++++ .../recipes-graphics/wayland/weston_2.0.0.bbappend | 1 + 2 files changed, 52 insertions(+) create mode 100644 meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch 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 + +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); diff --git a/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston_2.0.0.bbappend b/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston_2.0.0.bbappend index 51b75ce3..7ba1fbcb 100644 --- a/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston_2.0.0.bbappend +++ b/meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston_2.0.0.bbappend @@ -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" -- cgit 1.2.3-korg