adapter: increase max-retry to 64

When the follower doesn't produce enough data for this many attempts,
bail and cause an xrun to avoid an infinite loop.

The limit of 8 cause real-life problems and should be larger. It should
probably depend on the expected size per cycle (node.latency) and the
current quantum but we don't always have this information.

See #4334
This commit is contained in:
Wim Taymans 2024-10-07 09:28:39 +02:00
parent 27961630a6
commit 8cd3fc6922
2 changed files with 6 additions and 4 deletions

View file

@ -34,6 +34,7 @@ SPA_LOG_TOPIC_DEFINE_STATIC(log_topic, "spa.audioadapter");
#define DEFAULT_ALIGN 16
#define MAX_PORTS (SPA_AUDIO_MAX_CHANNELS+1)
#define MAX_RETRY 64
/** \cond */
@ -1427,7 +1428,7 @@ static int follower_ready(void *data, int status)
this->driver = true;
if (this->direction == SPA_DIRECTION_OUTPUT) {
int retry = 8;
int retry = MAX_RETRY;
while (retry--) {
status = spa_node_process_fast(this->target);
if (status & SPA_STATUS_HAVE_DATA)
@ -1656,7 +1657,7 @@ impl_node_port_reuse_buffer(void *object, uint32_t port_id, uint32_t buffer_id)
static int impl_node_process(void *object)
{
struct impl *this = object;
int status = 0, fstatus, retry = 8;
int status = 0, fstatus, retry = MAX_RETRY;
if (!this->ready) {
if (!this->warned)

View file

@ -34,6 +34,7 @@ SPA_LOG_TOPIC_DEFINE_STATIC(log_topic, "spa.videoadapter");
#define DEFAULT_ALIGN 16
#define MAX_PORTS (1+1)
#define MAX_RETRY 64
/** \cond */
@ -1419,7 +1420,7 @@ static int follower_ready(void *data, int status)
this->driver = true;
if (this->direction == SPA_DIRECTION_OUTPUT) {
int retry = 8;
int retry = MAX_RETRY;
while (retry--) {
status = spa_node_process_fast(this->target);
if (status & SPA_STATUS_HAVE_DATA)
@ -1708,7 +1709,7 @@ impl_node_port_reuse_buffer(void *object, uint32_t port_id, uint32_t buffer_id)
static int impl_node_process(void *object)
{
struct impl *this = object;
int status = 0, fstatus, retry = 8;
int status = 0, fstatus, retry = MAX_RETRY;
if (!this->ready) {
if (!this->warned)