qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Volker Rümelin" <vr_qemu@t-online.de>
To: "Gerd Hoffmann" <kraxel@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Christian Schoenebeck <qemu_oss@crudebyte.com>,
	Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
	qemu-devel@nongnu.org
Subject: [PATCH v3 03/15] audio: make the resampling code greedy
Date: Fri, 24 Feb 2023 20:05:43 +0100	[thread overview]
Message-ID: <20230224190555.7409-3-vr_qemu@t-online.de> (raw)
In-Reply-To: <fa61e27f-6c37-af55-44bc-119592240720@t-online.de>

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 <mark.cave-ayland@ilande.co.uk>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
 audio/rate_template.h | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/audio/rate_template.h b/audio/rate_template.h
index b432719ebb..6648f0d2e5 100644
--- a/audio/rate_template.h
+++ b/audio/rate_template.h
@@ -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;
 
@@ -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++;
@@ -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 */
-- 
2.35.3



  parent reply	other threads:[~2023-02-24 19:06 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-24 19:03 [PATCH v3 00/15] audio: improve callback interface for audio frontends Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 01/15] audio: change type of mix_buf and conv_buf Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 02/15] audio: change type and name of the resample buffer Volker Rümelin
2023-02-24 19:05 ` Volker Rümelin [this message]
2023-02-24 19:05 ` [PATCH v3 04/15] audio: replace the resampling loop in audio_pcm_sw_write() Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 05/15] audio: remove sw == NULL check Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 06/15] audio: rename variables in audio_pcm_sw_write() Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 07/15] audio: don't misuse audio_pcm_sw_write() Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 08/15] audio: remove unused noop_conv() function Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 09/15] audio: make playback packet length calculation exact Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 10/15] audio: replace the resampling loop in audio_pcm_sw_read() Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 11/15] audio: rename variables " Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 12/15] audio: make recording packet length calculation exact Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 13/15] audio: handle leftover audio frame from upsampling Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 14/15] audio/audio_template: substitute sw->hw with hw Volker Rümelin
2023-02-24 19:05 ` [PATCH v3 15/15] audio: remove sw->ratio Volker Rümelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230224190555.7409-3-vr_qemu@t-online.de \
    --to=vr_qemu@t-online.de \
    --cc=kraxel@redhat.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).