Skip to content

Commit

Permalink
audio: make the resampling code greedy
Browse files Browse the repository at this point in the history
Read the maximum possible number of audio frames instead of the
minimum necessary number of frames when the audio stream is
downsampled and the output buffer is limited. This makes the
function symmetrical to upsampling when the input buffer is
limited. The maximum possible number of frames is written here.

With this change it's easier to calculate the exact number of
audio frames the resample function will read or write. These two
functions will be introduced later.

Acked-by: Mark Cave-Ayland <[email protected]>
Acked-by: Marc-André Lureau <[email protected]>
Signed-off-by: Volker Rümelin <[email protected]>
Message-Id: <[email protected]>
  • Loading branch information
Volker Rümelin authored and elmarco committed Mar 6, 2023
1 parent 2c3f9a0 commit 8933882
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions audio/rate_template.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ void NAME (void *opaque, struct st_sample *ibuf, struct st_sample *obuf,
int64_t t;
#endif

ilast = rate->ilast;

istart = ibuf;
iend = ibuf + *isamp;

Expand All @@ -59,15 +57,17 @@ void NAME (void *opaque, struct st_sample *ibuf, struct st_sample *obuf,
return;
}

while (obuf < oend) {
/* without input samples, there's nothing to do */
if (ibuf >= iend) {
*osamp = 0;
return;
}

/* Safety catch to make sure we have input samples. */
if (ibuf >= iend) {
break;
}
ilast = rate->ilast;

/* read as many input samples so that ipos > opos */
while (true) {

/* read as many input samples so that ipos > opos */
while (rate->ipos <= (rate->opos >> 32)) {
ilast = *ibuf++;
rate->ipos++;
Expand All @@ -78,6 +78,11 @@ void NAME (void *opaque, struct st_sample *ibuf, struct st_sample *obuf,
}
}

/* make sure that the next output sample can be written */
if (obuf >= oend) {
break;
}

icur = *ibuf;

/* wrap ipos and opos around long before they overflow */
Expand Down

0 comments on commit 8933882

Please sign in to comment.