diff mbox series

[10/12] audio: refactor audio_get_avail()

Message ID 20220923183640.8314-10-vr_qemu@t-online.de (mailing list archive)
State New, archived
Headers show
Series audio: misc. improvements and bug fixes | expand

Commit Message

Volker Rümelin Sept. 23, 2022, 6:36 p.m. UTC
Split out the code in audio_get_avail() that calculates the
buffer size that the audio frontend can read. This is similar
to the code changes in audio_get_free().

Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
 audio/audio.c | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

Comments

Marc-André Lureau Sept. 27, 2022, 11:54 a.m. UTC | #1
On Fri, Sep 23, 2022 at 10:51 PM Volker Rümelin <vr_qemu@t-online.de> wrote:

> Split out the code in audio_get_avail() that calculates the
> buffer size that the audio frontend can read. This is similar
> to the code changes in audio_get_free().
>
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>



> ---
>  audio/audio.c | 24 +++++++++++++++++++-----
>  1 file changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/audio/audio.c b/audio/audio.c
> index dd66b745e5..ba0c62b120 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -986,6 +986,18 @@ void AUD_set_active_in (SWVoiceIn *sw, int on)
>      }
>  }
>
> +/**
> + * audio_frontend_frames_in() - returns the number of frames the
> resampling
> + * code generates from frames_in frames
> + *
> + * @sw: audio recording frontend
> + * @frames_in: number of frames
> + */
> +static size_t audio_frontend_frames_in(SWVoiceIn *sw, size_t frames_in)
> +{
> +    return ((int64_t)frames_in << 32) / sw->ratio;
> +}
> +
>  static size_t audio_get_avail (SWVoiceIn *sw)
>  {
>      size_t live;
> @@ -1002,12 +1014,12 @@ static size_t audio_get_avail (SWVoiceIn *sw)
>      }
>
>      ldebug (
> -        "%s: get_avail live %zu ret %" PRId64 "\n",
> +        "%s: get_avail live %zu frontend frames %zu\n",
>          SW_NAME (sw),
> -        live, (((int64_t) live << 32) / sw->ratio) *
> sw->info.bytes_per_frame
> +        live, audio_frontend_frames_in(sw, live)
>          );
>
> -    return (((int64_t) live << 32) / sw->ratio) *
> sw->info.bytes_per_frame;
> +    return live;
>  }
>
>  /**
> @@ -1309,11 +1321,13 @@ static void audio_run_in (AudioState *s)
>              sw->total_hw_samples_acquired -= min;
>
>              if (sw->active) {
> +                size_t sw_avail = audio_get_avail(sw);
>                  size_t avail;
>
> -                avail = audio_get_avail (sw);
> +                avail = audio_frontend_frames_in(sw, sw_avail);
>                  if (avail > 0) {
> -                    sw->callback.fn (sw->callback.opaque, avail);
> +                    sw->callback.fn(sw->callback.opaque,
> +                                    avail * sw->info.bytes_per_frame);
>                  }
>              }
>          }
> --
> 2.35.3
>
>
>
diff mbox series

Patch

diff --git a/audio/audio.c b/audio/audio.c
index dd66b745e5..ba0c62b120 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -986,6 +986,18 @@  void AUD_set_active_in (SWVoiceIn *sw, int on)
     }
 }
 
+/**
+ * audio_frontend_frames_in() - returns the number of frames the resampling
+ * code generates from frames_in frames
+ *
+ * @sw: audio recording frontend
+ * @frames_in: number of frames
+ */
+static size_t audio_frontend_frames_in(SWVoiceIn *sw, size_t frames_in)
+{
+    return ((int64_t)frames_in << 32) / sw->ratio;
+}
+
 static size_t audio_get_avail (SWVoiceIn *sw)
 {
     size_t live;
@@ -1002,12 +1014,12 @@  static size_t audio_get_avail (SWVoiceIn *sw)
     }
 
     ldebug (
-        "%s: get_avail live %zu ret %" PRId64 "\n",
+        "%s: get_avail live %zu frontend frames %zu\n",
         SW_NAME (sw),
-        live, (((int64_t) live << 32) / sw->ratio) * sw->info.bytes_per_frame
+        live, audio_frontend_frames_in(sw, live)
         );
 
-    return (((int64_t) live << 32) / sw->ratio) * sw->info.bytes_per_frame;
+    return live;
 }
 
 /**
@@ -1309,11 +1321,13 @@  static void audio_run_in (AudioState *s)
             sw->total_hw_samples_acquired -= min;
 
             if (sw->active) {
+                size_t sw_avail = audio_get_avail(sw);
                 size_t avail;
 
-                avail = audio_get_avail (sw);
+                avail = audio_frontend_frames_in(sw, sw_avail);
                 if (avail > 0) {
-                    sw->callback.fn (sw->callback.opaque, avail);
+                    sw->callback.fn(sw->callback.opaque,
+                                    avail * sw->info.bytes_per_frame);
                 }
             }
         }