shout2: Add compatibility for libshout >= 2.4.2
authorTobias Reineke <tobi@g3th.net>
Thu, 18 Nov 2021 16:27:17 +0000 (16:27 +0000)
committerNirbheek Chauhan <nirbheek@centricular.com>
Thu, 18 Nov 2021 22:53:35 +0000 (04:23 +0530)
In libshout >=2.4.2 shout_open() can return SHOUTERR_RETRY in addition
to SHOUTERR_BUSY.

The nonblocking example in libshout fixes the problem in a similar
way, as mentioned by the author in this issue:
https://gitlab.xiph.org/xiph/icecast-libshout/-/issues/2316

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/848

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1363>

subprojects/gst-plugins-good/ext/shout2/gstshout2.c

index 57dfd0a..8e2a59e 100644 (file)
@@ -576,7 +576,13 @@ gst_shout2send_connect (GstShout2send * sink)
   ret = shout_open (sink->conn);
 
   /* wait for connection or timeout */
+#ifdef SHOUTERR_RETRY
+  /* starting with libshout 2.4.2, shout_open() has broken API + ABI and
+   * can also return SHOUTERR_RETRY (a new define) to mean "try again" */
+  while (ret == SHOUTERR_BUSY || ret == SHOUTERR_RETRY) {
+#else
   while (ret == SHOUTERR_BUSY) {
+#endif
     if (gst_util_get_timestamp () - start_ts > sink->timeout * GST_MSECOND) {
       goto connection_timeout;
     }