diff options
author | Scott Murray <scott.murray@konsulko.com> | 2018-12-07 12:09:20 -0500 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2018-12-10 18:49:40 +0000 |
commit | 4ec177a75aeb99520bdcac827b564abd0c3fe235 (patch) | |
tree | 83e45ed73db7d07dd8c92eb247a86273b892158c | |
parent | 3c47c38fd19ebd0f9493ec7cc8ad05ebff1d0e94 (diff) |
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 <scott.murray@konsulko.com>
-rw-r--r-- | meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston/0005-gst-record-Add-omx-pool-retries.patch | 51 | ||||
-rw-r--r-- | meta-gstrecorder-rcar-gen3/recipes-graphics/wayland/weston_2.0.0.bbappend | 1 |
2 files changed, 52 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); 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" |